Есть вопрос?
Зайди на форум

Поиск на сайте: Advanced

Denix - новый дистрибутив Linux. Русификация Ubuntu и установка кодеков

dkws.org.ua
Форум сайта dkws.org.ua
 
Главная    ТемыТемы    АльбомАльбом    РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

Magento: изменение внешнего вида фильтров

 
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP
 
Автор Сообщение
den

Старожил


Зарегистрирован: 31.01.2006
Сообщения: 13768
Откуда: Кировоград, Украина

СообщениеДобавлено: Пн Авг 27, 2018 4:05 pm    Заголовок сообщения: Magento: изменение внешнего вида фильтров
Ответить с цитатой

Давно ничего не писал. Сегодня решал задачу компактизации списков-фильтра в каталоге 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
Показать сообщения:   
Начать новую тему Ответить на тему    Список форумов dkws.org.ua -> PHP Часовой пояс: GMT
Страница 1 из 1
 Главная страница сайта
 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
© Колисниченко Денис