Пользовательская неатрибучная многослойная навигация. Это единственный способ сделать это?

magento.stackexchange https://magento.stackexchange.com/questions/328

  •  16-10-2019
  •  | 
  •  

Вопрос

Сегодня я сбил многослойный вариант навигации, который не основан на атрибуте. Это для рейтингов, поэтому передняя часть может показать красивые блестящие звезды.

Для этого у меня есть:

  1. Создал модуль
  2. Переписать Catalog_block_layer_View

    <blocks>        
      <catalog>
        <rewrite>
          <layer_view>Bob_Catalog_Block_Layer_View</layer_view>
         </rewrite>                
       </catalog>
    </blocks>
    
  3. Создал класс с именем BOB_CATALOG_BLOCK_LAYER_VIEW, который расширяет MAGE_CATALOG_BLOCK_LAYER_VIEW

  4. Созданы _initblocks (), getFilters () и _preparelayout (), чтобы переопределить методы родительских классов. Все они вызывают родительский класс в какой -то момент, а затем либо приготовляют, либо добавляют дополнительные данные к тому, что возвращается.
  5. Создайте блок фильтра BOB_CATALOG_BLOCK_LAYER_FILTER_RATING, который расширяет MAGE_CATALOG_BLOCK_LAYER_FILTER_ABSTRACT с конструктором, который устанавливает FILTERMODELNAME, а затем устанавливает пользовательский шаблон, поскольку он кажется MAGE_CATALOG_BLOCK_LAYER_FILTER_ABSTRATE STORDEREDEDEREDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEDEREDEDEREDEDEREDED.
  6. Создайте модель BOB_CATALOG_MODEL_LAYER_FILTER_RATING, которая расширяет MAGE_CATALOG_MODEL_LAYER_FILTER_ABSTRACT и реализации APPLICE (), getName (), _GetIteMsData ().

Все работает нормально. Красивые блестящие звезды показывают в сложном нависе.

У меня есть ощущение, что я что -то упускаю, потому что, когда дело доходит до шаблона состояния слоя, мне пришлось поставить там условное, чтобы забрать пользовательский рейтинговый фильтр и изменить макет. Кроме того, некоторые из вещей, которые мне нужно было сделать (клонировать коллекцию продуктов, так что событие нагрузки не обладает сбором сбора на странице), заставляют меня чувствовать, что я плаваю в гору.

Таким образом, вопрос в том, что у вас есть какие -либо лучшие предложения (или, может быть, сообщение в блоге подмигивание) о том, как построить нестандартный слоистый навигационный фильтр без атрибута?

Спасибо за чтение,

Сияние

Это было полезно?

Решение

Есть другой способ сделать это, вы можете добавить обычный атрибут к вашему продукту, который будет рейтингом. Затем используйте наблюдатель (я не знаю, как формируется этот рейтинг), чтобы обновить атрибут продукта. Или, если наблюдатель не является вариантом, возможно, используйте Cronjob, который обновляет этот атрибут для каждого продукта каждые x минут в зависимости от того, насколько тяжелый сценарий.

Таким образом, нет переписывания и изменения вовлечения и изменений, все навигационные модули все еще будут работать, и его легче поддерживать.

Конечно, вопрос в том, это вариант для вас? Откуда берутся рейтинги?

РЕДАКТИРОВАТЬ Вам придется стилизовать звезды, используя JavaScript или проверить имя атрибута в шаблоне.

Другие советы

Я копался в код и не нашел события. Без добавления дополнительных атрибутов нечего делать без <rewrite>

Вы должны добавить свой блок в \Mage_Catalog_Block_Layer_View::_prepareLayout() перед apply() (Если бы нет, вы могли бы использовать core_block_abstract_prepare_layout_after.

И вам нужно добавить это в \Mage_Catalog_Block_Layer_View::getFilters() И тоже нет событий.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top