0 Пользователей и 1 Гость просматривают эту тему.
  • 6 Ответов
  • 804 Просмотров
*

Inoken

  • Осваиваюсь на форуме
  • 38
  • 0 / 0
Добрый день. В методе модели разрабатываемого компонента getListQuery формирую запрос к базе данных:

Код
$query->select("*");
$query->from ("#__com_table");
$query->where ("{$where_condition}");
if ($order_query_part) {$query->order("" . $order_query_part); }
$query->setLimit("" . $menu_params->get('displayed_items_number'));

Заданное в настройках компонента (либо пункта меню) количество элементов для отображения извлекатеся и подставляется в метод формирования условия LIMIT - setLimit (). При отображении пункта меню в пользовательской части сайта setLimit() никак не влияет на количество выводимых на страницу элементов, как будто его нет в запросе. Распечатывая запрос посредством:

Код
echo $query->__toString(); exit ();

в браузере вижу запрос, в котором присутствует условие LIMIT с актуальным значением параметра настройки количества оторажаемых элементов на странице. Данный запрос выполняю через вкладку SQL базы данных Joomla в phpMyAdmin и количество выводимых на экран выбранных из таблицы строк соответствует указанному в LIMIT-e количеству результатов.

Подскажите, пожалуйста, почему он не работет должным образом в Joomla, в чём может быть причина?
« Последнее редактирование: 13.06.2017, 12:32:40 от Inoken »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Потому что OFFSET и LIMIT задаются позже в JModelList::getItems()
Код: php-brief
$this->cache[$store] = $this->_getList($this->_getListQuery(), $this->getStart(), $this->getState('list.limit'));
Соответственно, вам нужно задать их в сессии посредством $this->setState('list.start') и $this->setState('list.limit').
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Добавьте в модели такое:
Код: php
protected function populateState( $ordering = null, $direction = null ){
parent::populateState( $ordering, $direction );
$this->setState( 'list.limit', 20 );
}
*

Inoken

  • Осваиваюсь на форуме
  • 38
  • 0 / 0
добавил вызов метода setState('list.limit', 'значение_из_настроек') в методе getListQuery (), всё заработало. Aleks.Denezh, а чем обусловлен вызов setState в методе populateState ()?!
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Метод populateState() автоматически заполняет состояние модели и вызывается при первом вызове метода getState(), а параметры состояния модели используются не только getListQuery(), но и многими другими методами.
Вы умеете код читать, так его читайте - это занимает не так много времени, во всяком случае, успеете за время ожидания очередного ответа.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
добавил вызов метода setState('list.limit', 'значение_из_настроек') в методе getListQuery (), всё заработало. Aleks.Denezh, а чем обусловлен вызов setState в методе populateState ()?!
Не совсем понял вопрос, метод setState как бы вы сами вызываете )
а метод populateState в вашей модели это банально переопределение метода в родительском классе JModelList который в дебрях себя его и вызывает!
*

Inoken

  • Осваиваюсь на форуме
  • 38
  • 0 / 0
благодарю вас за ответы, с назначением метода populateState() всё прояснилось.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

СЕСИЯ при AJAX запросе к php файлу

Автор avantyrist

Ответов: 15
Просмотров: 2649
Последний ответ 20.12.2015, 14:13:43
от robert