magento - Как создать страницу с нумерацией страниц в magento 1.7

Я пытаюсь добавить Mostviewed, расположенный здесь:

App/code/local/Mage/Catalog/Block/Product/Mostviewed.php

Я добавил следующий код:

class Mage_Catalog_Block_Product_Mostviewed extends Mage_Catalog_Block_Product_Abstract
{
   public function __construct(){
        parent::__construct();
        $storeId = Mage::app()->getStore()->getId();
        $collection = Mage::getResourceModel('reports/product_collection')
        ->addViewsCount();
        $collection->getSelect()->joinInner(array('e2' => 'catalog_product_flat_'.$storeId), 'e2.entity_id = e.entity_id');
        $this->setProductCollection($collection);
        return parent::_beforeToHtml();
    }
}

Я добавил echo $this->getToolbarHtml(), расположенный здесь:

app/design/frontend/default/default/template/catalog/product/mostviewedlist.phtml

Не удается отобразить разбивку на страницы в mostviewedlist.phtml.

Может кто-нибудь, пожалуйста, помогите мне решить эту проблему?

Любая помощь будет принята с благодарностью.


person Jason Cheng    schedule 08.05.2013    source источник


Ответы (1)


Ваш блок должен быть таким:

class Mage_Catalog_Block_Product_Mostviewed extends Mage_Catalog_Block_Product_Abstract
{
    public function __construct(){
        parent::__construct();
        $storeId = Mage::app()->getStore()->getId();
        $collection = Mage::getResourceModel('reports/product_collection')
            ->addViewsCount();
        $collection->getSelect()->joinInner(array('e2' => 'catalog_product_flat_'.$storeId), 'e2.entity_id = e.entity_id');
        $this->setProductCollection($collection);
    }

    protected function _prepareLayout()
    {
        parent::_prepareLayout();

        $pager = $this->getLayout()->createBlock('page/html_pager', 'mostview.pager')
                      ->setCollection($this->getProductCollection());
        $this->setChild('pager', $pager);
        $this->getProductCollection()->load();

        return $this;
    }

    public function getPagerHtml()
    {
        return $this->getChildHtml('pager');
    }
}

Ваш шаблон должен быть таким:

<?php $_collection = $this->getProductCollection(); ?>

<!-- top pagination -->
<?php echo $this->getPagerHtml(); ?>

<?php if($_collection->getSize()): ?>
    ...
    <?php foreach ($_collection as $_item): ?>
       ...
    <?php endforeach; ?>
<?php endif ?>

<!-- bottom pagination -->
<?php echo $this->getPagerHtml(); ?>

Если вы хотите отобразить панель инструментов. Ваш блок должен быть таким: (ПРИМЕЧАНИЕ: я не тестировал этот код)

class Mage_Catalog_Block_Product_Mostviewed extends Mage_Catalog_Block_Product_Abstract
{
    public function __construct(){
        parent::__construct();
        $storeId = Mage::app()->getStore()->getId();
        $collection = Mage::getResourceModel('reports/product_collection')
            ->addViewsCount();
        $collection->getSelect()->joinInner(array('e2' => 'catalog_product_flat_'.$storeId), 'e2.entity_id = e.entity_id');
        $this->setProductCollection($collection);
    }

    protected function _prepareLayout()
    {
        parent::_prepareLayout();

        $toolbar = $this->getLayout()->createBlock('catalog/product_list_toolbar', microtime())
            ->setCollection($this->getProductCollection());

        $pager = $this->getLayout()->createBlock('page/html_pager', microtime());
        $toolbar->setChild('product_list_toolbar_pager', $pager);

        $this->setChild('toolbar', $toolbar);
        $this->getProductCollection()->load();

        return $this;
    }

    public function getPagerHtml()
    {
        return $this->getChildHtml('toolbar');
    }
}
person ndlinh    schedule 08.05.2013
comment
Я попробовал ваш код, он работает хорошо. Я хочу показать выпадающую страницу, например 5 10 15 20..., как изменить номер. И еще один, как добавить сортировку? - person Jason Cheng; 09.05.2013
comment
Я использовал второй метод. Я нажал сортировать по, но не изменить. Я думаю, что что-то не так с public function __construct(). Вы можете мне помочь? - person Jason Cheng; 11.05.2013