Aide au projet spx : plugins pour pluxml - Forums pluxml
Vous n'êtes pas identifié(e).
Pages : 1
Bonsoir tout l'monde !
je poste ici la page statique sur laquelle je bosse actuellement.
s'il n'y avait qu'une chose à retenir c'est le tri à postériori dans le tableau global, censé permettre le multicritère...car je ne savais pas l'obtenir avec $o2["filter"]
le but est aussi de charger 1 seule fois les 735 entrées du tableau global puis de piocher dedans au fil des filtres... mais j'ai tout faux si la page relance la requete à chaque chargement ?
- pour l'instant les 3 filtres individuellement sont fonctionnels sauf l'input $nom qui ne marche qu'en saisissant dans la barre d'adresse (mauvaise redirection?)
- le select est fonctionnel
- le div de gauche contient la liste des végétaux correspondants aux critères de tri
- le div de droite donne les détails sur le végétal choisi (par variable _GET ou en cliquant l'image de gauche)
A noter que je n'utilise pas l'urlRewrite()
[== PHP ==]
<?php
# edition de la base botanique
global $plxShow;
$html = '';
$IMAGEPATH = $plxShow->plxMotor->aConf['images'];
$urlpage= "index.php?static010/plantes";
//$urlpage= $plxShow->plxMotor->urlRewrite('?static010')."/plantes";//$urlpage= $_SERVER['REQUEST_URI'];
$plante_id = plxUtils::strCheck(plxUtils::unSlash($_GET['plante']));
$gamme_id = plxUtils::strCheck(plxUtils::unSlash($_GET['gamme']));
$nom = plxUtils::strCheck(plxUtils::unSlash($_GET['nom']));
# champs de recherche
echo '<span><form method="GET" name="f_plantes" action="'.$plxShow->plxMotor->aConf['racine'].$urlpage.'">';//$plxShow->plxMotor->aConf['racine'].$urlpage;
# select des gammes
$o= array();
$o["table"]="plantes_gamme";
$o["out"]="array";
$gammes = $plxShow->callHook('spxdatas::getData',$o);
echo '<select name="gamme" onchange="location.href = this.value;">'; // remplace submit();
echo '<option title"toutes" value="" '.$selected.'>Toutes les gammes</option>';
foreach ($gammes as $c)
{ $c1 = $c['plantes_gamme_id'];
$selected = ($c1==$gamme_id) ? 'selected': '';
$c1 =$urlpage.'&gamme='.$c1;
echo '<option title="'.$c1.' '.$c['desc'].'" value="'.$c1.'" '.$selected.'>'.$c['gamme'].'</option>';
}
echo'</select></span>';
# recherche sur un nom
?><span><input type="text" name="nom" value="<?php echo $nom ?>" style="width:200px;" title="entrez le mot ou texte à rechercher" placeholder="chercher par nom"
onChange="location.href('static010/plantes&mot='+this.value)"
/></span><?php
echo '</form>';
#créer le tableau global
$o2= array();
$o2["table"]="plantes";
//$o2["filter"]=$filter; //on filtrera après le tableau $plantes
$o2["out"]="array";
$plantes = $plxShow->callHook('spxdatas::getData',$o2);
$fiches_selected= array(); // tableau des fiches filtrées
# on applique les filters à tous ses enregistrements
foreach ($plantes as $p)
{ $id_fiche = $p['plantes_id'];
if(in_array($gamme_id, explode(' ', $p['gamme']))) { $fiches_selected[].=$id_fiche;}
if($plante_id==$p['plantes_id']) { $fiches_selected[].=$id_fiche;}
if($nom!="" AND strpos($p['genre'],$nom)!== false) { $fiches_selected[].=$id_fiche;}
}
if ($fiches_selected=="") {$fiches_selected[].=$plantes[0];} //si aucun tri affiche première fiche
$fiches_selected = array_unique($fiches_selected); // supprime les fiches en doublons
$fiches_selected = array_values($fiches_selected); // remet les clefs dans un bon ordre
$nbfiches = sizeof($fiches_selected); // compte le nombre de fiche unique
$i=0; // rang de fiche
# on prend dans le tableau filtré et on affiche
echo '<div class="col1">';
foreach ($plantes as $a)
{ if ($a["plantes_id"]==$fiches_selected[$i])
{ $famille= $a["famille"];
$genre= $a["genre"];
$espece= $a["espece"];
$urlfiche= $urlpage."&plante=".$a["plantes_id"];
$html .='<div class="resp">
<a href="'.$urlfiche.'" alt="no photo" title="ouvrir fiche individuelle" >
<b>'.$famille.' '.$genre.' '.$espece.'</b>
<img style="height:200px;" src='.$IMAGEPATH.$a["photo"].' alt="url absente" /></a>
</div>
';
$i++;
}
}
#affichage (prévoir sortie html2pdf)
echo $html;
echo '</div>';
# affichage fiche individuelle plante
$filter = ($plante_id!="") ? "plantes_id=".$plante_id : "";
$o= array();
$o["table"]="plantes";
$o["filter"]=$filter;
$o["out"]="array";
$fiches = $plxShow->callHook('spxdatas::getData',$o);
echo '<h5>'.$nbfiches.' résultats sur '.sizeof($fiches).' fiches</h5>';
foreach ($fiches as $fiche)
{
$statut= $fiche["statut"];
$famille= $fiche["famille"];
$genre= $fiche["genre"];
$espece= $fiche["espece"];
$gam= ($gamme_id !="") ? $fiche["gamme"] : $gammes[$gamme_id-1]["gamme"];
$urladmin= "core/admin/plugin.php?p=spxdatas&page=data_edit&table=plantes&data_id=".$fiche["plantes_id"];
$urlfiche= "index.php?static010/plantes&plante=".$fiche["plantes_id"];
$html2='<div class="col2">
<h4 title="fiche n°'.$plante_id.'" class="no-link">fiche '.$famille.' '.$genre.' '.$espece.'
<a href="'.$urladmin.'" title="edition admin" ><i class="icon-gear"></i></a>
</h4>';
$html2 .='
<table>
<tr><td class="labelgris">statut : </td><td>'.$statut.'</td></tr>
<tr><td class="labelgris">gamme : </td><td>'.$gam.'</td></tr>
<tr><td class="labelgris">famille : </td><td>'.$famille.'</td></tr>
<tr><td class="labelgris">genre : </td><td>'.$genre.'</td></tr>
<tr><td class="labelgris">espece : </td><td>'.$espece.'</td></tr>
</table>
';
}
echo $html2;
echo'</div>
<div style="clear:both;" class="no-link">
<a href="'.$urlpage.'&gamme=002" title="retour aux végétaux" >
<i class="icon-arrow-left"></i>
Végétaux disponibles
</a>
</div>';
?>
vous l'aurez compris, la force de PLX est de stocker en table.xml, toutes les valeurs d'un tableau qui pourra se croiser avec d'autres pour remplir un select, des checkbox, etc... (je teste aussi un select multiple...à voir)
Dernière modification par paysan hardi (2014-01-30 18:21:12)
Hors ligne
Du boulot demain pour examiner tout ça.
Tout va bien !
Tutoriel SPX pour les Nuls
Tutoriel Pluxml pour les Nuls
Hors ligne
Si tu as l'exemple en ligne je suis preneur !
Petit à petit l'oiseau fait son nid.
creation de site web : http://secretsitebox.fr/ - création artistique : http://art.je-evrard.net
Hors ligne
je mettrais en ligne ce week-end (gros copier/coller image, vidéos,etc)
sur http://domainedebelleroche.free.fr/ (actuellement sous joomla)
bonne soirée les gars, ici on passe à table !
Hors ligne
Bonjour,
c'est en ligne sur http://paysanhardi.free.fr/index.php?static10/plantes
Imaginez un mur en pierre en background (bug css à corriger)
Des modifs mais pas de soluce en vue pour récupérer la valeur de l'input en javascript (pour éviter de me taper un plugin)
bonne journée !
Hors ligne
Ben dis donc !!!
Très joli travail avec beaucoup d'idées au point qu'on en reste tout bête.
Et en si peu de temps !
Je peux mettre ton URL chez moi pour monter cet exemple d'implémentation de SPX ?
Tout va bien !
Tutoriel SPX pour les Nuls
Tutoriel Pluxml pour les Nuls
Hors ligne
Du bon boulot. Ca me fait plaisir de voir tout ça ailleurs au dans mes sites .
Petit à petit l'oiseau fait son nid.
creation de site web : http://secretsitebox.fr/ - création artistique : http://art.je-evrard.net
Hors ligne
Je remercie le pasteur et l'auteur
Cependant, je sortirai le champagne qd j'arriverai à filtrer sur l'input...
J'ignore si vous avez testé, mais difficile de parler de tri si je n'obtiens pas cet élément de base
L'auteur aurait une suggestion, le pasteur une prière ?
Cher Jack, je te propose d'attendre la solution à ce problème avant de partager le lien :
- l'url sera domaine.free.fr et pas paysan hardi
- avoir une solution pour l'input me permettra de dumper de grosses tables sql associées à la table botanique
- je dois aussi obtenir un select multiple dans plxdata à partir de l'exemple des chkbox
- encore bcp de modifs à porter au template
J'avais proposé mon aide sur le forum pluxml pour rédiger la doc,
partant du principe qu'on ne parle bien que de ce que l'on connait, j'attendais de maitriser la bête pour me manifester.
Vu que je n'y suis pas encore...j'ai donc posté un code inabouti.
bonne soirée
Hors ligne
Bien au contraire, ton URL est intéressante pour montrer aux apprentis SPX ce qu'on peut faire avec le truc, après comment le faire, et sans doute que ces apprentis-là seraient ravis de suivre en live le déroulement des opérations.
Tu sais qu'avec le Portofio on peut mettre des textes qui racontent ce que l'on voit, et quelle meilleure occasion d'expliquer à nos gens ce que tu fais (ou veut faire) et nous pouvons même avec un lien rediriger la fiche vers un fil dédié ici où les visiteurs pourraient discuter de l'affaire.
Cela pourrait en outre drainer le public vers nos forums et dynamiser la chose parce que je sais que mes tutos sont toujours très visités et ça emmène du monde.
http://tuto-spx.reseauk.info/index.php? … /portfolio
...j'ai donc posté un code inabouti.
Pour nous, c’est du concret et d'une immense valeur.
J'avais proposé mon aide sur le forum pluxml pour rédiger la doc,
Il faut envoyer à "l'auteur" un formulaire en trois exemplaires signée par le pasteur qui donne sa bénédiction.
Tout va bien !
Tutoriel SPX pour les Nuls
Tutoriel Pluxml pour les Nuls
Hors ligne
Salut les gars,
Désolé pour cette réponse tardive mais j'avais quelques vidéos à faire...
L'auteur aimerais bien un zip de "paysan hardi" pour regarder son code de près.
Je suis en pleine modif du projet et j'ai pas beaucoup de temps !
Le pasteur peut-il me bénir pour la suite !
Petit à petit l'oiseau fait son nid.
creation de site web : http://secretsitebox.fr/ - création artistique : http://art.je-evrard.net
Hors ligne
L'auteur aimerais bien un zip de "paysan hardi" pour regarder son code de près.
Copieur va !
Le pasteur peut-il me bénir pour la suite !
Accordé.
Tout va bien !
Tutoriel SPX pour les Nuls
Tutoriel Pluxml pour les Nuls
Hors ligne
Bonjour les Pluxiens
@jérome, j'ai élagué au max mais il en reste un dossier compressé de 10Mo
je vais essayer de te l'envoyer en PJ sur le mail de ce site, sinon j'essaierai la boite sur laquelle nous avons déjà correspondu (si ça se trouve c'est la même ?)
Gardez la forme les gars !
Hors ligne
On garde la forme, pour la forme qui peut évoluer parce que nous le valons bien.
Que celui qui n'a jamais codé jette la première pierre.
Non mais quoi ! Allo ?
Tout va bien !
Tutoriel SPX pour les Nuls
Tutoriel Pluxml pour les Nuls
Hors ligne
bonjour tout l'monde
on oublie les lignes précédentes, le filtrage marche désormais.
le code ci-dessous contourne la syntaxe $o['filter'] mais je laisse en com les lignes idoines pour ceux qui voudraient requêter sur plusieurs champs...à condition que ce ne soit pas des array.
[== PHP ==]
# recherche sur toutes les fiches plantes
$o2= array();
$o2["table"]="plantes";
/*
# utilisation $o2["filter"] impossible car gamme,statut...= impossible si plusieurs valeurs ex:"001 002"
$o2filters="";
$filters=array();
if($gamme_id!=""){$filters[].= 'gamme='.$gamme_id;}
if($statut_id!=""){$filters[].= 'statut='.$statut_id;}
foreach ($filters as $key=>$text){
$and = ($key>0 ) ? " and " : "";
$o2filters .= $and.$text;
}
$o2["filter"] = $o2filters;
*/
$o2["order"]="genre|A";
//$o2["limit"] = 100;
$o2["out"]="array";
$plantes = $plxShow->callHook('spxdatas::getData',$o2);
$plante_s= array();
$nom_s= array();
$gamm_s= array();
$stat_s= array();
$cate_s= array();
$expo_s= array();
# boucle de tri
foreach ($plantes as $p)
{ $id_fiche = $p['plantes_id'];
$plante_s[].=$id_fiche;
#application des filtres
if ($nom!=""){
if(stristr($p['famille'], $nom)!=false){$nom_s[].=$id_fiche; } //OK
if(stristr($p['genre'], $nom)!=false) {$nom_s[].=$id_fiche; } //OK
if(stristr($p['espece'], $nom)!=false) {$nom_s[].=$id_fiche; } //OK
if(stristr($p['variete'], $nom)!=false) {$nom_s[].=$id_fiche; } //OK
if(stristr($p['synonymes'], $nom)!=false) {$nom_s[].=$id_fiche; } //OK
}
$gamm=explode(' ', $p['gamme']);
if($gamme=id!="" and in_array($gamme_id, $gamm)) { $gamm_s[].=$id_fiche;}//array_push($fiches_selected, $id_fiche)
$stat=explode(' ', $p['statut']);
if($statut_id!="" and in_array($statut_id, $stat)) { $stat_s[].=$id_fiche;}
$cate=explode(' ', $p['categ']);
if($categ_id!="" and in_array($categ_id, $cate)) { $cate_s[].=$id_fiche;}
$expo=explode(' ', $p['exposol']);
if($expo_id!="" and in_array($expo_id, $expo)) { $expo_s[].=$id_fiche;}
}
# nettoyage des fiches retenues
$ordre = array("nom_s"=>sizeof($nom_s),"gamm_s"=>sizeof($gamm_s),"stat_s"=>sizeof($stat_s),"cate_s"=>sizeof($cate_s),"expo_s"=>sizeof($expo_s));
arsort($ordre);
foreach ($ordre as $or=>$dre)
{ if ($dre!=0){
switch ($or){
case "nom_s": $param=$nom_s; break;
case "gamm_s": $param=$gamm_s; break;
case "stat_s": $param=$stat_s; break;
case "cate_s": $param=$cate_s; break;
case "expo_s": $param=$expo_s; break;
}
$plante_s = array_intersect($plante_s, $param);
}
}
unset ($ordre);
#affichage des fiches selectionnées
echo sizeof($plante_s).' réponses sur '.sizeof($plantes).' fiches <br/>';
// à partir de là : Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 76 bytes)
$i=0;
$nb=30;
# sans photos
foreach ($plantes as $a)
{ echo'<div style="width:240px; float:left;">';
$plantes_id = $a["plantes_id"];
if(in_array($plantes_id, $plante_s))
{ if($i==$nb){ $i=0; echo'</div><div style="width:240px; float:left;">';}
echo'<li><a href="'.$urlpage.'&plante='.$plantes_id.'" alt="no photo" title="ouvrir fiche individuelle n°'.$plantes_id.' '.$a["synonymes"].'" >
<b align="center">'.$a["genre"].' '.$a["espece"].' '.$a["variete"].'</b>
</a></li>';
$i++;
}
echo'</div>';
}
Bref ça tourne impec en local..sauf en distant où j'ai Fatal error: Allowed memory (...)
Le tableau est traité piske j'ai le compte juste d'enregistrements filtrés, ça buggue dès qu'on passe à l'affichage (même echo $i;)
j'ai posé des unset()
j'ai testé les solutions php.ini, htaccess (memory_limit = 64)...sans succès (oh, un apache_error de 2Go )
je n'ai pas encore testé d'ouvrir les résultats dans une autre page, mais serais-ce la solution ?
jéjé STP, une idée ?
[edit] http://domainedebelleroche.free.fr/inde … 00/plantes [/edit]
Dernière modification par paysan hardi (2014-03-17 08:05:10)
Hors ligne
je dois aller bosser mais là j'ai accroché.
bref, résolu...en désactivant le plugin shortcode
désolé !
Hors ligne
Hello pas de soucis.
Petit à petit l'oiseau fait son nid.
creation de site web : http://secretsitebox.fr/ - création artistique : http://art.je-evrard.net
Hors ligne
Pages : 1