#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
помогите мне, спасибо большое
Ответ №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;»
Я надеюсь, что это поможет другим. Мне потребовалось довольно много времени, чтобы понять это.