Posté(e) 27 sept. 2013 · Signaler ce message Bonjour, Je suis sur la version 6.2 et je voudrais savoir s'il etait possible dans le moteur de recherche en haut de la page de lui associer les marques. Par exemple actuellement on a le moteur et on recherche ce que l'on veut, a sa droite un menu deroulant avec les marques on choisit la marque et on obtient les produits inclus dans la marque L'idee serait de pouvoir choisir le type de produit dans le premier champ, puis de choisir sa marque et enfin de cliquer sur le petit ok pour rechercher specifiquement tel produit dans telle marque Exemple VASE marque MENU et on obtient seulement les vases de cette marque et ma 2eme question porte sur la presentation, actuellement les produits s'affichent en colonne est il possible des les afficher en ligne comme les produits dans les categories avec la petite vignette puis le titre et un bout de description en dessous Merci de votre soutien Anh Partager ce message Lien à poster Partager sur d’autres sites
Posté(e) 27 sept. 2013 · Signaler ce message Bonjour, Pour les marques, il faudra d'abord modifier le formulaire de recherche dans la fonction affiche_menu_recherche, ainsi que la fonction affiche_select_marque. Ensuite, une fois que le formulaire toutes les informations au fichier /search.php, il faut modifier la fonction build_sql_produits en ajoutant le nouveau critère, puis modifier la requête à l'intérieur de cette fonction pour que les produits retournés correspondent aux critères de recherche. Partager ce message Lien à poster Partager sur d’autres sites
Posté(e) 30 sept. 2013 · Signaler ce message Bonjour Simon, Donc j'ai bien trouve le moteur dans display function affiche_menu_recherche($return_mode = false, $display_mode = 'header') { $output = ' <form method="get" action="' . $GLOBALS['wwwroot'] . '/search.php" id="recherche"> <fieldset> <input type="hidden" name="match" value="2" /> <input type="text" name="search" id="search" value="" /> <input type="submit" class="bouton_go" value="" name="action" /> <div id="placement_produit" class="autocomplete"></div> </fieldset> </form> '; if ($GLOBALS['site_parameters']['enable_prototype'] == 1) { // AUtocompleter, avec patch pour repositionner le div à cause d'un bug connu sur IE : le positionnement se fait mal quand on a des div relative ou absolute $output .= '<script type="text/javascript"><!--//--><![CDATA[//><!-- function positionAuto(element, entry) { setTimeout( function() { Element.clonePosition("placement_produit", "search", { "setWidth": false, "setHeight": false, "offsetTop": $("search").offsetHeight } ); }, 600); return entry; } new Ajax.Autocompleter(\'search\',\'placement_produit\',\'' . $GLOBALS['wwwroot'] . '/modules/search/produit.php\', { minChars: 2, callback: positionAuto }); //--><!]]></script> '; } if ($display_mode == 'header') { $output = ' <div id="top_search">' . $output . ''; if (is_advanced_search_active()) { $output .= '' . get_advanced_search_script() . affiche_select_marque(true) . ''; } $output .= ' </div>'; } else { $output = ' <div>' . $output . ''; if (is_advanced_search_active()) { $output .= '' . get_advanced_search_script() . affiche_select_marque(true) . ''; } $output .= ' </div>'; } if ($return_mode) { return $output; } else { echo $output; } } donc si je comprends bien la premiere partie correspond au moteur en lui dans l'header et dans la seconde partie on retrouve le select des marques. Vous dites il faudra modifier ce script pour avoir les 2 champs avant le submit c'est bien ca Pourriez-vous me donner des pistes concretes, mon niveau en php est debutante et meme si je comprends plus ou moins ce qu'il faut faire, le code n'est pas du tout limpide pour moi. pour votre seconde proposition function build_sql_produits($terms, $fields, $match) { $requete = 'SELECT DISTINCT(p.id) ,c.id AS categorie_id ,c.nom_' . $_SESSION['session_langue'] . ' AS categorie'; // ajout des champs $fields où $term sera recherché foreach($fields as $value) { $requete .= ', ' . $value . ' '; } $requete .= 'FROM peel_categories c INNER JOIN peel_produits_categories pc ON pc.categorie_id = c.id INNER JOIN peel_produits p ON p.id = pc.produit_id WHERE p.etat = "1" AND ' . build_terms_clause($terms, $fields, $match) . ' ORDER BY p.id DESC LIMIT 100'; return $requete; } Voulez-vous dire de rajouter une requete vers les marques a ce niveau la ? Merci de votre soutien Anh Partager ce message Lien à poster Partager sur d’autres sites
Posté(e) 1 oct. 2013 · Signaler ce message Bonjour, Vous dites il faudra modifier ce script pour avoir les 2 champs avant le submit c'est bien ca : => Oui, c'est l'idée. De cette façon l'id de la marque est la valeur du champ de recherche seront envoyé en même temps vers le moteur de recherche. Voulez-vous dire de rajouter une requete vers les marques a ce niveau la ? => Oui aussi. Il faut ajouter un paramètre à la fonction build_sql_produits qui contiendra l'id de la marque recherchée, et modifier également build_terms_clause pour prendre en compte ce nouveau paramètre. De manière général, ce genre de développement nécessite d'avoir un peu d'expérience en PHP. Il vaux mieux ne pas toucher au code du moteur de recherche pour une personne qui découvre le PHP. Partager ce message Lien à poster Partager sur d’autres sites
Posté(e) 4 oct. 2013 · Signaler ce message Bonjour Simon, Par rapport a vos pistes j'ai commence a modifier cela Page display if (!function_exists('affiche_menu_recherche')) { /** * affiche_menu_recherche() * * @param mixed $return_mode * @param string $display_mode * @return */ function affiche_menu_recherche($return_mode = false, $display_mode = 'header') { $output = ' <form method="get" action="' . $GLOBALS['wwwroot'] . '/search.php" id="recherche"> <fieldset> <tr><input type="hidden" name="match" value="2" /> <td><input type="text" name="search" id="search" value="" /></td><td> ' . affiche_select_marque(true) . ' </td> <td><input type="submit" class="bouton_go" value="" name="action" /></td></tr> <div id="placement_produit" class="autocomplete"></div> </fieldset> </form> '; if ($GLOBALS['site_parameters']['enable_prototype'] == 1) { // AUtocompleter, avec patch pour repositionner le div à cause d'un bug connu sur IE : le positionnement se fait mal quand on a des div relative ou absolute $output .= '<script type="text/javascript"><!--//--><![CDATA[//><!-- function positionAuto(element, entry) { setTimeout( function() { Element.clonePosition("placement_produit", "search", { "setWidth": false, "setHeight": false, "offsetTop": $("search").offsetHeight } ); }, 600); return entry; } new Ajax.Autocompleter(\'search\',\'placement_produit\',\'' . $GLOBALS['wwwroot'] . '/modules/search/produit.php\', { minChars: 2, callback: positionAuto }); //--><!]]></script> '; } if ($return_mode) { return $output; } else { echo $output; } } } Ce qui a pour effet de me mettre le champ recherche suivi du select des marques et le ok (submit) Apres la modification sur la page search je bloque car je ne la comprends pas bien function build_sql_produits($terms, $fields, $match) { $requete = 'SELECT DISTINCT(p.id) ,c.id AS categorie_id ,c.nom_' . $_SESSION['session_langue'] . ' AS categorie'; // ajout des champs $fields où $term sera recherché foreach($fields as $value) { $requete .= ', ' . $value . ' '; } $requete .= 'FROM peel_categories c INNER JOIN peel_produits_categories pc ON pc.categorie_id = c.id INNER JOIN peel_produits p ON p.id = pc.produit_id WHERE p.etat = "1" AND ' . build_terms_clause($terms, $fields, $match) . ' ORDER BY p.id DESC LIMIT 100'; $requete .= ' FROM peel_marques m WHERE m.etat = "1" AND ' . build_terms_clause($terms, $fields, $match) . ' ORDER BY m.id DESC LIMIT 100'; return $requete; } J'ai donc rajoute la requete vers peel_marques ce qui a pour effet de me creer /search.php?match=2&search=vase&brand=2&action= donc vase est bien pris en compte mais pas la marque J'ai lu sur les forums pour utiliser les multi criteres mais leurs codes semblent bien differents de peel Une petite aide SVP Merci beaucoup Anh Partager ce message Lien à poster Partager sur d’autres sites
Posté(e) 4 oct. 2013 · Signaler ce message Bonjour, Ok pour la première étape. Il reste deux modifications à faire : - Il faut donc récupérer l'id de la marque envoyée en GET - Ajouter un critère à la requête de recherche. Pour le premier point, vous pouvez ajouter $brand = vn($_GET['brand']); sous le bloc $output = ''; $output_result = ''; $match = vb($_GET['match']); $search = vb($_GET['search']); au début du fichier search.php. Pour l'étape deux, 2 sous-étapes : - il faut ajouter le paramètre $brand aux fonctions build_sql_produits et build_terms_clause: build_sql_produits($terms, $fields, $match, $brand); build_terms_clause($terms, $fields, $match, $brand); => Il faut modifier les appels de fonction, ainsi que la définition de la fonction. - Dans la fonction qui créer le SQL, il faut ajouter la contrainte sur l'id de la marque : pour build_sql_produits, la requete ressemblera à ceci : $requete .= 'FROM peel_categories c INNER JOIN peel_produits_categories pc ON pc.categorie_id = c.id INNER JOIN peel_produits p ON p.id = pc.produit_id LEFT JOIN peel_marques m ON p.id_marque = m.id WHERE p.etat = "1" AND ' . build_terms_clause($terms, $fields, $match) . ' ORDER BY p.id DESC LIMIT 100'; pour faire fonctionner build_terms_clause, vous pouvez ajouter if (!empty($brands)) { $this_term_conditions_array[] = "m.id = ". $brands; } sous la boucle foreach ($fields as $val) { $this_term_conditions_array[] = word_real_escape_string($val) . ' ' . word_real_escape_string($notmod) . ' LIKE "%' . nohtml_real_escape_string($term) . '%"'; } (ligne 268 sur votre version). Voila dans l'esprit des modifications à faire pour obtenir ce que vous souhaitez. Ce code n'a pas été testé, je vous laisse le soin de l’adapter à votre site. Partager ce message Lien à poster Partager sur d’autres sites
Posté(e) 4 oct. 2013 · Signaler ce message Rebonjour Simon donc j'ai modifie vos petits codes, en effet j'etais loin du compte lorsque je fais une recherche sur un objet ici un vase dans la marque 2 en realite j'obtiens le resultat dans la marque 1 et 2 comme si seul le premier champ fonctionnait mais pas le critere de la marque dans le lien j'ai /search.php?match=2&search=vase&brand=2&action= Partager ce message Lien à poster Partager sur d’autres sites
Posté(e) 7 oct. 2013 · Signaler ce message Bonjour, Pour comprendre l'origine du problème, vous pouvez dans un premier temps afficher la requête et l’exécuter dans phpmyadmin. Dans la fonction build_sql_produits, ajouter à la fin echo $requête; die(); juste avant return $requete; Partager ce message Lien à poster Partager sur d’autres sites
Posté(e) 7 oct. 2013 · Signaler ce message Bonjour, En faisant cela j'ai une page blanche avec le debug j'ai Notice: Undefined variable: requête in /home/www/mysite/search.php on line 301 vous parlez de l'executer dans phpmyadmin ? comment je fais cela ? Partager ce message Lien à poster Partager sur d’autres sites
Posté(e) 8 oct. 2013 · Signaler ce message Bonjour, j'ai mis un accent à la variable $requete dans mon message, il y en a pas. La bonne ligne est echo $requete; die(); vous parlez de l'executer dans phpmyadmin ? comment je fais cela ? Si vous êtes en local, vous pouvez lire la documentation de votre serveur. Si vous travaillez sur un site hébergé, vous pouvez voir directement avec votre hébergeur. Si vous le souhaitez, nous pouvons finir intégralement cette modification. Il faut dans ce cas prendre contact avec un conseiller commercial au 01 75 43 67 97. Partager ce message Lien à poster Partager sur d’autres sites