Ouhla...
si je comprends bien dans ton modèle tu as du php dans le squelette:
TRÈS MAUVAISE IDÉE... cela pose des problèmes de perf du cache, mais
surtout dans ton cas de sécurité ! (les injections semblent hyper
faciles à faire)
Ce qui est recommandé:
crée une ou des fonctions php contenant ton code php dans
mes_fonctions.php, ces fonctions que tu crées vont recevoir des
paramètres.
ex.:
function ma_fonction_1(param1, param2,...) {
le code qui utilise param1 et 2
return ce_que_tu_veux_renvoyer;
}
dans ton squelette du modèle tu appelles ta fonction, comme un filtre
SPIP, en lui passant les paramètres de l'environnement. ex :
[(#ENV{id_ressource}|ma_fonction_1{param2,...})]
Grâce à #ENV (sans "*"), Spip sécurise la transmission des paramètres.
Grâce à la fonction placée dans mes_fonctions.php et appelée comme
filtre le cache de Spip n'est pas court-circuité (il l'est toujours
dès qu'il y a du PHP dans le squelette).
Tu peux voir une contrb' que j'ai essayée pédagogique sur
l'utilisation du PHP/SPIP:
Afficher les articles connexes, triés par pertinence - SPIP-Contrib (notamment
la fin pour Spip>1.9.2)
Le 22 mars 2011 15:09, freebsnet <freebsnet@free.fr> a écrit :
Bertrand Marne a écrit :
Le 22 mars 2011 13:48, freebsnet <freebsnet@free.fr> a écrit :
j'arrive pas à récupérer et exploiter dans le modèle l'id_ressource=1 passer
par son raccourci <grr|article=30|id_ressource=1>
derrière tout ça un une usine à gaz pour calculer le planning annuel qui
récupère bien les paramètres dans l'url mais pas dans l'environnement
d'ou l'idée d'utiliser une redirection
Effectivement les modèles ne récupèrent pas l'environnement. Et donc
en principe, on ne leur passe de paramètre que par l'appel au modèle
lui même c'est à dire <grr|article=30|id_ressource=1|an=2011> dans un
article.
Le problème semble donc être dans ton modèle "grr".
Dedans, un #ENV{id_ressource} et un #ENV{an} devraient te permettre de
récupérer ces deux paramètres. Est-ce le cas ?
oui, dans le modèle je peux les récupérer,
#ENV{id_ressource} me renvoi bien 1
et pour l'année j'ai pas besoin de la passer dans l'environnement,
vu que le calcul débute toujours par l'année en cours et qu'en suite l'année
est récupérée dans l'url
donc mon modèle débute avec ceci :
// si la date est dans l'url on la traite, sinon on la fabrique
#SET{an,#EVAL{$_GET['an']}}
[(#GET{an}|?{[(#SET{an,#GET{an}})],[(#SET{an,[(#DATE|annee)]})]})]
// si l'id_ressource est dans l'url on la traite, sinon on récupère celle
passée dans l'environnement
#SET{ressource,#EVAL{$_GET['id_ressource']}}
[(#GET{ressource}|?{[(#SET{ressource,#GET{ressource}})],[(#SET{ressource,#ENV{ressource}})]})]
c'est après que ça ce complique, le modèle fait appel à une fonction php qui
calcule et construit le planning en tirant les dates des réservations dans
une table,
toujours dans le modèle on démarre un tableau (2 colonnes 6 lignes) et pour
chaque cellules on passe le mois à calculer mais pas l'id_ressource (c'est
là que ça coince)
<table>
<tr>
<td>
<?php // on commence par le mois de janvier
$mois = '01';
echo showCalendar("#GET{ans}-$mois");
?>
</td>
<td>
<?php // puis le mois de février = janvier +1 et ainsi de suite
$mois = $mois + 1;
$mois = "0$mois";
echo showCalendar("#GET{ans}-$mois");
?>
</td>
.... etc ...
dans mes_fonctions.php
la fonction showCalendar($periode)
<?php
$T_reserv = 'spip_grr_reservations';
function showCalendar($periode){
// on reprend les variables
$an = getYear($periode);
$mois = getMonth($periode);
// si le fomulaire a été posté on prend la variable id_ressource dans le
champ caché du fomulaire de requête
if ($_POST) {
$id_ressource = $_POST['id_ressource'];
}
// sinon on prend la variable id_ressource passée dans l'url.
else {
$id_ressource = $_GET['id_ressource'];
}
// on vérifie s'il y a des jours réservés dans le mois demandé. s'il y
en a on les place dans le tableau $res
$res = array();
etc ...
c'est arrivé ici qu'il faudrait modifier pour traiter id_ressource passé
dans l'environnement,
en virant le bout de code if($_POST), par autre chose,
je suppose qu'il doit falloir modifier la fonction pour lui ajouter un
paramètres supplémentaire $ressource
showCalendar($periode,$ressource)
et pouvoir faire des requêtes sur la table spip_grr_reservations autrement
que par les valeur passées dans l'url
voila où je bute, je sais pas si c'est clair tout ça... ?
--
Beurt