Bonjour,
après quelques essais sur ce module de recherche avancée et installation nickel
je ne trouve pas le moyen de le faire fonctionner, aucun chargement en ajax
une idée du problème
Cela affiche et liste les features (caractéristiques) ainsi que la boucle feature-availability qui retourne bien les résultats
donc tout va bien, mais quand on coche une case
rien ne se passe
toute l'explication est ici http://thelia-school.com/?view=content& … ntent_id=5
le code à placer dans la page category.html
{* Si la boucle features retourne des résultats *}
{ifloop rel="features"}
<h2>{intl l="Moteur de recherche"}</h2>
<div class="well clearfix" id="advanced-search-engine">
{* On liste les features (caractéristiques) *}
{loop name="features" type="feature"}
{* Si la boucle feature-availability retourne des résultats *}
{ifloop rel="feature-availability"}
<div class="feature-group col-lg-2">
<h3 class="feature-title" data-feature-id="{$ID}">{$TITLE}</h3>
<ul class="list-unstyled">
{* Pour chaque features, on liste les feature-availability (valeurs de caractéristique) associées *}
{loop name="feature-availability" type="feature-availability" feature="$ID"}
<li>
<label for="feature-{$ID}">
<input id="feature-{$ID}" type="checkbox" name="feature-availability[]" value="{$ID}" class="feature-values"/> {$TITLE}
</label>
</li>
{/loop}
</ul>
</div>
{/ifloop}
{/loop}
</div>
{/ifloop}
le code script toujours dans la page category.html en fin de ligne
{block name="javascript-initialization"}
{*hook name="category.javascript-initialization"*}
<script>
jQuery(function($){
// Quand une case à cocher change d'état, on lance la recherche
$('.feature-values').on('change', function(){
reloadSearch();
});
// Fonction de recherche
function reloadSearch(){
var searchArgs = [], // Tableau qui va stocker la recherche
featureAvailabilityList = ''; // Liste des valeurs de caractéristique qui seront demandées
// Pour chaque caractéristique
$('.feature-group').each(function(){
// On stock l'id de la caractéristique
var category = $('.feature-title', $(this)).data('feature-id');
// On stock les valeurs de caractéristique cochées
var $checkedValues = $('.feature-values:checked', $(this));
// On remplit un tableau avec les valeurs de caractéristiques
var values = [];
$checkedValues.each(function(){
values.push($(this).val());
});
// On remplit un tableau associatif contenant l'id de la caractéristique et les valeurs associées
var featureCouple = [];
featureCouple['feature-category'] = category;
featureCouple['feature-values'] = values;
// On remplit le tableau de recherche
searchArgs.push(featureCouple);
});
// Pour chaque couple (caractéristique + valeurs) présents dans la recherche
$.each(searchArgs, function(k, v){
var category = v['feature-category'];
/*
* On join toutes les valeurs de caractéristque avec un pipe
* pour que le format correspondent au format attendu par la boucle
*/
var valuesList = v['feature-values'].join("|");
/*
* Si la liste n'est pas vide on lui ajoute une virgule de fin pour qu'elle puisse être concaténée
* avec une autre liste (<carac1:valeur1,valeur2>,<carac2:valeur1,valeur2>,)
*/
if(category != '' && valuesList != ''){
featureAvailabilityList += category + ":" + valuesList + ",";
}
});
// On supprime la virgule de fin qui ne sert à rien dans notre liste finale
featureAvailabilityList = featureAvailabilityList.substring(0,featureAvailabilityList.length-1);
/*
* On charge la vue ajax de notre liste de produit en lui passant la liste des caractéristiques
* correspondant à la recherche de l'utilisateur
*/
//$('#category-products').load(
/* '/product/ajaxList',
* {literal}
* {
* featureAvailabilityList: featureAvailabilityList
* }
* {/literal}
*); */
// On assigne à nos variable les valeurs correspondantes
// On assigne à nos variable les valeurs correspondantes
var limit = "{$limit}",
page = "{$product_page}",
order = "{$product_order}",
categoryId = "{category attr="id"}";
// On passe ces nouvelles variables à notre requete ajax
$('#category-products').load(
'/product/ajaxList',
{literal}
{
limit: limit,
page: page,
order: order,
categoryId : categoryId,
featureAvailabilityList: featureAvailabilityList
}
{/literal}
);
// Récupération des nouvelles variables pour le bon fonctionnement de la boucle
$limit = $this->getRequest()->get('limit');
$order = $this->getRequest()->get('order');
$page = $this->getRequest()->get('page');
$categoryId = $this->getRequest()->get('categoryId');
// On remplit notre tableau d'arguments
$args = array(
'limit' => $limit,
'product_order' => $order,
'product_page' => $page,
'categoryId' => $categoryId,
'featureAvailabilityList' => $featureAvailabilityList
);
});
</script>
{/block}
Last edited by stephst84 (26-06-2019 09:39:54)