Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5

[Search & Gallery] - recherche dans le module Gallery
#1

Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.11.2.1
#~ Url du site :
#~ Hébergeur / Soft : OVH
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.11.2.1
#~ Installed Modules:
#~ CMSMailer: 5.2.1
#~ CMSPrinting: 1.0.3
#~ FileManager: 1.4.1
#~ MenuManager: 1.8.4
#~ MicroTiny: 1.2.3
#~ ModuleManager: 1.5.5
#~ News: 2.12.9
#~ Search: 1.7.7
#~ ThemeManager: 1.1.7
#~ CGFavs: 1.0.4
#~ CGExtensions: 1.31.1
#~ ExtendedTools: 1.3.3
#~ Gallery: 1.6
#~ Guestbook: 1.4_RC2
#~ TinyMCE: 2.9.11
#~ CGCalendar: 1.10.0.1
#~ FormBuilder: 0.7.3
#~ SiteMapMadeSimple: 1.2.6
#~ CGSmartImage: 1.9.5
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template:
#~ output_compression:
#~ max_upload_size: 64000000
#~ url_rewriting: none
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale: fr_FR.utf8
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.2.17
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 0
#~ memory_limit: 128M
#~ max_execution_time: 120
#~ output_buffering: On
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 64M
#~ upload_max_filesize: 64M
#~ session_save_path: /tmp (1777)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ xmlreader_class: On (Vrai)
#~ Server Information:
#~ Server Api: cgi
#~ Server Db Type: MySQL (mysqli)
#~ Server Db Version: 5.1.49
#~ Server Db Grants: Impossible de trouver un privilège "GRANT ALL". Cela peut signifier que vous pourriez avoir des problèmes pour installer ou retirer des modules, ou encore l 'ajout et la suppression d'éléments, y compris les pages.
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~


Bonjour
J'aimerai savoir si quelqu'un a déjà utilisé le module de recherche pour afficher les résultats des photos du module gallery.
J'ai essayé d'intégrer
Code :
{search modules="gallery"}
dans la page qui affiche une gallerie photo, mais je ne comprends pas comment ça fonctionne...

J'aimerai que la recherche se fasse sur le champ titre et sur un champ personnalisé que j'ai créé (commentaire mais mis en forme en WYSIWYG)
Le principe étant d'obtenir le comportement de cette page : http://www.blangy-sur-ternoise.com/?phot...-de-classe qui n'est pas du cmsms mais un formulaire que j'ai créé avec du code php perso
D'avance merci
Répondre
#2

La galerie n'est pas un contenu texte, je suppose que ça ne peut pas marcher avec le module search.
Crée plutôt une udt de recherche dans la bd.

Voici un exemple pour un site de booking d'artistes dans lequel je veux afficher toutes les affiches de concerts en cours sur la page d'accueil et tout cela dans un bloc qui fait défiler chaque images trouvées (le tout géré par CGSmartImage).
J'ai créé un champ personnalisé (bouton radio) avec comme valeur afficheIn (concert à venir) ou afficheOut (concert terminé).
Code :
[== PHP ==]
$db = cmsms()->GetDb();
$smarty = cmsms()->GetSmarty();
$sql = "SELECT filepath,filename
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 ".cms_db_prefix()."module_gallery_fieldvals.value = 'AfficheIn'";
$dbretour = $db->Execute($sql);
echo "<div class='affichesCycle'>";
while ($row = $dbretour->FetchRow())
{
$image="uploads/images/Gallery/".$row['filepath'].$row['filename'];
echo '<div class="affiches"><a href="agenda">';
$smarty_data = "{cms_module module='CGSmartImage' src='$image' alias='afficheAccueil'}";
echo $smarty->display('string:'.$smarty_data);
echo '</a></div>';
}
echo "</div>";
Il te suffit de modifier la clause WHERE ".cms_db_prefix()."module_gallery_fieldvals.value = 'AfficheIn'";
par la valeur de la recherche. Si tu mets cette valeur entre %...%, ça devrait le faire.
Et comme tu cherches également sur le titre, tu dois ajouter un OR pour tester .cms_db_prefix()."module_gallery.title
Répondre
#3

bonjour,
essaie
Code :
[== Indéfini ==]
{search modules="Gallery"}
G majuscule.
J'ai vérifié dans le code, il indexe les titres et les commentaires.
Ca devrait donc marcher.
Tu coches 'utiliser le wysiwyg' pour les commentaires et tu peux enlever ton champ supplémentaire.

Dans le module search, onglet options, cliques sur "reindexer tout le contenu".

{SEO}
Inscrivez-vous à notre Newsletter sur le site (colonne de droite, en bas).
Vous appréciez CMSMS et l'aide qui vous est fournie ici, aidez-nous en participant au projet.
Formation CMS Made Simple | Création de site CMS Made Simple.

C'est en se plantant qu'on devient cultivé.
J'ai un string dans l'Array (Paris Hilton)
Répondre
#4

Pour le "utiliser le wysiwyg" à priori ça ne fonctionne que pour le commentaire de la gallerie, pas des photos.
Je vais regarder du côté de la solution proposée par Jean le Chauve
Répondre
#5

Ah bin tant mieux Smile
Répondre
#6

Tiens bizarre
depuis que j'ai utilisé le module search pour tester, j'ai ma gallerie "photos de classe" qui apparait 4 fois dans mon listing de gallerie. J'ai essayé de supprimer les 3 inutiles, il me met un message d'erreur "Certains paramètres sont manquants ou invalides."
J'ai vérifié le contenu des 3 doublons, c'est strictement la même, toute modification dans l'une modifie les autres...
Répondre
#7

Jean le Chauve a écrit :Ah bin tant mieux Smile
Petite question, est-il possible de créer un udt qui modifie la variable $images qui est utilisée dans le gabarit :
Code :
{foreach from=$images item=image}

Le but étant d'intégrer l'udt dans mon gabarit "gallery" pour qu'il intercepte le formulaire de recherche le cas échéant. j'utiliserais $param[] pour récupérer le champ de recherche qui lui sera le paramètre de l'udt je pense.
La question c'est de savoir comment est construit $images.

D'avance merci
Guillaume
Répondre
#8

$images est une array contenant toutes les images de Gallery correspondant aux paramètres utilisés dans l'appel de la balise.
Je ne comprends pas bien pourquoi tu veux mettre cette udt dans le gabarit Gallery, elle n'a rien à y voir.
Est-ce que c'est pour afficher uniquement les images trouvées par la recherche dans une forma particulière ?
Ce sera plus simple de modifier l'udt que je t'ai donnée pour qu'elle affiche les images selon tes désirs (dans le while).
Répondre
#9

C'est vrai qu'en même temps ce système de recherche c'est juste pour les photos de classe donc une seule page de mon site.
Je vais voir pour créer l'udt avec ton exemple (et j'ai vu aussi sur le wiki un autre exemple) après je devrais réussir à m'en sortir.
Finalement on va pouvoir proposer au créateur de Gallery d'ajouter ces fonctionnalités dans ton module Smile

Merci pour les infos, je te tiens au courant quand j'ai fini, tes critiques seront les bienvenues...
Répondre
#10

Bon bah finalement j'ai réussi à faire quelque chose qui me plait et qui fonctionne
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.'&amp;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.
Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 3 visiteur(s)