Добавить нумерацию страниц в пользовательский модуль в Magento?
Я пытаюсь добавить нумерацию страниц в пользовательском модуле. У меня есть следующий код в папке "Блок" в файлах article.php
class Compname_Modname_Block_Articles extends Mage_Core_Block_Template
{
public function __construct()
{
parent::__construct();
$collection = Mage::getModel('articles/articles')->getCollection();
$this->setCollection($collection);
}
....
....
public function getTagsList(){
$pager = $this->getLayout()->createBlock('page/html_pager', 'custom.pager');
$pager->setAvailableLimit(array(5=>5,10=>10,20=>20,'all'=>'all'));
$pager->setCollection($this->getCollection());
$this->setChild('pager', $pager);
$this->getCollection()->load();
return $this;
}
public function getPagerHtml()
{
return $this->getChildHtml('pager');
}
.........
..........
}
У меня есть страница cms в конце администратора, имеющая следующий код
<reference name="content">
<block type="articles/articles" name="articles.tags" as="tags.articles" template="articles/tags.phtml" />
</reference>
В папке Статьи в моей теме у меня есть файл с именем tags.phtml
имея такой код,
<?php echo $this->getPagerHtml(); ?> // this displays exact pagination with page numbers
<?php $collection = $this->getTagsList();
var_dump($collection->getSize()); // Always return NULL
?>
getSize () всегда возвращает NULL
поэтому я не получаю свою коллекционную стоимость. Добрый совет по этому поводу
2 ответа
Вы возвращаете свой экземпляр класса блока из Compname_Modname_Block_Articles::getTagsList()
public function getTagsList(){
return $this;
}
Вот почему конечно
<?php $collection = $this->getTagsList();
var_dump($collection->getSize()); // Always return NULL
?>
Правда, решение для нестандартного модуля.
<?php
class Test_Featuredsalons_Block_Featuredsalons extends Mage_Core_Block_Template
{
public function __construct()
{
parent::__construct();
$collection = Mage::getModel('featuredsalons/featuredsalons')->getCollection();
$this->setCollection($collection);
}
protected function _prepareLayout()
{
parent::_prepareLayout();
$pager = $this->getLayout()->createBlock('page/html_pager', 'custom.pager');
$pager->setCollection($this->getCollection());
$this->setChild('pager', $pager);
$this->getCollection()->load();
return $this;
}
public function getPagerHtml()
{
return $this->getChildHtml('pager');
}
public function getCollection()
{
$limit = 10;
$curr_page = 1;
if(Mage::app()->getRequest()->getParam('p'))
{
$curr_page = Mage::app()->getRequest()->getParam('p');
}
//Calculate Offset
$offset = ($curr_page - 1) * $limit;
$collection = Mage::getModel('featuredsalons/featuredsalons')->getCollection()
->addFieldToFilter('status',1);
$collection->getSelect()->limit($limit,$offset);
return $collection;
}
}
?>
In phtml file, use below code:
<?php echo $this->getPagerHtml(); ?>
<?php $news = $this->getCollection(); ?>
Спасибо кашиф