FORUM SPX

Aide au projet spx : plugins pour pluxml - Forums pluxml

Vous n'êtes pas identifié(e).

#1 2014-01-30 18:12:17

paysan hardi
Membre
Inscription : 2014-01-30
Messages : 28
Site Web

formulaire de tri sur valeurs en base

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"] tongue
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> &nbsp;
			  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

#2 2014-01-30 18:15:17

Jack31
Membre
Lieu : Luchon (31)
Inscription : 2014-01-25
Messages : 170
Site Web

Re : formulaire de tri sur valeurs en base

Du boulot demain pour examiner tout ça.  tongue

Hors ligne

#3 2014-01-30 18:19:33

je-evrard
Responsable du projet
Lieu : Pau
Inscription : 2014-01-24
Messages : 206
Site Web

Re : formulaire de tri sur valeurs en base

Si tu as l'exemple en ligne je suis preneur !  smile


Petit à petit l'oiseau fait son nid.
creation de site web : http://secretsitebox.fr/ - création artistique : http://art.je-evrard.net

Hors ligne

#4 2014-01-30 18:29:15

paysan hardi
Membre
Inscription : 2014-01-30
Messages : 28
Site Web

Re : formulaire de tri sur valeurs en base

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

#5 2014-02-02 08:29:05

paysan hardi
Membre
Inscription : 2014-01-30
Messages : 28
Site Web

Re : formulaire de tri sur valeurs en base

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

#6 2014-02-02 08:48:01

Jack31
Membre
Lieu : Luchon (31)
Inscription : 2014-01-25
Messages : 170
Site Web

Re : formulaire de tri sur valeurs en base

Ben dis donc !!!  cool

Très joli travail avec beaucoup d'idées au point qu'on en reste tout bête.

Et en si peu de temps ! wink

Je peux mettre ton URL chez moi pour monter cet exemple d'implémentation de SPX ?

Hors ligne

#7 2014-02-02 14:11:32

je-evrard
Responsable du projet
Lieu : Pau
Inscription : 2014-01-24
Messages : 206
Site Web

Re : formulaire de tri sur valeurs en base

Du bon boulot. Ca me fait plaisir de voir tout ça ailleurs au dans mes sites  smile .


Petit à petit l'oiseau fait son nid.
creation de site web : http://secretsitebox.fr/ - création artistique : http://art.je-evrard.net

Hors ligne

#8 2014-02-02 17:20:00

paysan hardi
Membre
Inscription : 2014-01-30
Messages : 28
Site Web

Re : formulaire de tri sur valeurs en base

Je remercie le pasteur et l'auteur wink
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

#9 2014-02-02 17:39:03

Jack31
Membre
Lieu : Luchon (31)
Inscription : 2014-01-25
Messages : 170
Site Web

Re : formulaire de tri sur valeurs en base

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.  cool

Hors ligne

#10 2014-02-03 08:40:28

je-evrard
Responsable du projet
Lieu : Pau
Inscription : 2014-01-24
Messages : 206
Site Web

Re : formulaire de tri sur valeurs en base

Salut les gars,

Désolé pour cette réponse tardive  smile  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

#11 2014-02-03 09:56:11

Jack31
Membre
Lieu : Luchon (31)
Inscription : 2014-01-25
Messages : 170
Site Web

Re : formulaire de tri sur valeurs en base

L'auteur aimerais bien un zip de "paysan hardi" pour regarder son code de près.

Copieur va !  lol

Le pasteur peut-il me bénir pour la suite !

Accordé.  cool

Hors ligne

#12 2014-02-04 16:11:35

paysan hardi
Membre
Inscription : 2014-01-30
Messages : 28
Site Web

Re : formulaire de tri sur valeurs en base

Bonjour les Pluxiens wink

@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

#13 2014-02-04 16:23:55

Jack31
Membre
Lieu : Luchon (31)
Inscription : 2014-01-25
Messages : 170
Site Web

Re : formulaire de tri sur valeurs en base

On garde la forme, pour la forme qui peut évoluer parce que nous le valons bien. smile

Que celui qui n'a jamais codé jette la première pierre.

Non mais quoi ! Allo ?  lol

Hors ligne

#14 2014-03-17 08:03:35

paysan hardi
Membre
Inscription : 2014-01-30
Messages : 28
Site Web

Re : formulaire de tri sur valeurs en base

bonjour tout l'monde smile
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 devil )
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

#15 2014-03-17 08:33:15

paysan hardi
Membre
Inscription : 2014-01-30
Messages : 28
Site Web

Re : formulaire de tri sur valeurs en base

je dois aller bosser mais là j'ai accroché.
bref, résolu...en désactivant le plugin shortcode
désolé !

Hors ligne

#16 2014-03-17 09:57:26

je-evrard
Responsable du projet
Lieu : Pau
Inscription : 2014-01-24
Messages : 206
Site Web

Re : formulaire de tri sur valeurs en base

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

Pied de page des forums