[Zope] How can I let ZSQL method know the variable i define.

Peter Sabaini sabaini@niil.at
Sat, 27 Oct 2001 16:04:00 +0200 (CEST)


you have to pass variables explicitly to zsql methods, like <dtml-var=20
"test_for_page_count(url=3Durl)">=20

afaik this is for security reasons



On Sat, 27 Oct 2001, Python wrote:

> hi all: =20
>    I red an article about "SQL Page Counter" in "Zope how-to", i implem=
ent it with Z gadfly database connection instead of POSTGRES database.
>=20
>=20
> but i found the "url" varible defined cound not forward to let ZSQL met=
hod know.
>=20
> <dtml-call "REQUEST.set('url', URL0)">
> <dtml-in test_for_page_count>
>=20
> <dtml-if "count>=3D1">
> <dtml-call update_page_count>
> <dtml-in getPageViews>
> <center>
> This page has been viewed <b><dtml-var count></b> times.=20
> </center>
> </dtml-in>
> <dtml-else>
> <dtml-call initialize_page_count>
> <dtml-in getPageViews>
> <center>
> This page has been viewed <b><dtml-var count></b> time.=20
> </center>
> </dtml-in>
> </dtml-if>
> </dtml-in>
>=20
>=20
> but "test_for_page_count" ZSQL method could not "url"'s value.
>=20
> how could this happen?=20
>=20
>=20
>=20
> here is his implementation  :
>=20
>=20
>=20
> First set up a database, and a database connection.=20
> Then create your table. I called mine "countpages":
>=20
>=20
> --- SQL METHOD "create_table" ---
> CREATE TABLE countpages (
> count INT4,
> url VARCHAR(255)
> )
>=20
>=20
> Then, you'll need a few SQl methods:
>=20
>=20
> --- SQL METHOD "test_for_page_count" ---
> ARGUMENTS: url
> ----------------------------------------
> SELECT count(count) FROM countpages
> WHERE=20
> url =3D <dtml-sqlvar url type=3Dnb>
>=20
>=20
>=20
> --- SQL METHOD "getPageViews" ---
> ARGUMENTS: url
> ----------------------------------------
> select * from countpages
> WHERE=20
> url =3D <dtml-sqlvar url type=3Dnb>
>=20
>=20
>=20
> --- SQL METHOD "update_page_count" ---
> ARGUMENTS: url
> ----------------------------------------
> UPDATE countpages
> SET=20
> count =3D count + 1
> WHERE
> url =3D <dtml-sqlvar url type=3Dnb>
>=20
>=20
>=20
> --- SQL METHOD "initialize_page_count" ---
> ARGUMENTS: url
> ----------------------------------------
> INSERT INTO countpages (
> count, url
> ) VALUES (
> 1,
> <dtml-sqlvar url type=3Dnb>
> )
>=20
>=20
> Then, place this DTML in your standard_html_footer (or whereever you wa=
nt the count to show up.
>=20
>=20
> <dtml-comment>
>=20
> ### PAGE COUNT TOOLKIT ###
>=20
> ### Test to see if this page exists in the database
> ### If it does, update the count and display it.
> ### If not, create a record for it, and display that.
>=20
> </dtml-comment>
>=20
> <dtml-call "REQUEST.set('url', URL0)">
> <dtml-in test_for_page_count>
>=20
> <dtml-if "count>=3D1">
> <dtml-call update_page_count>
> <dtml-in getPageViews>
> <center>
> This page has been viewed <b><dtml-var count></b> times.=20
> </center>
> </dtml-in>
> <dtml-else>
> <dtml-call initialize_page_count>
> <dtml-in getPageViews>
> <center>
> This page has been viewed <b><dtml-var count></b> time.=20
> </center>
> </dtml-in>
> </dtml-if>
> </dtml-in>
> <BR><BR>
>=20
> <dtml-comment>
> ### END PAGE COUNT TOOLKIT ###
> </dtml-comment>
>=20
>=20
> I found that=20
> =FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=
=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=FF=D9=A2=97=A6j)e=8A=CB=FFf=8A^=FF:){=FA+=82=
=1Bm=A7=FF=FF=96+-=B3=FC=E8=A5=EF=E8=AE=0F=E6j)fj=7F=E5=8A=CBb=9D=FA?=CE=8A=
^=FF=F3hr=BA,=B2=9A,=B6=CA+=1D3=0Bzw(v)=E0=FF=FF=FFE=E9Z=B5=E7e=8A=CBl=FE=
=1Bm=A7=FF=FF=96+-=B3=FC=E8=A5=EF=E8=AE=0F=E6j)fj=7F=E5=8A=CBb=9D=FA?=CE=8A=
^=FD=A9=E7=A2=E9=DCz=1Bm=A7=FF=FF=96+-=B3=FC=E8=A5=EF=E8=AE=0F=E6j)fj=7F=E5=
=8A=CBb=9D=FA?=CE=8A^=FD=D7=AF
>=20

--=20

_________________________________________________
peter sabaini, mailto: sabaini@niil.at
-------------------------------------------------