FORUM SPX

Aide au projet spx : plugins pour pluxml - Forums pluxml

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

#26 Entraide » formulaire de tri sur valeurs en base » 2014-01-30 18:12:17

paysan hardi
Réponses : 15

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)

#27 Entraide » exemple d'utilisation pour un slider » 2014-01-30 17:14:03

paysan hardi
Réponses : 4

bonjour tout l'monde,
jour de pluie = jour d'ordi

le meilleur moyen d'écrire un tuto c'est de bidouiller avec PLX pour avoir ce qu'on veut
je pose ici ma façon de me servir de spx, merci de me kicker ailleurs si c'est pas la bonne rubrique wink

au HEADER :

 
[== HTML ==]
<!-- JS important au header pour S3slider -->
		<script type="text/javascript" src="<?php $plxShow->template(); ?>/js/jquery.min.js"></script>
		<!--script type="text/javascript" src="http://s3slider-original.googlecode.com/svn/trunk/s3Slider.js"></script-->
		<script type="text/javascript" src="<?php $plxShow->template(); ?>/js/s3Slider.js" </script>

le fichier slider.php

[== PHP ==]

<script> $(document).ready(function() { $('#s3slider').s3Slider({ timeOut: 4000 }); }); </script>
<style>
#slider {
	width: 100%;
	height:300px; /* ! hauteur des vignettes sinon pas bottom*/
	margin:0px auto 0px auto;
	text-align:center;     
}
 
#s3slider { 
	overflow: hidden;  
	vertical-align:middle;
	margin:0px;
    padding:0px;
    width:auto;
    height:auto; 
}
 
#s3sliderContent {
	display:table;  /*this is KEY to centering the UL */
	position:static;
    margin:0px auto 0px auto;
    padding:0px;
    width:auto;
}
 
.s3sliderImage { float: left; position: relative; display: none;}
.s3sliderImage span { 
	position: absolute;
	text-align:left; 
	font: 10px/15px Arial, Helvetica, sans-serif;
	padding: 10px 13px;
    background-color: #000;
    filter: alpha(opacity=70); 
    -moz-opacity: 0.7; 
    -khtml-opacity: 0.7; 
    opacity: 0.7; 
    color: #fff;
    display: none;
}
.top {top:0; left:0; width:533px; }
.bottom {bottom:0; left:0; width:533px;}
.left {left:0; height:300px; width:100px;}
.right {right:0; height:300px; width:100px;}
.clear { clear:both;}
</style>

<?php 
global $plxShow;
//$IMAGEPATH = $plxShow->plxMotor->aConf['racine'];
$IMAGEPATH = $plxShow->plxMotor->aConf['images'];

# remplissage du tableau des résultats
$o2= array();
$o2["table"]="slider";
$o2["filter"]="actif=1";
$o2["out"]="array";
$sliders = $plxShow->callHook('spxdatas::getData',$o2);

# prep affichage
echo '<div id="s3slider">
			<div id="s3sliderContent">';

foreach ($sliders as $a)	
{	$image=$a["image"];
	echo '<div class="s3sliderImage">
			<img src="'.$IMAGEPATH.$image.'"/>
			<span class="'.$a['aligntext'].'">'.html_entity_decode($a["description"]).'</span>
	</div>';
}
echo'<div class="clear s3sliderImage"></div>
    </div>
</div>';

?>

je sais que le css devrait être dans le celui du thème et la minuterie au footer...mais j'aime tout trouver ensemble qd je cherche wink

l'appel du slider se fait de n'importe où (article, categ, tag...)par

[== HTML ==]
<?php include(dirname(__FILE__).'/slider.php'); ?>

j'oubliais...ma table slider (chez moi dans data/forms/demo.php)

[== XML ==]
<!--Slider-->
	<table name="slider" groupe="slider" order="true" maxparam="5" >
		<description><![CDATA[images et textes composant les sliders]]></description>
		<column>
			<parameter name="image" type="cdata" option="image"></parameter>
			<parameter name="aligntext" type="cdata" option="textinput/25/30"></parameter>
			<parameter name="actif" type="numeric" option="boolean"></parameter>
			<parameter name="description" type="cdata" option="textinput/50/55"></parameter>            
		</column>
	</table>

voilou !

Pied de page des forums

Propulsé par FluxBB