|
Автор |
Сообщение |
den
Старожил
Зарегистрирован: 31.01.2006 Сообщения: 13870 Откуда: Кировоград, Украина
|
|
|
|
Давно ничего не писал. Сегодня решал задачу компактизации списков-фильтра в каталоге Magento.
В каталоге есть несколько списков-фильтров с множеством элементов. Поставлена задача сделать списки компактнее. Решение следующее:
Файл app/design/frontend/package/theme/template/catalog/layer/filter.phtml
Стандартный файл выглядит так:
Код: |
<?php
/**
* Template for filter items block
*
* @see Mage_Catalog_Block_Layer_Filter
*/
?>
<ol>
<?php foreach ($this->getItems() as $_item): ?>
<li>
<?php if ($_item->getCount() > 0): ?>
<a href="<?php echo $this->urlEscape($_item->getUrl()) ?>"><?php echo $_item->getLabel() ?></a>
<?php else: echo $_item->getLabel() ?>
<?php endif; ?>
(<?php echo $_item->getCount() ?>)
</li>
<?php endforeach ?>
</ol> |
Заменил на:
Код: |
<?php
$attributeName = $this->getName();
$itemcountthreshold = 5; // к-во элементов
$itemcount = $this->getItemsCount();
$displayitemcount = true; //отображать (true) или нет к-во элементов фильтра в скобках
if ($itemcount > $itemcountthreshold) {
$attributeName = "Overthreshold";
}
if (!function_exists("_displayOrderedlist")) {
function _displayOrderedlist($atts, $displayitemcount) {
echo '<ol>';
foreach ($atts->getItems() as $_item) {
echo '<li><a href="' . $_item->getUrl() . '">' . $_item->getLabel() . '</a>';
if ($displayitemcount) {
echo ' (' . $_item->getCount() . ')';
}
echo '</li>';
}
echo '</ol>';
}
}
if (!function_exists("_displayDropdown")) {
function _displayDropdown($atts, $displayitemcount) {
echo '<select id="layered-select" class="select" name="layered-select" onchange="if (this.selectedIndex > 0) location.href=this[this.selectedIndex].value;">';
echo '<option selected="selected">Выберите...</option>';
foreach ($atts->getItems() as $_item) {
echo '<option value="' . $_item->getUrl() . '">';
echo $_item->getLabel();
if ($displayitemcount) {
echo ' (' . $_item->getCount() . ')';
}
echo '</option>';
}
echo '</select>';
}
}
switch ($attributeName) {
case 'РАЗМЕР':
case 'Overthreshold':
_displayDropdown($this, $displayitemcount);
break;
default:
_displayOrderedlist($this, $displayitemcount);
break;
}
?>
|
Смысл в следующем. Если к-во элементов в списке фильтра больше 5, то список OL превращается в список SELECT, что более компактно. |
|
Вернуться к началу |
dhsilabs@jabber.ru |
|
|
|
|
 Главная страница сайта
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|