Magento Forum

   
Подсунуть свой pager вместо сстандартного
 
akoval
Member
 
Total Posts:  50
Joined:  2011-03-19
 

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

Нашел вот здесь, как можно выдавать свои коллекции с использованием возможностей стандартного пэйджера (page/html/pager.phtml).в моем модуле - http://www.excellencemagentoblog.com/magento-collection-paging.

Все вроде бы работает, но мне нужно вместо того, чтобы там использовались слова Item/Items и т.д. печатать другие слова (Product/Products и т.д., например). Для этого в своем классе, который в Block написал следующее:

class ORG_Mymodule _Block_Mymodule extends Mage_Core_Block_Template{
   
. . . . 
    protected function 
_prepareLayout()
    
{
        parent
::_prepareLayout();
 
        
$pager $this->getLayout()->createBlock('Mage_Page_Block_Html_Pager',
                
'custom.pager', array('template'=>'mymodule/html/pager.phtml'));

        
$pager->_template 'mymodule/html/pager.phtml';
               
        
$pager->setAvailableLimit(array(5=>5,10=>10,20=>20,'all'=>'all'));
        
$pager->setCollection($this->getCollection());
        
$this->setChild('pager'$pager);
        
$this->getCollection()->load();
        return 
$this;
    
}
ну, и кроме того, скопировал pager.phtml во frontend-е свой модуль в поддиректорию html и уже там исправил, все что мне нужно.
Вся эта штука у меня правильно заработала только когда я принудительно вставил
$pager->_template 'my_module/html/pager.phtml';
Почему оно не берет мой пэйджер, когда я задаю его в CreateBlock?
Конечно, если работает, то лучше его не трогать, как говорится, но может есть более правильный способ?

Спасибо за сочувствие…

Забыл. Magento 1.6.2

 
Magento Community Magento Community
Magento Community
Magento Community
 
mcdky
Sr. Member
 
Avatar
Total Posts:  140
Joined:  2011-09-29
 

Я бы так написал, но мне просто так удобнее писать.

$pager $this->getLayout()->createBlock('Mage_Page_Block_Html_Pager','custom.pager')
  ->
setTemplate('mymodule/html/pager.phtml')
  ->
setAvailableLimit(array(5=>5,10=>10,20=>20,'all'=>'all'))
  ->
setCollection($this->getCollection());

Вся эта штука у меня правильно заработала только когда я принудительно вставил
$pager->_template = ‘my_module/html/pager.phtml’;
Почему оно не берет мой пэйджер, когда я задаю его в CreateBlock?

поточу что смотрите как в Mage_Page_Block_Html_Pager

protected function _construct()
{
    parent
::_construct();
    
$this->setData('show_amounts'true);
    
$this->setData('use_container'true);
    
$this->setTemplate('page/html/pager.phtml');
}
Здесь вызывается _construct родителя. Mage_Page_Block_Html_Pager наследует Mage_Core_Block_Template, в котором _construct выглядит так
protected function _construct()
{
    parent
::_construct();
    
/*
     * In case template was passed through constructor
     * we assign it to block's property _template
     * Mainly for those cases when block created
     * not via Mage_Core_Model_Layout::addBlock()
     */
    
if ($this->hasData('template')) {
        $this
->setTemplate($this->getData('template'));
    
}
}
И тут честно добавляется ваш template (который вы написали в createBlock. Тут даже комментарий зачем и почему. Но потом, когда мы возвращаемся обратно в Mage_Page_Block_Html_Pager::_construct, template по умолчанию для пейжера выставляется
$this->setTemplate('page/html/pager.phtml');
А если вы напишете как я выше писал (или как вы уже написали, что одно и тоже, только вы напрямую к полю _template обращаетесь) то сначала будет вызов Mage_Page_Block_Html_Pager::_construct с его setTemplate а потом уже
setTemplate('mymodule/html/pager.phtml')

 
Magento Community Magento Community
Magento Community
Magento Community
 
akoval
Member
 
Total Posts:  50
Joined:  2011-03-19
 

Спасибо большое!

Завтра попробую…

 
Magento Community Magento Community
Magento Community
Magento Community
 
akoval
Member
 
Total Posts:  50
Joined:  2011-03-19
 

Ругнулась “PHP Fatal error:  Call to a member function setCollection() on a non-object”

исправил на

$pager $this->getLayout()->createBlock('Mage_Page_Block_Html_Pager','custom.pager')
            ->
setTemplate('my_module/html/pager.phtml');
        
$pager->setAvailableLimit(array(5=>5,10=>10,20=>20,'all'=>'all'));
          
$pager->setCollection($this->getCollection());

Я конечно понимаю, что в стакан не нальешь и в карман не положишь, но
Спасибо большое!

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
    Back to top