// Now blocklayered work with PS1.5 and 1.4

// Adding some improvement to the blocklayered : Filters are now customizable (checkbox, radio, ...)

git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@10763 b9a71923-0436-4b27-9f14-aed3839534dd
This commit is contained in:
mDeflotte
2011-11-29 18:03:21 +00:00
parent f787bbd3e6
commit 557e05ae01
8 changed files with 446 additions and 86 deletions
+3 -3
View File
@@ -143,6 +143,9 @@ abstract class ControllerCore
if ($this->checkAccess())
{
if (!$this->content_only && ($this->display_header || (isset($this->className) && $this->className)))
$this->setMedia();
// postProcess handles ajaxProcess
$this->postProcess();
@@ -150,10 +153,7 @@ abstract class ControllerCore
$this->redirect();
if (!$this->content_only && ($this->display_header || (isset($this->className) && $this->className)))
{
$this->setMedia();
$this->initHeader();
}
$this->initContent();
+2 -2
View File
@@ -36,7 +36,7 @@ class MediaCore
'ui.droppable' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('uicore', 'ui.widget', 'ui.mouse', 'ui.draggable'), 'theme' => false),
'ui.resizable' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.mouse'), 'theme' => true),
'ui.selectable' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.mouse'), 'theme' => true),
'ui.sortable' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.mouse'), 'theme' => false),
'ui.sortable' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.mouse'), 'theme' => true),
'ui.accordion' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('ui.core', 'ui.widget'), 'theme' => true),
'ui.autocomplete' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('ui.core', 'ui.widget', 'ui.position'), 'theme' => true),
'ui.button' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('ui.core', 'ui.widget'), 'theme' => true),
@@ -58,7 +58,7 @@ class MediaCore
'effects.scale' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('effects.core'), 'theme' => false),
'effects.shake' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('effects.core'), 'theme' => false),
'effects.slide' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('effects.core'), 'theme' => false),
'effects.transfer' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('effects.core'))
'effects.transfer' => array('fileName' => 'jquery.ui.mouse.min.js', 'dependencies' => array('effects.core'), 'theme' => false)
);
public static function minifyHTML($html_content)
+36 -4
View File
@@ -4,6 +4,26 @@
#layered_block_left ul {
padding-left: 0;
max-height: 100px;
overflow-y: auto;
overflow-x: hidden;
padding-left: 1px;
padding-right: 1px;
}
#layered_form > div > div {
border-bottom: 1px dotted #CCCCCC;
padding-bottom: 5px;
margin-bottom: 5px;
}
#layered_block_left .hide-action {
display: block;
text-align: right;
padding-right: 5px;
}
#layered_block_left .hide-action:hover {
text-decoration: underline;
}
#layered_block_left ul li {
@@ -12,11 +32,9 @@
list-style-type: none;
}
#layered_block_left #enabled_filters , #layered_url_filter_block{
#layered_block_left #enabled_filters , #layered_url_filter_block {
font-size: 10px;
padding-bottom: 10px;
margin-bottom: 5px;
border-bottom: 1px dotted #CCC;
padding-bottom: 5px;
}
#layered_block_left #enabled_filters ul li {
@@ -75,4 +93,18 @@
}
#product_list .warning {
margin-top: 13px;
}
#layered_form .select {
width: 165px;
}
#layered_form .color-option {
margin-left: 0;
width: 16px;
height: 16px;
padding:0;
border: 1px solid #666;
}
#layered_form .color-option.on {
border: 1px solid red;
}
+52 -2
View File
@@ -45,10 +45,20 @@ $(document).ready(function()
});
// Click on checkbox
$('#layered_form input[type=checkbox]').live('click', function()
$('#layered_form input, #layered_form select').live('change', function()
{
reloadContent();
});
$('.radio').live('click', function() {
var name = $(this).attr('name');
$.each($(this).parent().parent().find('input[type=button]'), function (it, item) {
if ($(item).hasClass('on') && $(item).attr('name') != name) {
$(item).click();
}
});
return true;
});
// Click on label
$('label a').live({
@@ -58,13 +68,45 @@ $(document).ready(function()
$(this).parent().parent().find('input').click();
reloadContent();
}
return false;
}
});
layered_hidden_list = {};
$('.hide-action').live('click', function() {
if (typeof(layered_hidden_list[$(this).parent().find('ul').attr('id')]) == 'undefined' || layered_hidden_list[$(this).parent().find('ul').attr('id')] == false)
{
layered_hidden_list[$(this).parent().find('ul').attr('id')] = true;
}
else
{
layered_hidden_list[$(this).parent().find('ul').attr('id')] = false;
}
hideFilterValueAction(this);
});
$('.hide-action').each(function() {
hideFilterValueAction(this);
});
paginationButton();
initLayered();
});
function hideFilterValueAction(it)
{
if (typeof(layered_hidden_list[$(it).parent().find('ul').attr('id')]) == 'undefined' || layered_hidden_list[$(it).parent().find('ul').attr('id')] == false)
{
$(it).parent().find('.hiddable').hide();
$(it).parent().find('.hide-action.less').hide();
$(it).parent().find('.hide-action.more').show();
}
else
{
$(it).parent().find('.hiddable').show();
$(it).parent().find('.hide-action.less').show();
$(it).parent().find('.hide-action.more').hide();
}
}
function addSlider(type, data, unit)
{
@@ -198,6 +240,10 @@ function reloadContent(params_plus)
data += '&'+$(this).attr('id')+'='+sliderStart+'_'+sliderStop;
});
$('#layered_form .select option:checked').each( function () {
data += '&'+$(this).attr('id') + '=' + $(this).val();
});
if ($('#selectPrductSort').length)
{
var splitData = $('#selectPrductSort').val().split(':');
@@ -281,6 +327,10 @@ function reloadContent(params_plus)
if(slideUp)
$.scrollTo('#product_list', 400);
updateProductUrl();
$('.hide-action').each(function() {
hideFilterValueAction(this);
});
}
});
ajaxQueries.push(ajaxQuery);
+297 -57
View File
@@ -1158,31 +1158,44 @@ class BlockLayered extends Module
foreach ($_POST['categoryBox'] as $idc)
$filterValues['categories'][] = (int)$idc;
$sqlToInsert = 'INSERT INTO '._DB_PREFIX_.'layered_category (id_category, id_value, type, position) VALUES ';
$sqlToInsert = 'INSERT INTO '._DB_PREFIX_.'layered_category (id_category, id_value, type, position, filter_show_limit, filter_type) VALUES ';
foreach ($_POST['categoryBox'] as $id_category_layered)
{
$n = 0;
foreach ($_POST as $key => $value)
if (substr($key, 0, 17) == 'layered_selection' && $value == 'on')
{
$filterValues[$key] = $value;
$type = 0;
$limit = 0;
if (Tools::getValue($key.'_filter_type'))
$type = Tools::getValue($key.'_filter_type');
if (Tools::getValue($key.'_filter_show_limit'))
$limit = Tools::getValue($key.'_filter_show_limit');
$filterValues[$key] = array(
'filter_type' => (int)$type,
'filter_show_limit' => (int)$limit
);
$n++;
if ($key == 'layered_selection_stock')
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'quantity\','.(int)$n.'),';
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'quantity\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),';
else if ($key == 'layered_selection_subcategories')
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'category\','.(int)$n.'),';
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'category\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),';
else if ($key == 'layered_selection_condition')
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'condition\','.(int)$n.'),';
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'condition\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),';
else if ($key == 'layered_selection_weight_slider')
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'weight\','.(int)$n.'),';
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'weight\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),';
else if ($key == 'layered_selection_price_slider')
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'price\','.(int)$n.'),';
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'price\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),';
else if ($key == 'layered_selection_manufacturer')
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'manufacturer\','.(int)$n.'),';
$sqlToInsert .= '('.(int)$id_category_layered.',NULL,\'manufacturer\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),';
else if (substr($key, 0, 21) == 'layered_selection_ag_')
$sqlToInsert .= '('.(int)$id_category_layered.','.(int)str_replace('layered_selection_ag_', '', $key).',\'id_attribute_group\','.(int)$n.'),';
$sqlToInsert .= '('.(int)$id_category_layered.','.(int)str_replace('layered_selection_ag_', '', $key).',
\'id_attribute_group\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),';
else if (substr($key, 0, 23) == 'layered_selection_feat_')
$sqlToInsert .= '('.(int)$id_category_layered.','.(int)str_replace('layered_selection_feat_', '', $key).',\'id_feature\','.(int)$n.'),';
$sqlToInsert .= '('.(int)$id_category_layered.','.(int)str_replace('layered_selection_feat_', '', $key).',
\'id_feature\','.(int)$n.', '.(int)$limit.', '.(int)$type.'),';
}
}
@@ -1198,8 +1211,8 @@ class BlockLayered extends Module
Db::getInstance()->AutoExecute(_DB_PREFIX_.'layered_filter', $valuesToInsert, 'INSERT');
echo '<div class="conf"><img src="../img/admin/ok2.png" alt="" />
'.$this->l('Your filter').' "'.Tools::safeOutput(Tools::getValue('layered_tpl_name')).'" '.
echo '<div class="conf">'.(version_compare(_PS_VERSION_,'1.5','>') ? '' : '<img src="../img/admin/ok2.png" alt="" />').
$this->l('Your filter').' "'.Tools::safeOutput(Tools::getValue('layered_tpl_name')).'" '.
((isset($_POST['id_layered_filter']) && $_POST['id_layered_filter']) ? $this->l('was updated successfully.') : $this->l('was added successfully.')).'</div>';
}
}
@@ -1211,8 +1224,8 @@ class BlockLayered extends Module
Configuration::updateValue('PS_LAYERED_FULL_TREE', Tools::getValue('ps_layered_full_tree'));
$html .= '
<div class="conf">
<img src="../img/admin/ok2.png" alt="" /> '.$this->l('Settings saved successfully').'
<div class="conf">'.
(version_compare(_PS_VERSION_,'1.5','>') ? '' : '<img src="../img/admin/ok2.png" alt="" />').$this->l('Settings saved successfully').'
</div>';
}
else if (isset($_GET['deleteFilterTemplate']))
@@ -1227,8 +1240,8 @@ class BlockLayered extends Module
Db::getInstance()->Execute('DELETE FROM '._DB_PREFIX_.'layered_filter WHERE id_layered_filter = '.(int)$_GET['id_layered_filter'].' LIMIT 1');
$html .= '
<div class="conf">
<img src="../img/admin/ok2.png" alt="" /> '.$this->l('Filters template deleted, categories updated (reverted to default Filters template).').'
<div class="conf">'.(version_compare(_PS_VERSION_,'1.5','>') ? '' : '<img src="../img/admin/ok2.png" alt="" />').'
'.$this->l('Filters template deleted, categories updated (reverted to default Filters template).').'
</div>';
}
else
@@ -1242,10 +1255,10 @@ class BlockLayered extends Module
$html .= '
<div id="ajax-message-ok" class="conf ajax-message" style="display: none">
<img alt="" src="../img/admin/ok2.png"><span class="message"></span>
'.(version_compare(_PS_VERSION_,'1.5','>') ? '' : '<img src="../img/admin/ok2.png" alt="" />').'<span class="message"></span>
</div>
<div id="ajax-message-ko" class="error ajax-message" style="display: none">
<img src="../img/admin/error2.png" alt="" /><span class="message"></span>
'.(version_compare(_PS_VERSION_,'1.5','>') ? '' : '<img src="../img/admin/ok2.png" alt="" />').'<span class="message"></span>
</div>
<h2>'.$this->l('Layered navigation').'</h2>
<fieldset class="width4">
@@ -1471,11 +1484,13 @@ class BlockLayered extends Module
ul#selected_filters li, #layered_container_right ul li { width: 326px; font-size: 11px; padding: 8px 9px 7px 20px; height: 14px; margin-bottom: 5px; }
ul#selected_filters li span.ui-icon { position: absolute; margin-top: -2px; margin-left: -18px; }
#layered_container_right ul li span { display: none; }
#layered_container_right ul li { padding-left: 8px; }
#layered_container_left ul li { cursor: move; }
#layered_container_right ul li { padding-left: 8px; position: relative; }
#layered_container_left ul li { cursor: move; position: relative; }
#layered-cat-counter { display: none; }
#layered-step-2, #layered-step-3 { display: none; }
#table-filter-templates tr th, #table-filter-templates tr td { text-align: center; }
.filter_type { width: 70px; position: absolute; right: 53px; top: 5px;}
.filter_show_limit { position: absolute; width: 40px; right: 5px; top: 5px; }
</style>
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" onsubmit="return checkForm();">';
@@ -1499,10 +1514,33 @@ class BlockLayered extends Module
<li>'.$this->l('Press "Save this selection" or close the window to save').'</li>
</ol>';
$trads = array();
$selectedCat = array();
foreach (Helper::$translationsKeysForAdminCategorieTree as $key)
$trads[$key] = $this->l($key);
// Translations are not automatic for the moment ;)
$trads = array(
'Home' => $this->l('Home'),
'selected' => $this->l('selected'),
'Collapse All' => $this->l('Collapse All'),
'Expand All' => $this->l('Expand All'),
'Check All' => $this->l('Check All'),
'Uncheck All' => $this->l('Uncheck All'),
'search' => $this->l('Search a category')
);
if (version_compare(_PS_VERSION_,'1.5','>'))
{
$this->context->controller->addJQueryPlugin('fancybox');
$this->context->controller->addJQueryUI('ui.sortable');
$this->context->controller->addJQueryUI('ui.draggable');
$this->context->controller->addJQueryUI('effects.transfer');
}
else
{
$html .= '<script type="text/javascript" src="'.__PS_BASE_URI__.'js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
<script type="text/javascript" src="'.__PS_BASE_URI__.'js/jquery/jquery.fancybox-1.3.4.js"></script>
<link type="text/css" rel="stylesheet" href="'.__PS_BASE_URI__.'css/jquery.fancybox-1.3.4.css" />';
}
$html .= Helper::renderAdminCategorieTree($trads, $selectedCat, 'categoryBox');
$html .= '
@@ -1525,9 +1563,6 @@ class BlockLayered extends Module
</div>
<div class="clear"></div>
<hr size="1" noshade />
<script type="text/javascript" src="'.__PS_BASE_URI__.'js/jquery/jquery-ui-1.8.10.custom.min.js"></script>
<script type="text/javascript" src="'.__PS_BASE_URI__.'js/jquery/jquery.fancybox-1.3.4.js"></script>
<link type="text/css" rel="stylesheet" href="'.__PS_BASE_URI__.'css/jquery.fancybox-1.3.4.css" />
<script type="text/javascript">
function updLayCounters()
@@ -1629,7 +1664,7 @@ class BlockLayered extends Module
else
{
$(this).parent().css(\'background\', \'url("../img/jquery-ui/ui-bg_glass_100_f6f6f6_1x400.png") repeat-x scroll 50% 50% #F6F6F6\');
$(this).effect(\'transfer\', { to: $(\'#layered_container_right ul#all_filters\') }, 300, function() {
$(this).effect(\'transfer\', { to: $(\'#layered_container_right ul#all_filters\') }, 300, function() {
$(this).parent().removeClass(\'layered_left\');
$(this).parent().addClass(\'layered_right\');
$(this).parent().appendTo(\'ul#all_filters\');
@@ -1654,7 +1689,7 @@ class BlockLayered extends Module
updElements(0, 0);
},
\'onComplete\': function() {
if($(\'#categories-treeview li#1\').attr(\'cleaned\'))
/* if($(\'#categories-treeview li#1\').attr(\'cleaned\'))
return;
if($(\'#categories-treeview li#1\').attr(\'cleaned\', true))
$(\'#categories-treeview li#1\').removeClass(\'static\');
@@ -1666,7 +1701,7 @@ class BlockLayered extends Module
$(\'.hitarea\').click(function(it)
{
$(this).parent().find(\'> .category_label\').click();
});
});*/
}
});
@@ -2072,7 +2107,7 @@ class BlockLayered extends Module
$parent = new Category((int)$id_parent);
/* Get the filters for the current category */
$filters = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('SELECT * FROM '._DB_PREFIX_.'layered_category WHERE id_category = '.(int)$id_parent.'
$filters = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT * FROM '._DB_PREFIX_.'layered_category WHERE id_category = '.(int)$id_parent.'
GROUP BY `type`, id_value ORDER BY position ASC');
// Remove all empty selected filters
foreach ($selectedFilters as $key => $value)
@@ -2238,8 +2273,19 @@ class BlockLayered extends Module
switch ($filter['type'])
{
case 'price':
$priceArray = array('type_lite' => 'price', 'type' => 'price', 'id_key' => 0, 'name' => $this->l('Price'),
'slider' => true, 'max' => '0', 'min' => null, 'values' => array ('1' => 0), 'unit' => $currency->sign);
$priceArray = array(
'type_lite' => 'price',
'type' => 'price',
'id_key' => 0,
'name' => $this->l('Price'),
'slider' => true,
'max' => '0',
'min' => null,
'values' => array ('1' => 0),
'unit' => $currency->sign,
'filter_show_limit' => $filter['filter_show_limit'],
'filter_type' => $filter['filter_type']
);
if (isset($products) && $products)
foreach ($products as $product)
{
@@ -2274,8 +2320,19 @@ class BlockLayered extends Module
break;
case 'weight':
$weightArray = array('type_lite' => 'weight', 'type' => 'weight', 'id_key' => 0, 'name' => $this->l('Weight'), 'slider' => true,
'max' => '0', 'min' => null, 'values' => array ('1' => 0), 'unit' => Configuration::get('PS_WEIGHT_UNIT'));
$weightArray = array(
'type_lite' => 'weight',
'type' => 'weight',
'id_key' => 0,
'name' => $this->l('Weight'),
'slider' => true,
'max' => '0',
'min' => null,
'values' => array ('1' => 0),
'unit' => Configuration::get('PS_WEIGHT_UNIT'),
'filter_show_limit' => $filter['filter_show_limit'],
'filter_type' => $filter['filter_type']
);
if (isset($products) && $products)
foreach ($products as $product)
{
@@ -2309,8 +2366,12 @@ class BlockLayered extends Module
break;
case 'condition':
$conditionArray = array('new' => array('name' => $this->l('New'), 'nbr' => 0),
'used' => array('name' => $this->l('Used'), 'nbr' => 0), 'refurbished' => array('name' => $this->l('Refurbished'), 'nbr' => 0));
$conditionArray = array(
'new' => array('name' => $this->l('New'),'nbr' => 0),
'used' => array('name' => $this->l('Used'), 'nbr' => 0),
'refurbished' => array('name' => $this->l('Refurbished'),
'nbr' => 0)
);
if (isset($products) && $products)
foreach ($products as $product)
if (isset($selectedFilters['condition']) && in_array($product['condition'], $selectedFilters['condition']))
@@ -2322,18 +2383,37 @@ class BlockLayered extends Module
foreach ($products as $product)
if (isset($conditionArray[$product['condition']]))
$conditionArray[$product['condition']]['nbr']++;
$filterBlocks[] = array('type_lite' => 'condition', 'type' => 'condition', 'id_key' => 0, 'name' => $this->l('Condition'), 'values' => $conditionArray);
$filterBlocks[] = array(
'type_lite' => 'condition',
'type' => 'condition',
'id_key' => 0,
'name' => $this->l('Condition'),
'values' => $conditionArray,
'filter_show_limit' => $filter['filter_show_limit'],
'filter_type' => $filter['filter_type']
);
break;
case 'quantity':
$quantityArray = array (0 => array('name' => $this->l('Not available'), 'nbr' => 0), 1 => array('name' => $this->l('In stock'), 'nbr' => 0));
$quantityArray = array (
0 => array('name' => $this->l('Not available'), 'nbr' => 0),
1 => array('name' => $this->l('In stock'),
'nbr' => 0));
foreach ($quantityArray as $key => $quantity)
if (isset($selectedFilters['quantity']) && in_array($key, $selectedFilters['quantity']))
$quantityArray[$key]['checked'] = true;
if (isset($products) && $products)
foreach ($products as $product)
$quantityArray[(int)($product['quantity'] > 0)]['nbr']++;
$filterBlocks[] = array('type_lite' => 'quantity', 'type' => 'quantity', 'id_key' => 0, 'name' => $this->l('Availability'), 'values' => $quantityArray);
$filterBlocks[] = array(
'type_lite' => 'quantity',
'type' => 'quantity',
'id_key' => 0,
'name' => $this->l('Availability'),
'values' => $quantityArray,
'filter_show_limit' => $filter['filter_show_limit'],
'filter_type' => $filter['filter_type']
);
break;
case 'manufacturer':
@@ -2346,7 +2426,15 @@ class BlockLayered extends Module
if (isset($selectedFilters['manufacturer']) && in_array((int)$manufacturer['id_manufacturer'], $selectedFilters['manufacturer']))
$manufaturersArray[$manufacturer['id_manufacturer']]['checked'] = true;
}
$filterBlocks[] = array('type_lite' => 'manufacturer', 'type' => 'manufacturer', 'id_key' => 0, 'name' => $this->l('Manufacturer'), 'values' => $manufaturersArray);
$filterBlocks[] = array(
'type_lite' => 'manufacturer',
'type' => 'manufacturer',
'id_key' => 0,
'name' => $this->l('Manufacturer'),
'values' => $manufaturersArray,
'filter_show_limit' => $filter['filter_show_limit'],
'filter_type' => $filter['filter_type']
);
}
break;
@@ -2357,14 +2445,27 @@ class BlockLayered extends Module
foreach ($products as $attributes)
{
if (!isset($attributesArray[$attributes['id_attribute_group']]))
$attributesArray[$attributes['id_attribute_group']] = array ('type_lite' => 'id_attribute_group',
'type' => 'id_attribute_group', 'id_key' => (int)$attributes['id_attribute_group'],
'name' => $attributes['attribute_group_name'], 'is_color_group' => (bool)$attributes['is_color_group'], 'values' => array(),
'url_name' => $attributes['name_url_name'], 'meta_title' => $attributes['name_meta_title']);
$attributesArray[$attributes['id_attribute_group']] = array (
'type_lite' => 'id_attribute_group',
'type' => 'id_attribute_group',
'id_key' => (int)$attributes['id_attribute_group'],
'name' => $attributes['attribute_group_name'],
'is_color_group' => (bool)$attributes['is_color_group'],
'values' => array(),
'url_name' => $attributes['name_url_name'],
'meta_title' => $attributes['name_meta_title'],
'filter_show_limit' => $filter['filter_show_limit'],
'filter_type' => $filter['filter_type']
);
$attributesArray[$attributes['id_attribute_group']]['values'][$attributes['id_attribute']] = array(
'color' => $attributes['color'], 'name' => $attributes['attribute_name'], 'nbr' => (int)$attributes['nbr'],
'url_name' => $attributes['value_url_name'], 'meta_title' => $attributes['value_meta_title']);
'color' => $attributes['color'],
'name' => $attributes['attribute_name'],
'nbr' => (int)$attributes['nbr'],
'url_name' => $attributes['value_url_name'],
'meta_title' => $attributes['value_meta_title']
);
if (isset($selectedFilters['id_attribute_group'][$attributes['id_attribute']]))
$attributesArray[$attributes['id_attribute_group']]['values'][$attributes['id_attribute']]['checked'] = true;
}
@@ -2378,12 +2479,25 @@ class BlockLayered extends Module
foreach ($products as $feature)
{
if (!isset($featureArray[$feature['id_feature']]))
$featureArray[$feature['id_feature']] = array('type_lite' => 'id_feature', 'type' => 'id_feature',
'id_key' => (int)$feature['id_feature'], 'values' => array(), 'name' => $feature['feature_name'],
'url_name' => $feature['name_url_name'], 'meta_title' => $feature['name_meta_title']);
$featureArray[$feature['id_feature']] = array(
'type_lite' => 'id_feature',
'type' => 'id_feature',
'id_key' => (int)$feature['id_feature'],
'values' => array(),
'name' => $feature['feature_name'],
'url_name' => $feature['name_url_name'],
'meta_title' => $feature['name_meta_title'],
'filter_show_limit' => $filter['filter_show_limit'],
'filter_type' => $filter['filter_type']
);
$featureArray[$feature['id_feature']]['values'][$feature['id_feature_value']] = array('nbr' => (int)$feature['nbr'], 'name' => $feature['value'],
'url_name' => $feature['value_url_name'], 'meta_title' => $feature['value_meta_title']);
$featureArray[$feature['id_feature']]['values'][$feature['id_feature_value']] = array(
'nbr' => (int)$feature['nbr'],
'name' => $feature['value'],
'url_name' => $feature['value_url_name'],
'meta_title' => $feature['value_meta_title']
);
if (isset($selectedFilters['id_feature'][$feature['id_feature_value']]))
$featureArray[$feature['id_feature']]['values'][$feature['id_feature_value']]['checked'] = true;
}
@@ -2397,11 +2511,22 @@ class BlockLayered extends Module
{
foreach ($products as $category)
{
$tmpArray[$category['id_category']] = array('name' => $category['name'], 'nbr' => (int)$category['count_products']);
$tmpArray[$category['id_category']] = array(
'name' => $category['name'],
'nbr' => (int)$category['count_products']
);
if (isset($selectedFilters['category']) && in_array($category['id_category'], $selectedFilters['category']))
$tmpArray[$category['id_category']]['checked'] = true;
}
$filterBlocks[] = array ('type_lite' => 'category', 'type' => 'category', 'id_key' => 0, 'name' => $this->l('Categories'), 'values' => $tmpArray);
$filterBlocks[] = array (
'type_lite' => 'category',
'type' => 'category',
'id_key' => 0, 'name' => $this->l('Categories'),
'values' => $tmpArray,
'filter_show_limit' => $filter['filter_show_limit'],
'filter_type' => $filter['filter_type']
);
}
break;
@@ -2750,7 +2875,7 @@ class BlockLayered extends Module
LEFT JOIN '._DB_PREFIX_.'feature_value fv ON (fv.id_feature = fl.id_feature)
'.(count($categoryBox) ? '
LEFT JOIN '._DB_PREFIX_.'feature_product fp ON (fp.id_feature = fv.id_feature)
LEFT JOIN '._DB_PREFIX_.'category_product cp ON (cp.id_product = fp.id_product)' : '').'
LEFT JOIN '._DB_PREFIX_.'category_product cp ON (cp.id_product = fp.id_product)' : '').'
WHERE (fv.custom IS NULL OR fv.custom = 0) AND fl.id_lang = '.(int)$cookie->id_lang.
(count($categoryBox) ? ' AND cp.id_category IN ('.implode(',', $categoryBox).')' : '').'
GROUP BY fl.id_feature');
@@ -2768,17 +2893,58 @@ class BlockLayered extends Module
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
<input type="checkbox" id="layered_selection_subcategories" name="layered_selection_subcategories" />
<span class="position"></span>'.$this->l('Sub-categories filter').'
<select class="filter_show_limit" name="layered_selection_subcategories_filter_show_limit">
<option value="0">'.$this->l('No limit').'</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
</select>
<select class="filter_type" name="layered_selection_subcategories_filter_type">
<option value="0">'.$this->l('Allow multiple filter value').'</option>
<option value="1">'.$this->l('One filter value').'</option>
<option value="2">'.$this->l('Select').'</option>
</select>
</li>
</ul>
<ul>
<li class="ui-state-default layered_right">
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
<input type="checkbox" id="layered_selection_stock" name="layered_selection_stock" /> <span class="position"></span>'.$this->l('Product stock filter').'</li></ul>
<input type="checkbox" id="layered_selection_stock" name="layered_selection_stock" /> <span class="position"></span>'.$this->l('Product stock filter').'
<select class="filter_show_limit" name="layered_selection_stock_filter_show_limit">
<option value="0">'.$this->l('No limit').'</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
</select>
<select class="filter_type" name="layered_selection_stock_filter_type">
<option value="0">'.$this->l('Allow multiple filter value').'</option>
<option value="1">'.$this->l('One filter value').'</option>
<option value="2">'.$this->l('Select').'</option>
</select>
</li>
</ul>
<ul>
<li class="ui-state-default layered_right">
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
<input type="checkbox" id="layered_selection_condition" name="layered_selection_condition" />
<span class="position"></span>'.$this->l('Product condition filter').'
<select class="filter_show_limit" name="layered_selection_condition_filter_show_limit">
<option value="0">'.$this->l('No limit').'</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
</select>
<select class="filter_type" name="layered_selection_condition_filter_type">
<option value="0">'.$this->l('Allow multiple filter value').'</option>
<option value="1">'.$this->l('One filter value').'</option>
<option value="2">'.$this->l('Select').'</option>
</select>
</li>
</ul>
<ul>
@@ -2786,6 +2952,19 @@ class BlockLayered extends Module
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
<input type="checkbox" id="layered_selection_manufacturer" name="layered_selection_manufacturer" />
<span class="position"></span>'.$this->l('Product manufacturer filter').'
<select class="filter_show_limit" name="layered_selection_manufacturer_filter_show_limit">
<option value="0">'.$this->l('No limit').'</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
</select>
<select class="filter_type" name="layered_selection_manufacturer_filter_type">
<option value="0">'.$this->l('Allow multiple filter value').'</option>
<option value="1">'.$this->l('One filter value').'</option>
<option value="2">'.$this->l('Select').'</option>
</select>
</li>
</ul>
<ul>
@@ -2793,6 +2972,19 @@ class BlockLayered extends Module
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
<input type="checkbox" id="layered_selection_weight_slider" name="layered_selection_weight_slider" />
<span class="position"></span>'.$this->l('Product weight filter (slider)').'
<select class="filter_show_limit" name="layered_selection_weight_slider_filter_show_limit">
<option value="0">'.$this->l('No limit').'</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
</select>
<select class="filter_type" name="layered_selection_weight_slider_filter_type">
<option value="0">'.$this->l('Slider').'</option>
<option value="1">'.$this->l('inputs').'</option>
<option value="2">'.$this->l('list').'</option>
</select>
</li>
</ul>
<ul>
@@ -2800,6 +2992,19 @@ class BlockLayered extends Module
<span class="ui-icon ui-icon-arrowthick-2-n-s"></span>
<input type="checkbox" id="layered_selection_price_slider" name="layered_selection_price_slider" />
<span class="position"></span>'.$this->l('Product price filter (slider)').'
<select class="filter_show_limit" name="layered_selection_price_slider_filter_show_limit">
<option value="0">'.$this->l('No limit').'</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
</select>
<select class="filter_type" name="layered_selection_price_slider_filter_type">
<option value="0">'.$this->l('Slider').'</option>
<option value="1">'.$this->l('inputs').'</option>
<option value="2">'.$this->l('list').'</option>
</select>
</li>
</ul>';
@@ -2814,6 +3019,19 @@ class BlockLayered extends Module
<span class="position"></span>
'.$this->l('Attribute group:').' '.$attributeGroup['name'].' ('.(int)$attributeGroup['n'].' '.($attributeGroup['n'] > 1 ? $this->l('attributes') : $this->l('attribute')).')'.
($attributeGroup['is_color_group'] ? ' <img src="../img/admin/color_swatch.png" alt="" title="'.$this->l('This group will allow user to select a color').'" />' : '').'
<select class="filter_show_limit" name="layered_selection_ag_'.(int)$attributeGroup['id_attribute_group'].'_filter_show_limit">
<option value="0">'.$this->l('No limit').'</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
</select>
<select class="filter_type" name="layered_selection_ag_'.(int)$attributeGroup['id_attribute_group'].'_filter_type">
<option value="0">'.$this->l('Allow multiple filter value').'</option>
<option value="1">'.$this->l('One filter value').'</option>
<option value="2">'.$this->l('Select').'</option>
</select>
</li>';
$html .= '</ul>';
}
@@ -2828,6 +3046,19 @@ class BlockLayered extends Module
<input type="checkbox" id="layered_selection_feat_'.(int)$feature['id_feature'].'" name="layered_selection_feat_'.(int)$feature['id_feature'].'" />
<span class="position"></span>
'.$this->l('Feature:').' '.$feature['name'].' ('.(int)$feature['n'].' '.($feature['n'] > 1 ? $this->l('values') : $this->l('value')).')
<select class="filter_show_limit" name="layered_selection_feat_'.(int)$feature['id_feature'].'_filter_show_limit">
<option value="0">'.$this->l('No limit').'</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="10">10</option>
<option value="20">20</option>
</select>
<select class="filter_type" name="layered_selection_feat_'.(int)$feature['id_feature'].'_filter_type">
<option value="0">'.$this->l('Allow multiple filter value').'</option>
<option value="1">'.$this->l('One filter value').'</option>
<option value="2">'.$this->l('Select').'</option>
</select>
</li>';
$html .= '</ul>';
}
@@ -2844,10 +3075,16 @@ class BlockLayered extends Module
{
$(\'#selected_filters li\').remove();
';
foreach ($layeredValues as $key => $layeredValue)
if ($key != 'categories')
$html .= '$(\'#'.$key.'\').click();'."\n";
{
$html .= '
$(\'#'.$key.'\').click();
$(\'select[name='.$key.'_filter_type]\').val('.$layeredValue['filter_type'].');
$(\'select[name='.$key.'_filter_show_limit]\').val('.$layeredValue['filter_show_limit'].');
';
}
if (isset($layeredValues['categories']) && count($layeredValues['categories']))
{
@@ -2960,6 +3197,9 @@ class BlockLayered extends Module
`id_value` INT(10) UNSIGNED NULL DEFAULT \'0\',
`type` ENUM(\'category\',\'id_feature\',\'id_attribute_group\',\'quantity\',\'condition\',\'manufacturer\',\'weight\',\'price\') NOT NULL,
`position` INT(10) UNSIGNED NOT NULL,
`filter_type` int(10) UNSIGNED NOT NULL DEFAULT 0,
`filter_show_limit` int(10) UNSIGNED NOT NULL DEFAULT 0;
PRIMARY KEY (`id_layered_category`),
KEY `id_category` (`id_category`,`type`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1;'); /* MyISAM + latin1 = Smaller/faster */
+48 -16
View File
@@ -79,23 +79,51 @@ param_product_url = '#{$param_product_url}';
<div class="clear"></div>
<ul id="ul_layered_{$filter.type}_{$filter.id_key}">
{if !isset($filter.slider)}
{foreach from=$filter.values key=id_value item=value}
<li class="nomargin">
{if isset($filter.is_color_group) && $filter.is_color_group}
<input type="button" name="layered_{$filter.type_lite}_{$id_value}" rel="{$id_value}_{$filter.id_key}" id="layered_id_attribute_group_{$id_value}" {if !$value.nbr} value="X" disabled="disabled"{/if} style="background: {if isset($value.color)}{$value.color}{else}#CCC{/if}; margin-left: 0; width: 16px; height: 16px; padding:0; border: 1px solid {if isset($value.checked) && $value.checked}red{else}#666{/if};" />
{if isset($value.checked) && $value.checked}<input type="hidden" name="layered_{$filter.type_lite}_{$id_value}" value="{$id_value}" />{/if}
{else}
<input type="checkbox" class="checkbox" name="layered_{$filter.type_lite}_{$id_value}" id="layered_{$filter.type_lite}{if $id_value || $filter.type == 'quantity'}_{$id_value}{/if}" value="{$id_value}{if $filter.id_key}_{$filter.id_key}{/if}"{if isset($value.checked)} checked="checked"{/if}{if !$value.nbr} disabled="disabled"{/if} />
{/if}
<label for="layered_{$filter.type_lite}_{$id_value}"{if !$value.nbr} class="disabled"{else}{if isset($filter.is_color_group) && $filter.is_color_group} name="layered_{$filter.type_lite}_{$id_value}" class="layered_color" rel="{$id_value}_{$filter.id_key}"{/if}{/if}>
{if !$value.nbr}
{$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> (0)</span>{/if}</a>
{if $filter.filter_type == 0}
{foreach from=$filter.values key=id_value item=value}
<li class="nomargin {if $value@index > $filter.filter_show_limit}hiddable{/if}">
{if isset($filter.is_color_group) && $filter.is_color_group}
<input class="color-option {if isset($value.checked) && $value.checked}on{/if}" type="button" name="layered_{$filter.type_lite}_{$id_value}" rel="{$id_value}_{$filter.id_key}" id="layered_id_attribute_group_{$id_value}" {if !$value.nbr} value="X" disabled="disabled"{/if} style="background: {if isset($value.color)}{$value.color}{else}#CCC{/if};" />
{if isset($value.checked) && $value.checked}<input type="hidden" name="layered_{$filter.type_lite}_{$id_value}" value="{$id_value}" />{/if}
{else}
<a href="{$value.link}" rel="{$value.rel}">{$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}</a>
<input type="checkbox" class="checkbox" name="layered_{$filter.type_lite}_{$id_value}" id="layered_{$filter.type_lite}{if $id_value || $filter.type == 'quantity'}_{$id_value}{/if}" value="{$id_value}{if $filter.id_key}_{$filter.id_key}{/if}"{if isset($value.checked)} checked="checked"{/if}{if !$value.nbr} disabled="disabled"{/if} />
{/if}
</label>
</li>
{/foreach}
<label for="layered_{$filter.type_lite}_{$id_value}"{if !$value.nbr} class="disabled"{else}{if isset($filter.is_color_group) && $filter.is_color_group} name="layered_{$filter.type_lite}_{$id_value}" class="layered_color" rel="{$id_value}_{$filter.id_key}"{/if}{/if}>
{if !$value.nbr}
{$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> (0)</span>{/if}</a>
{else}
<a href="{$value.link}" rel="{$value.rel}">{$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}</a>
{/if}
</label>
</li>
{/foreach}
{else if $filter.filter_type == 1}
{foreach from=$filter.values key=id_value item=value}
<li class="nomargin">
{if isset($filter.is_color_group) && $filter.is_color_group}
<input class="radio color-option {if isset($value.checked) && $value.checked}on{/if}" type="button" name="layered_{$filter.type_lite}_{$id_value}" rel="{$id_value}_{$filter.id_key}" id="layered_id_attribute_group_{$id_value}" {if !$value.nbr} value="X" disabled="disabled"{/if} style="background: {if isset($value.color)}{$value.color}{else}#CCC{/if};"/>
{if isset($value.checked) && $value.checked}<input type="hidden" name="layered_{$filter.type_lite}_{$id_value}" value="{$id_value}" />{/if}
{else}
<input type="radio" class="radio" name="layered_{$filter.type_lite}_{$id_value}" id="layered_{$filter.type_lite}{if $id_value || $filter.type == 'quantity'}_{$id_value}{/if}" value="{$id_value}{if $filter.id_key}_{$filter.id_key}{/if}"{if isset($value.checked)} checked="checked"{/if}{if !$value.nbr} disabled="disabled"{/if} />
{/if}
<label for="layered_{$filter.type_lite}_{$id_value}"{if !$value.nbr} class="disabled"{else}{if isset($filter.is_color_group) && $filter.is_color_group} name="layered_{$filter.type_lite}_{$id_value}" class="layered_color" rel="{$id_value}_{$filter.id_key}"{/if}{/if}>
{if !$value.nbr}
{$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> (0)</span>{/if}</a>
{else}
<a href="{$value.link}" rel="{$value.rel}">{$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> ({$value.nbr})</span>{/if}</a>
{/if}
</label>
</li>
{/foreach}
{else}
<select class="select" {if $filter.filter_show_limit > 1}multiple="multiple" size="{$filter.filter_show_limit}"{/if}>
{foreach from=$filter.values key=id_value item=value}
<option style="color: {if isset($value.color)}{$value.color}{/if}" id="layered_id_attribute_group_{$id_value}" value="{$id_value}_{$filter.id_key}" {if isset($value.checked) && $value.checked}selected="selected"{/if}>
{$value.name|escape:html:'UTF-8'}{if $layered_show_qties}<span> (0)</span>{/if}</a>
</option>
{/foreach}
</select>
{/if}
{else}
<label for="{$filter.type}">{l s='Range:' mod='blocklayered'}</label> <span id="layered_{$filter.type}_range"></span>
<div style="margin: 6px 0 6px 6px; width: 93%;">
@@ -128,13 +156,17 @@ param_product_url = '#{$param_product_url}';
</script>
{/if}
</ul>
{if count($filter.values) > $filter.filter_show_limit && $filter.filter_type != 2}
<span class="hide-action more">{l s='Show more' mod='blocklayered'}</span>
<span class="hide-action less">{l s='Show less' mod='blocklayered'}</span>
{/if}
</div>
{/if}
{/foreach}
</div>
<input type="hidden" name="id_category_layered" value="{$id_category_layered}" />
{foreach from=$filters item=filter}
{if $filter.type_lite == 'id_attribute_group' && isset($filter.is_color_group) && $filter.is_color_group}
{if $filter.type_lite == 'id_attribute_group' && isset($filter.is_color_group) && $filter.is_color_group && $filter.filter_type != 2}
{foreach from=$filter.values key=id_value item=value}
{if isset($value.checked)}
<input type="hidden" name="layered_id_attribute_group_{$id_value}" value="{$id_value}_{$filter.id_key}" />
+1 -1
View File
@@ -2,7 +2,7 @@
<module>
<name>blocklayered</name>
<displayName><![CDATA[Layered navigation block]]></displayName>
<version><![CDATA[1.6]]></version>
<version><![CDATA[1.7]]></version>
<description><![CDATA[Displays a block with layered navigation filters.]]></description>
<author><![CDATA[PrestaShop]]></author>
<tab><![CDATA[front_office_features]]></tab>
+7 -1
View File
@@ -56,7 +56,7 @@ $_MODULE['<{blocklayered}prestashop>blocklayered_62f5d708d6ad1fa1ddd9429a65cccbe
$_MODULE['<{blocklayered}prestashop>blocklayered_fe0619d5f4999e09c622e32da7e7566a'] = 'spécifiques';
$_MODULE['<{blocklayered}prestashop>blocklayered_b0b5ccb4a195a07fd3eed14affb8695f'] = 'Catégories';
$_MODULE['<{blocklayered}prestashop>blocklayered_ef7de3f485174ff47f061ad27d83d0ee'] = 'sélectionnée(s)';
$_MODULE['<{blocklayered}prestashop>blocklayered_f72c75bdf80dc88b2529162f4947edc8'] = 'S\'il vous plaît sélectionner au moins une catégorie spécifique ou choisissez « Toutes catégories ».';
$_MODULE['<{blocklayered}prestashop>blocklayered_f72c75bdf80dc88b2529162f4947edc8'] = 'S\'il vous plaît sélectionnez au moins une catégorie spécifique ou choisissez « Toutes catégories ».';
$_MODULE['<{blocklayered}prestashop>blocklayered_64646db703ca003a37bd1e73977a3a4d'] = 'Catégories utilisant ce modèle';
$_MODULE['<{blocklayered}prestashop>blocklayered_d758a9754eb9f36db05c22ad0c77e38e'] = 'Sélectionnez une ou plusieurs catégories utilisant ce modèle';
$_MODULE['<{blocklayered}prestashop>blocklayered_5965d2ce192837f00d743d8a674382c1'] = 'Cliquez sur \"Sauvegarder cette sélection\" ou fermez la fenêtre pour sauvegarder';
@@ -79,6 +79,7 @@ $_MODULE['<{blocklayered}prestashop>blocklayered_9868c3ac0748acf3b981a96cfe163ee
$_MODULE['<{blocklayered}prestashop>blocklayered_93cba07454f06a4a960172bbd6e2a435'] = 'Oui';
$_MODULE['<{blocklayered}prestashop>blocklayered_bafd7322c6e97d25b6299b5d6fe8920b'] = 'Non';
$_MODULE['<{blocklayered}prestashop>blocklayered_8531c73de81b9ed94322dda7cf947daa'] = 'Afficher le nombre de produits qui correspondent';
$_MODULE['<{blocklayered}prestashop>blocklayered_ee61c015043c79c1370fc14980dd27b9'] = 'Montrez les produits des sous-catégories';
$_MODULE['<{blocklayered}prestashop>blocklayered_cf565402d32b79d33f626252949a6941'] = 'Configuration enregistré';
$_MODULE['<{blocklayered}prestashop>blocklayered_3601146c4e948c32b6424d2c0a7f0118'] = 'Prix';
$_MODULE['<{blocklayered}prestashop>blocklayered_8c489d0946f66d17d73f26366a4bf620'] = 'Poids';
@@ -92,6 +93,9 @@ $_MODULE['<{blocklayered}prestashop>blocklayered_faeaec9eda6bc4c8cb6e1a9156a858b
$_MODULE['<{blocklayered}prestashop>blocklayered_c0bd7654d5b278e65f21cf4e9153fdb4'] = 'Fabricant';
$_MODULE['<{blocklayered}prestashop>blocklayered_308edffd52afae39cc6277e246ec5df8'] = 'Filtres disponibles';
$_MODULE['<{blocklayered}prestashop>blocklayered_cfbc982f8fb7a0cc3abb3c85c795ab41'] = 'Filtre sous-catégories';
$_MODULE['<{blocklayered}prestashop>blocklayered_af605ea55ee39e54c444f217e346048f'] = 'Pas de limite';
$_MODULE['<{blocklayered}prestashop>blocklayered_f7e8e9adfb9fbb546ae8b9b6ec2849b4'] = 'Autoriser la selection de plusieur valeur de filtre';
$_MODULE['<{blocklayered}prestashop>blocklayered_3c151970b422e3e3cbf927166e4eade4'] = 'Une seul value par filtre';
$_MODULE['<{blocklayered}prestashop>blocklayered_cd50ff1c5332f9920acf8173c4aab425'] = 'Filtre stock du produit';
$_MODULE['<{blocklayered}prestashop>blocklayered_048c1728a0a6cf36f56c9dcdd23d8a14'] = 'Filtre état du produit';
$_MODULE['<{blocklayered}prestashop>blocklayered_02ecc2cbb645a2b859deba6907334cc8'] = 'Filtre fabriquant du produit';
@@ -108,4 +112,6 @@ $_MODULE['<{blocklayered}prestashop>blocklayered_c32516babc5b6c47eb8ce1bfc223253
$_MODULE['<{blocklayered}prestashop>blocklayered_1262d1b9fbffb3a8e85ac9e4b449e989'] = 'Filtres actifs :';
$_MODULE['<{blocklayered}prestashop>blocklayered_ea4788705e6873b424c65e91c2846b19'] = 'Annuler';
$_MODULE['<{blocklayered}prestashop>blocklayered_853ae90f0351324bd73ea615e6487517'] = ' :';
$_MODULE['<{blocklayered}prestashop>blocklayered_146ffe2fd9fa5bec3b63b52543793ec7'] = 'Voir plus';
$_MODULE['<{blocklayered}prestashop>blocklayered_c74ea6dbff701bfa23819583c52ebd97'] = 'Voir moins';
$_MODULE['<{blocklayered}prestashop>blocklayered_75954a3c6f2ea54cb9dff249b6b5e8e6'] = 'Tranche';