Variable PHP dans #URL_PAGE

Bonjour,

J'ai une question à propos de la balise #URL_PAGE : comment peut-on y passer
une variable PHP ?

Je m'explique avec un exemple simple.
J'ai une variable PHP : $i=1
Je voudrais ouvrir spip.php?page=ex1, où le "1" vient en fait de $i.

J'ai tenté : #URL_PAGE{ex<?php echo $i; ?>}, mais ça ne fonctionne pas :s

Merci d'avance de votre aide :wink:

++

Rudy a écrit :

Bonjour,

J'ai une question à propos de la balise #URL_PAGE : comment peut-on y passer une variable PHP ?

Je m'explique avec un exemple simple.
J'ai une variable PHP : $i=1
Je voudrais ouvrir spip.php?page=ex1, où le "1" vient en fait de $i.

J'ai tenté : #URL_PAGE{ex<?php echo $i; ?>}, mais ça ne fonctionne pas :s

houla, un peu de lecture s'impose....

la bonne approche est sans doute #URL_PAGE{ex#COMPTEUR_BOUCLE}

Stephane wrote:

houla, un peu de lecture s'impose....

SPIP, PHP et Javascript sont dans un bateau - SPIP-Contrib

la bonne approche est sans doute #URL_PAGE{ex#COMPTEUR_BOUCLE}

Oui, bon, alors j'ai peut-être pris un exemple trop simple :smiley:

J'ai en fait quelque chose de plus compliqué que ça, qui ressemble plutôt à
ce qui suit.

On reprend notre $i : $i = "azerty" (chaîne de caractères, et non plus un
simple chiffre).
Je voudrais faire quelque chose comme : #URL_PAGE{blabla<?php echo $i;
?>blabla}

Je sais pertinemment que ce n'est pas comme ça que je vais y arriver, mais
serait-il possible de me donner la bonne syntaxe SVP ?

Merci encore.

Rudy a écrit :

Stephane wrote:

houla, un peu de lecture s'impose....

SPIP, PHP et Javascript sont dans un bateau - SPIP-Contrib

la bonne approche est sans doute #URL_PAGE{ex#COMPTEUR_BOUCLE}

Oui, bon, alors j'ai peut-être pris un exemple trop simple :smiley:

J'ai en fait quelque chose de plus compliqué que ça, qui ressemble plutôt à ce qui suit.

On reprend notre $i : $i = "azerty" (chaîne de caractères, et non plus un simple chiffre).
Je voudrais faire quelque chose comme : #URL_PAGE{blabla<?php echo $i; ?>blabla}

Je sais pertinemment que ce n'est pas comme ça que je vais y arriver, mais serait-il possible de me donner la bonne syntaxe SVP ?

ben c'est sur, pas avec du PHP, c'est pour ca que je te disais de lire cet article :
1) compilation
2) generation du cache
3) execution du php

le php n'a donc aucun effet sur les squelettes (enfin, sauf le tout nouveau vertebrer de la 1.9.3, mais on va eviter d'en parler ici...)

il sort d'ou ton $i ???

la bonne methode est peut etre
#SET{toto,blabla#BALISEblabla}
#URL_PAGE{blabla(#GET{toto})blabla}

mais sans savoir d'ou sort la variable, difficile de t'aider.

peut etre que tu devrais coder un balise ou un filtre pour pouvoir faire directement #URL_PAGE{#MABALISE} ou #URL_PAGE{(#MABALISE|monfiltre}} ?

Salut, pour ma part, j'essaierai ça, j'ai testé et ça marche :

#SET{montruc,<?php echo $i; ?>}

  et puis, au lieu d'URL_PAGE :

href="spip.php?page=mapage#GET{montruc}"

A+
----
Marc

Le 31 oct. 07 à 15:30, Rudy a écrit :

Stephane wrote:

houla, un peu de lecture s'impose....

SPIP, PHP et Javascript sont dans un bateau - SPIP-Contrib

la bonne approche est sans doute #URL_PAGE{ex#COMPTEUR_BOUCLE}

Oui, bon, alors j'ai peut-être pris un exemple trop simple :smiley:

J'ai en fait quelque chose de plus compliqué que ça, qui ressemble plutôt à
ce qui suit.

On reprend notre $i : $i = "azerty" (chaîne de caractères, et non plus un
simple chiffre).
Je voudrais faire quelque chose comme : #URL_PAGE{blabla<?php echo $i;
?>blabla}

Je sais pertinemment que ce n'est pas comme ça que je vais y arriver, mais
serait-il possible de me donner la bonne syntaxe SVP ?

Merci encore.

_______________________________________________
liste spip
spip@rezo.net - désabonnement : spip-off@rezo.net
Infos et archives : http://listes.rezo.net/mailman/listinfo/spip
Documentation de SPIP : http://www.spip.net/
irc://irc.freenode.net/spip
FAQ : FAQ webmestre - SPIP

Stephane wrote:

ben c'est sur, pas avec du PHP, c'est pour ca que je te disais de lire
cet article :
1) compilation
2) generation du cache
3) execution du php

J'ai bien compris, mais ça ne m'aide pas tellement :s :s

il sort d'ou ton $i ???

C'est la valeur du champ 'i' (par exemple) d'un enregistrement de ma base de
données.
J'ai une boucle for avec laquelle je balaye tous les enregistrements d'une
table, je range à chaque fois le champ 'i' dans la variable $i si tu
préfères :wink:
Toujours dans la boucle for, j'aimerais donc utiliser ce $i dans #URL_PAGE.

mais sans savoir d'ou sort la variable, difficile de t'aider.

J'espère que ça ira mieux maintenant :wink:

Marc VALLETEAU de MOULLIAC wrote:

Salut, pour ma part, j'essaierai ça, j'ai testé et ça marche :

#SET{montruc,<?php echo $i; ?>}

  et puis, au lieu d'URL_PAGE :

href="spip.php?page=mapage#GET{montruc}"

Oui mais pour faire ça, pas besoin de passer par SPIP : PHP seul suffit
(echo "<a href=\"spip.php?page=mapage'.$i."\">") :wink: C'est d'ailleurs ce que
j'utilise actuellement.

Mon but est justement d'utiliser URL_PAGE pour simplefier l'écriture.
Maintenant, si ça ne simplifie pas, je vais pas m'embêter à changer
l'écriture...

Rudy a écrit :

Marc VALLETEAU de MOULLIAC wrote:

Salut, pour ma part, j'essaierai ça, j'ai testé et ça marche :

#SET{montruc,<?php echo $i; ?>}

ca c'est une horreur à ne surtout pas faire.
c'est le meilleur moyen d'ouvrir un gros trou de securité !
en plus il y a une balise #EVAL qui doit pouvoir servir à ca.

  et puis, au lieu d'URL_PAGE :

href="spip.php?page=mapage#GET{montruc}"

tout l'interet de passer par #URL_PAGE, c'est de pouvoir gerer des url propres et de ne pas avoir à refaire les squelettes si la syntaxe de cet appel change dans la prochaine version de Spip.
ce code est donc à éviter aussi.

Oui mais pour faire ça, pas besoin de passer par SPIP : PHP seul suffit (echo "<a href=\"spip.php?page=mapage'.$i."\">") :wink: C'est d'ailleurs ce que j'utilise actuellement.

Mon but est justement d'utiliser URL_PAGE pour simplefier l'écriture. Maintenant, si ça ne simplifie pas, je vais pas m'embêter à changer l'écriture...

Comme je le disais, sans le code, difficile de t'aider.

peut etre que #EVAL ou #ARRAY pourraient t'aider, mais rien n'est moins sur...

@++

Rudy <rudy.vogel@free.fr> wrote:

C'est la valeur du champ 'i' (par exemple) d'un enregistrement de ma base de
données.
J'ai une boucle for avec laquelle je balaye tous les enregistrements d'une
table, je range à chaque fois le champ 'i' dans la variable $i si tu
préfères :wink:
Toujours dans la boucle for, j'aimerais donc utiliser ce $i dans #URL_PAGE.

> mais sans savoir d'ou sort la variable, difficile de t'aider.

J'espère que ça ira mieux maintenant :wink:

Et ta table tu ne peut pas l'interroger via une boucle pure spip
faisable depuis 1.9
<BOUCLE_toto(MATABLE){par..}>
        #MON_CHAMP
        #SET{tata,blabal#MON_CHAMPblabla}
        // je ne suis pas certain de la syntaxe de cette dernière
expression peut-être passer par un filtre |concatener (si il n'existe
pas se le fabriquer)
</BOUCLE_toto>

--
Dominique
http://wojylac.free.fr

Dominique wrote:

Et ta table tu ne peut pas l'interroger via une boucle pure spip
faisable depuis 1.9
<BOUCLE_toto(MATABLE){par..}>
        #MON_CHAMP
        #SET{tata,blabal#MON_CHAMPblabla}
        // je ne suis pas certain de la syntaxe de cette dernière
expression peut-être passer par un filtre |concatener (si il n'existe
pas se le fabriquer)
</BOUCLE_toto>

Mmm... Vu tout ce que j'ai dans ma table et comment chaque donnée est
traitée, c'est assez difficilement concevable. Je préfèrerais garder le
système actuel.

Stephane wrote:

Comme je le disais, sans le code, difficile de t'aider.

OK, alors voilà. Je supprime les lignes qui ne concernent pas ce problème
pour pls de lisibilité.

<?php
mysql_connect("[@BDD]", "[user]", "[mdp]") or die(mysql_error());
mysql_select_db("[nom_BDD]") or die(mysql_error());
for ($i=1 ; $i <=$nb_gp ;
$i++){ //$nb_gp est
défini dans un autre fichier
$res=mysql_query("SELECT * FROM gps07 WHERE num=$i") or die(mysql_error());
$row=mysql_fetch_array($res) or die(mysql_error());
$abr=$row['abreviation'];
$lien_gp = "$add_accueil/spip.php?page=res_".$abr."07";
//$add_accueil peut être apparenté à #URL_SITE_SPIP, mais j'ai préféré me
créer ma variable dans un autre fichier lors de la conception
echo "<tr><a href=\"".$lien_gp."\">".$pays."</a></td></tr>";}?>

C'est donc dans $lien_gp (ou directement dans la dernière ligne, d'ailleurs)
que j'aimerais introduire #URL_PAGE.
Notez que ce ne sont que quelques lignes, et que je ne compte pas envisager
d'utiliser autre chose qu'une base de données MySQL car j'ai beaucoup de
"scripts" de ce type sur mon site, et ça m'embêterait beaucoup de devoir
tous les refaire.

Merci encore :wink:

Rudy <rudy.vogel@free.fr> wrote:

<?php
mysql_connect("[@BDD]", "[user]", "[mdp]") or die(mysql_error());
mysql_select_db("[nom_BDD]") or die(mysql_error());
for ($i=1 ; $i <=$nb_gp ;
$i++){ //$nb_gp est
défini dans un autre fichier
$res=mysql_query("SELECT * FROM gps07 WHERE num=$i") or die(mysql_error());
$row=mysql_fetch_array($res) or die(mysql_error());
$abr=$row['abreviation'];
$lien_gp = "$add_accueil/spip.php?page=res_".$abr."07";
//$add_accueil peut être apparenté à #URL_SITE_SPIP, mais j'ai préféré me
créer ma variable dans un autre fichier lors de la conception
echo "<tr><a href=\"".$lien_gp."\">".$pays."</a></td></tr>";}?>

Première remarque mais je pense que même en php il y a moyen d'optimiser
les requètes et de n'en faire qu'une seule donc de supprimer la boucle
for
ce qui donnerait

//$nb_gp est défini dans un autre fichier
$res = mysql_query("SELECT * FROM gps07 WHERE num<=$nb_gp") or
die(mysql_error());
$result = mysql_fetch_array($res) or die(mysql_error());
foreach ($result as $key => $row) {
        $abr = $row['abreviation'];
        $lien_gp = $add_accueil.'/spip.php?page=res_'.$abr.'07';
        //$add_accueil peut être apparenté à #URL_SITE_SPIP,
        echo '<tr><td><a href="', $lien_gp, '">', $pays,
'</a></td></tr>';
}
?>

et avec une boucle spip en supposant qu'il soit possible de définir
$nb_gp en spipien par un #SET{nb_gp,.....} et pays de même

<BOUCLE1 (GPS07) {num <= #GET{nb_gp}}>
        [<tr><td><a
href="(#URL_PAGE{res_[(#ABREVIATION|concat{07})]}|url_absolue">#GET{pays
}</a></td></tr>]
</BOUCLE1>

Mais comme je ne sais pas ce qu'il y a dans "l'autre fichier" ...?
Quand on peut se passer de pHp et profiter d'utiliser spip en frontal...

--
http://wojylac.free.fr
Un proverbe chinois dit que lorsqu'on a rien à dire
on cite généralement un proverbe chinois.

Dominique wrote:

Quand on peut se passer de pHp et profiter d'utiliser spip en
frontal...

C'est ce à quoi j'aurais voulu arriver, mais seulement si la modif était
simple. Là, avec ce que tu me proposes, c'est finalement encore plus
complexe que ce que j'ai à la base, et ça ne simplifie absolument rien :s :s

Donc bon, s'il n'y a pas de solution directe (sans changer radicalement mon
code PHP qui fonctionne très bien), je préfère en rien changer.

En tout cas, merci de l'aide que vous m'avez apportée jusque là :wink:

Rudy a écrit :

Dominique wrote:

Quand on peut se passer de pHp et profiter d'utiliser spip en
frontal...

C'est ce à quoi j'aurais voulu arriver, mais seulement si la modif était simple. Là, avec ce que tu me proposes, c'est finalement encore plus complexe que ce que j'ai à la base, et ça ne simplifie absolument rien :s :s

ben heu ici, on parle spip.
si tu veux des conseils PHP/MySQL, c'est pas le bon endroit.
on ne parle pas de simplifier la, on parle de faire du spip plutot que de faire du php cracra avec trou de sécurité intégré...

en spip, pour faire des requetes, on fait des boucles.
le GROS avantage, c'est que ca utilise le systeme de cache et que la requete n'est donc pas faite à chaque hit.

si je comprend bien ce que tu veux, c'est juste :

<BOUCLE_A(gps07){num<=#NB_GP_MAX}>
[<tr><td><a href="(#URL_PAGE{res_(#ABREVIATION)07})">#PAYS</a></td></tr>]
</BOUCLE_A>

avec dans mes_fonctions.php :
$GLOBALS['nb_gp']=12;

function balise_NB_GP_MAX_dist($p) {
  $p->code = "\$GLOBALS['nb_gp']";
  return $p;
}

c'est quand meme plus simple, non ?

si ta table est dans une base externe, il faut definir la connexion (cherche spip multibase sur spip-contrib)

@++

ben heu ici, on parle spip.
si tu veux des conseils PHP/MySQL, c'est pas le bon endroit.
on ne parle pas de simplifier la, on parle de faire du spip plutot que
de faire du php cracra avec trou de sécurité intégré...

J'aurais simplement voulu du SPIP pour #URL_PAGE. Car comme je l'ai dit,
j'ai pris que la partie du code qui nous intéressait, mais le script fait en
fait une bonne quinzaine de lignes, et l'adapter complètement avec SPIP
compliquerait plus qu'autre chose.

en spip, pour faire des requetes, on fait des boucles.
le GROS avantage, c'est que ca utilise le systeme de cache et que la
requete n'est donc pas faite à chaque hit.

C'est sûr. Mais bon, à la limite, c'est pas intéressant ici, dans le sens où
c'est un site qui est mis à jour très souvent et qu'il vaut mieux que le
visiteur voit la nouvelle page à chaque fois qu'il passe.

si je comprend bien ce que tu veux, c'est juste :

<BOUCLE_A(gps07){num<=#NB_GP_MAX}>
[<tr><td><a
href="(#URL_PAGE{res_(#ABREVIATION)07})">#PAYS</a></td></tr>]
</BOUCLE_A>

avec dans mes_fonctions.php :
$GLOBALS['nb_gp']=12;

function balise_NB_GP_MAX_dist($p) {
$p->code = "\$GLOBALS['nb_gp']";
return $p;
}

c'est quand meme plus simple, non ?

Ca l'est, mais malheureusement jai beaucoup plus de variables que ça à
gérer, dont certaines qui nécessitent un traitement après leu récupération
dans la BDD... Enfin bref, là c'est plus simple (et encore, je dirais plutôt
que c'est d'une difficulté équivalente), mais si l'on prend en compte les
autres variables ET le fait que j'ai plusieurs scripts de ce type, ça
complexifie :frowning:

Ce que je voulais au départ, c'était simplement savoir si l'on pouvait
mettre le #URL_PAGE dans le code PHP. Je me rend compte que non, donc, comme
on dit : "tant pis" :wink:
Après tout, c'est pas bien grave, hein...

Je vous remercie énormément du temps que vous avez pris pour me répondre et
tenter de trouver une solution, jusqu'à écrire un code SPIP équivalent à mon
code PHP :wink:

@++ et encore merci beaucoup !

Rudy a écrit :

le script fait en fait une bonne quinzaine de lignes, et l'adapter complètement avec SPIP compliquerait plus qu'autre chose.

Vaut mieux lire ça que d'être borgne !!
ah là là ....

Pat

Rudy a écrit :

ben heu ici, on parle spip.
si tu veux des conseils PHP/MySQL, c'est pas le bon endroit.
on ne parle pas de simplifier la, on parle de faire du spip plutot que
de faire du php cracra avec trou de sécurité intégré...

J'aurais simplement voulu du SPIP pour #URL_PAGE.

tu as lu l'article sur spip/php/javascript, oui ou non ???
amha, si tu l'as lu, tu peux le relire 2 ou 3 fois, il y a des trucs important que visiblement tu n'as pas percuté.

  Car comme je l'ai dit,

j'ai pris que la partie du code qui nous intéressait, mais le script fait en fait une bonne quinzaine de lignes, et l'adapter complètement avec SPIP compliquerait plus qu'autre chose.

c'est super top confidentiel visiblement, alors on va pas pouvoir t'aider.
ceci dit ca m'etonnerait que les 10 lignes autour rendent propre le bout de code que tu as montré.
l'avantage de passer par spip ou un framework, c'est de ne pas réinventer la roue et surtout de profiter des quelques siecles d'évolution et d'amelioration qui ont suivi.

en spip, pour faire des requetes, on fait des boucles.
le GROS avantage, c'est que ca utilise le systeme de cache et que la
requete n'est donc pas faite à chaque hit.

C'est sûr. Mais bon, à la limite, c'est pas intéressant ici, dans le sens où c'est un site qui est mis à jour très souvent et qu'il vaut mieux que le visiteur voit la nouvelle page à chaque fois qu'il passe.

meme un cache à 1 seconde est tres interessant.
avec ton code, si 100 hits tombent au meme moment, tu vas ecrouler le serveur, avec un cache, meme avec délai tres bas, tu ecartes tout danger.
sans compter que tu n'expose pas directement un script manipulant la base (mais uniquement au recalcul)
ceci dit, j'espere que ton code réel est plus solide que ce que tu nous as montré...

si je comprend bien ce que tu veux, c'est juste :

<BOUCLE_A(gps07){num<=#NB_GP_MAX}>
[<tr><td><a
href="(#URL_PAGE{res_(#ABREVIATION)07})">#PAYS</a></td></tr>]
</BOUCLE_A>

avec dans mes_fonctions.php :
$GLOBALS['nb_gp']=12;

function balise_NB_GP_MAX_dist($p) {
$p->code = "\$GLOBALS['nb_gp']";
return $p;
}

c'est quand meme plus simple, non ?

Ca l'est, mais malheureusement jai beaucoup plus de variables que ça à gérer

ben oui, ca sera d'autant plus simple alors.
tu sais qu'on peut meme faire des jointures et des group by (critere fusion)

, dont certaines qui nécessitent un traitement après leu récupération

dans la BDD...

oui, ca s'appelle un filtre...

  Enfin bref, là c'est plus simple (et encore, je dirais plutôt

que c'est d'une difficulté équivalente), mais si l'on prend en compte les autres variables ET le fait que j'ai plusieurs scripts de ce type, ça complexifie :frowning:

si tu le dis...

Ce que je voulais au départ, c'était simplement savoir si l'on pouvait mettre le #URL_PAGE dans le code PHP.

ben tu peux appeler balise_URL_PAGE_dist() dans ce cas.

@++