Перемещение панели инструментов категории из списка продуктов/товаров


Я пытаюсь переместить панель инструментов, которая отображает параметры сортировки и пейджер, из списка продуктов, чтобы я мог связать ее с хлебными крошками и названием категории.

Я нашел этот сайт, который работал для более старых версий Magento, но он не работает для CE 1.7 или EE 1.12.

В комментариях у кого-то был какой-то код, чтобы переместить его в корневой каталог, но это также не работает. Это был код для перемещения его в категорию/представление, которое справка:

$toolbar = $this->getChild('product_list')->getToolbarBlock();
$toolbar->setCollection($this->getChild('product_list')->getLoadedProductCollection());
echo $toolbar->toHtml();

Если есть другой способ сгруппировать панировочные сухари, название категории и панель инструментов вместе, дайте мне знать.

Author: kel, 2013-03-07

4 answers

Catalog/product_list и catalog/product_list_toolbar настолько связаны друг с другом, что вам приходится использовать их вместе. Однако, если вы хотите отображать только панель инструментов, вам нужно будет создать (почти) пустой шаблон списка продуктов.

Скажите, что вы хотите, чтобы панель инструментов отображалась в блоке "Хлебные крошки", но на самом деле это должно работать с любым блоком.

Поместите следующее обновление где-нибудь в свой layout/local.xml (возможно, оно также понадобится для catalog_category_default):

<catalog_category_layered>
    <reference name="breadcrumbs">
        <block type="catalog/product_list" name="toolbar_only" template="catalog/product/list/toolbar_only.phtml">
            <block type="catalog/product_list_toolbar" name="product_list_toolbar_only" template="catalog/product/list/toolbar.phtml">
                <block type="page/html_pager" name="product_list_toolbar_pager"/> 
            </block>    
            <action method="setToolbarBlockName"><name>product_list_toolbar_only</name></action>
        </block>            
    </reference>            
</catalog_category_layered>

Создайте однострочный список продуктов шаблон в template/catalog/product/list/toolbar_only.phtml:

<?php echo $this->getToolbarHtml() ?>

Затем вы можете вставить новый блок куда угодно в свой шаблон панировочных сухарей:

template/page/html/breadcrumbs.phtml:

<?php echo $this->getChildHtml('toolbar_only'); ?>
 13
Author: Jan Tomka, 2016-03-24 16:16:12

После попытки переместить блок панели инструментов с помощью XML-макета и шаблонов, я решил, что намного проще переместить его с помощью javascript. Я думаю, что этот способ дает вам больше контроля без какого-либо риска нарушения функциональности.

jQuery(document).ready(function($) {
     $(".breadcrumbs").after($(".category-products > .toolbar"));
});

Обратите внимание, что этот метод перемещает только первую панель инструментов, а не нижнюю, используя определенный селектор .category-products > .toolbar

Еще несколько рассуждений о том, почему этот метод является лучшим:

  1. Список продуктов и панель инструментов сильно переплетены, ссылаясь на друг друга в своих блоках, поэтому имеет смысл держать их вместе с точки зрения кода - они идут рука об руку
  2. Меньше кода и меньше изменений в логике блоков означает меньшую вероятность появления ошибок
  3. Используя javascript, вы можете легко переместить его в любое место страницы
  4. Используя XML-формат макета, вы можете включать javascript только на страницах со списком продуктов
  5. Перемещение с помощью javascript является расширяемым и защищенным в будущем - если логика, лежащая в основе списка продуктов или панели инструментов, блокируется изменения в новых выпусках Magento этот метод по-прежнему будет работать.
 4
Author: jharrison.au, 2013-03-08 01:04:34

Код Луффи не за горами

Чтобы скопировать блок в другие части вашего сайта, вы можете получить основной объект макета, а затем просто получить блок содержимого по имени

      $layout = Mage::app()->getLayout();
      $content = $layout->getBlock('content');
      $categoryProducts = $content->getChild('category.products');
      $productList = $categoryProducts->getChild('product_list');
      $toolbar = $productList->getToolbarBlock();
      $toolbar->setCollection($productList->getLoadedProductCollection());
      echo $toolbar->toHtml();
 4
Author: Judder, 2015-06-16 15:35:34

Попробуйте Код:

getParentBlock();
$content = $parent->getChild(‘content’);
$categoryProducts = $content->getChild(‘category.products’);
$productList = $categoryProducts->getChild(‘product_list’);
$toolbar = $productList->getToolbarBlock();
$toolbar->setCollection($productList->getLoadedProductCollection());
echo $toolbar->toHtml();
 0
Author: LuFFy, 2013-03-07 19:35:58