разбиение на страницы joomla getListFooter во внешнем интерфейсе не работает

#joomla #pagination

#joomla #разбивка на страницы

Вопрос:

я изучаю базу компонентов для разработки в учебном пособии по http://docs.joomla.org / , у меня проблема с разбиением на страницы, нажмите страницу 1,2,3 … не работает ,

вот мой код: com_bet/models/test.php:

 defined('_JEXEC') or die;
jimport('joomla.application.component.modellist');
class BetModelTest extends JModelList{      
    protected function getListQuery(){      
        $db=JFactory::getDbo();
        $query=$db->getQuery(true);
        $query->select('*')->from('#__member');     
        return $query;
    }   
}
  

com_bet/views/test/view.html.php

 defined('_JEXEC') or die;
jimport('joomla.application.component.view');
class BetViewTest extends JViewLegacy{
    function display($tpl=null){        
        $items=$this->get('Items');
        $pagination=$this->get('Pagination');
        $this->items=$items;
        $this->pagination=$pagination;
        parent::display($tpl);
    }
}
  

com_bet/views/test/tmpl/default.php:

 defined('_JEXEC') or die;
JHtml::_('behavior.tooltip');
?>
<form action="index.php?option=com_betamp;view=test" method="post">
<table>
<thead>
    <tr>
        <th>ID</th>
        <th>Username</th>
        <th>Password</th>
        <th>Funds</th>
    </tr>
</thead>
<tbody> 
    <?php foreach ($this->items as $item){?>
    <tr>
        <td><?php echo $item->id;?></td>
        <td><?php echo $item->username;?></td>
        <td><?php echo $item->pass;?></td>
        <td><?php echo $item->funds;?></td>
    </tr>
    <?php }?>   
</tbody>
<tfoot>
    <tr>
        <td colspan='4'><?php echo $this->pagination->getListFooter();?></td>
    </tr>
<tfoot>
</table>
</form>
  

я смотрю в элементе проверки Chrome, он показывает «Невозможно прочитать свойство ‘limitstart’ неопределенного», как на картинке позади :
http://i1119.photobucket.com/albums/k623/helbros/joomla.png

Chrome - проверяет элемент

помогите мне, спасибо большое

Ответ №1:

Вам нужно добавить id атрибут в вашу форму, также вам нужно скрытое поле с именем limitstart в вашей форме. В настоящее время javascript ищет форму с идентификатором adminForm и не может ее найти.

Чтобы обновить ограничение по умолчанию, вы можете расширить свой Model , добавив метод populateState , который должен выглядеть следующим образом:

 protected function populateState($ordering = null, $direction = null) {
  $app = JFactory::getApplication();

  $limit = $app->getUserStateFromRequest('global.list.limit', 'limit', $app->getCfg('list_limit'), 'uint');
  $this->setState('list.limit', $limit);
  // As you can see if no limit is set, it gets it from default value of config, 
  // but you can replace $app->getCfg('list_limit') by any integer you want to 
  // override default limit value

  $limitstart = $app->input->get('limitstart', 0, 'uint');
  $this->setState('list.start', $limitstart);

  $limitstart = $app->input->get('limitstart', 0, 'uint');
  $this->setState('list.start', $limitstart); 
}
  

Комментарии:

1.спасибо, я добавил 2 атрибута name="adminForm" id="adminForm" в тег <form>, и теперь он работает отлично. но у меня есть еще одна проблема с отображением записи в таблице, она всегда отображает 20 записей в первый раз при загрузке веб-страницы, как это изменить.Кто-то сказал изменить значение $limit в коде, но я не знаю, где это изменить.

Ответ №2:

Это старый вопрос (более года назад), но у меня была такая же проблема в Joomla 3 — то есть я мог заставить разбивку на страницы работать во внешнем интерфейсе с некоторыми усилиями, но изменение количества отображаемых элементов списка не сработало. Я, наконец, понял это.

Проблема заключалась в том, что поле выбора ограничения как в фильтре, так и в разбивке на страницы имело имя «limit», а не «list [limit]». Редактирование HTML для последнего заставило его работать.

Как заставить его работать в коде: 1. У вас должен быть фильтр, чтобы filter_VIEW.xml файл в /models/form со списком полей «list» и полем «limit» типа «limitbox» (посмотрите на com_users для примера). 2. Вы должны вызвать фильтр в представлении с помощью

 JLayoutHelper::render('joomla.searchtools.default', array('view' => $this, 'options' => array('filtersHidden' =>$hidden)));
  

Это даст вам ограничение в области фильтров (вам не нужны никакие другие фильтры).
3. Чтобы избавиться от нефункционирующего ограничения в области разбивки на страницы, используйте CSS, чтобы установить для класса «limit» значение «display: none;»

Я надеюсь, что это поможет другим. Мне потребовалось довольно много времени, чтобы понять это.