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

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

  •  16-10-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

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

Решение

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

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

Поместите следующее обновление где -нибудь в вашем 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'); ?>

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

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

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

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

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

  1. Список продуктов и панель инструментов сильно переплетены, ссылаясь друг на друга в своих блоках, поэтому имеет смысл держать их вместе с точки зрения кода - они идут рука об руку
  2. Меньше кода и меньше изменений для блокировки логики означает меньшую вероятность появления ошибок
  3. Использование JavaScript вы можете легко переместить его в любом месте на странице
  4. Использование макета XML вы можете включить JavaScript на страницах со списком продуктов
  5. Перемещение через JavaScript расширяется и защищена от будущего - если логика списка продуктов или панели инструментов изменяет новые изменения в новых выпусках Magento, этот метод все равно будет работать.

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

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

      $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();

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

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();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top