22/11/2012, 15:19:35
Bon bah finalement j'ai réussi à faire quelque chose qui me plait et qui fonctionne
Principe : la balise utilisateur s'appelle Gallery_search. Pourquoi? Bah comme ça si j'ai déjà inséré une gallery j'ai plus qu'à rajouter "_search" dans la balise. Derrière je gère pour le moment seulement le paramètre "dir"
Voilà les critiques sont les bienvenues bien sur.
Code :
echo <<<TEXTE
<script type="text/javascript"><!--
function affiche(photo_id){
//Je récupère le nombre d'éléments type blockquote
nb=document.getElementsByTagName("blockquote").length;
//Je fais une boucle pour parcourir les différents éléménts blockquote
for(i=0;i<nb;i++){
//Je force la propriété style display à none pour cacher tous les éléments blockquote
document.getElementsByTagName("blockquote")[i].style.display = "none";
}
//Je force la propriété style display à block pour afficher la photos demandées.
document.getElementById(photo_id).style.display="block";
}
//--></script>
TEXTE;
//Je vérifie si un formulaire aurait transféré un paramètre search_term
if (isset($_POST['search_term'])){
$search_term=htmlspecialchars($_POST['search_term']);
$sql_limit=0;
echo <<<TEXTE
<p>Voici les résultats pour votre recherche : <strong>{$search_term}</strong></p>
TEXTE;
} else {
$search_term='';
$sql_limit=10;
}
if (isset($_GET['debut'])){
$page_start=$_GET['debut'];
}else{
$page_start=0;
}
$page_current=$_GET['page'];
echo <<<FORMULAIRE
<div id="formulaire">
<p>Vous pouvez rechercher un mot contenu dans la description des photos</p>
<form method="post" action="?page={$page_current}">
<div>
<input id="texte" name="search_term" type="text" size="30" maxlength="30" value="{$search_term}"/>
<input id="bouton" type="submit" value="Lancer la recherche" />
</div>
</form>
</div>
FORMULAIRE;
//Je récupère le connecteur de la bdd
$db = cmsms()->GetDb();
// on crée la requête SQL, en s'assurant de se libérer du préfixe cms_ qui peut différer d'une installation à une autre, cette requête permet de récupérer le galleryid d'une gallerie à partir de son chemin pour conserver la mise en forme du module gallerie pour l'appel de la balise smarty
$sql='SELECT '.cms_db_prefix().'module_gallery.fileid FROM '.cms_db_prefix().'module_gallery WHERE CONCAT('.cms_db_prefix().'module_gallery.filepath,'.cms_db_prefix().'module_gallery.filename)=\''.$params['dir'].'/\'';
//exécution de la requête et on teste le code retour
$dbretour = $db->Execute($sql);
$row = $dbretour->FetchRow();
//$galleryid va récupérer la valeur correspondante de la gallerie précisée
$galleryid=$row['fileid'];
// on crée la requête SQL, en s'assurant de se libérer du préfixe cms_ qui peut différer d'une installation à une autre
$sql = 'SELECT '.cms_db_prefix().'module_gallery.fileid, '.cms_db_prefix().'module_gallery.filename, '.cms_db_prefix().'module_gallery.filepath,'.cms_db_prefix().'module_gallery.title,'.cms_db_prefix().'module_gallery.galleryid, '.cms_db_prefix().'module_gallery_fieldvals.value AS vrai_commentaire
FROM '.cms_db_prefix().'module_gallery
INNER JOIN '.cms_db_prefix().'module_gallery_fieldvals ON '.cms_db_prefix().'module_gallery.fileid = '.cms_db_prefix().'module_gallery_fieldvals.fileid
WHERE galleryid='.$galleryid.' AND '.cms_db_prefix().'module_gallery_fieldvals.value LIKE \'%'.$search_term.'%\'';
//exécution de la requête et on teste le code retour
$dbretour = $db->Execute($sql);
if($dbretour === FALSE)
{ die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); }
$qty=$dbretour->RecordCount();
$i=0;
while ((floor(($qty-1)/10)>-1)&&($sql_limit<>0)) {
if ($i<>0){echo '|';}
$qty=$qty-10;
if ($i<>$page_start){
echo '<a href="index.php?page='.$page_current.'&debut='.$i.'" title="Page '.($i+1).'">Page '.($i+1).'</a>';
}
else
{
echo 'Page '.($i+1);
}
$i++;
}
if ($sql_limit<>0){$sql=$sql.' LIMIT '.(10*$page_start).',10';}
$dbretour = $db->Execute($sql);
echo '<div id="miniatures">';
while ($row = $dbretour->FetchRow())
{
echo <<<REQUETE
<a href="#i{$row['fileid']}" onclick="affiche('i{$row['fileid']}')">
<img src="uploads/images/Gallery/{$row['filepath']}/thumb_{$row['filename']}" alt="{$row['title']}" />
</a>
REQUETE;
}
echo '</div>';
echo '<div id="grande">';
$dbretour = $db->Execute($sql);
while ($row = $dbretour->FetchRow())
{
if (isset($precedent)){
echo <<<REQUETE
<p style="text-align:center"><a href="#i{$row['fileid']}" onclick="affiche('i{$row['fileid']}')">Suivant</a></p>
</blockquote>
REQUETE;
}
echo <<<REQUETE
<blockquote style="display:none" class="photos_grande" id="i{$row['fileid']}">
REQUETE;
if (isset($precedent)){
echo <<<REQUETE
<p style="text-align:center"><a href="#i{$precedent}" onclick="affiche('i{$precedent}')">Précédent</a></p>
REQUETE;
}
echo <<<REQUETE
<p style="text-align:center"><img src="uploads/images/Gallery/{$row['filepath']}{$row['filename']}" alt="{$row['title']}" width="640" /></p>
<h4>{$row['title']}</h4>
{$row['vrai_commentaire']}
REQUETE;
$precedent=$row['fileid'];
}
echo '</blockquote>';
echo '</div>';
Principe : la balise utilisateur s'appelle Gallery_search. Pourquoi? Bah comme ça si j'ai déjà inséré une gallery j'ai plus qu'à rajouter "_search" dans la balise. Derrière je gère pour le moment seulement le paramètre "dir"
Voilà les critiques sont les bienvenues bien sur.