Новости Joomla

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

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Проблема все еще является актуальной, помогите кто-нибудь...
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Дима опять забыл?) Ну выложите компонент я посмотрю, и скажите версию J
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Да... Дела житейские + погда хорошая... На выходных не было времени посмотреть =( Буду пробовать на этой неделе.
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
« Последнее редактирование: 15.04.2014, 09:33:34 от DimkaJack »
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Нашел, в чем проблема. В методе populateState() вместо $this->getUserStateFromRequest лучше использовать $app->getUserStateFromRequest или последним параметром передавать false. Ну и соответственно в начале метода инициализировать приложение через $app = JFactory::getApplication();

Дело в том, что метод getUserStateFromRequest модели по умолчанию при его использовании скидывает limitstart на 0. А его использование происходит при установке фильтров, так как их значение мы получаем через $this->getUserStateFromRequest.

Другой вариант, использовать $this->getUserStateFromRequest, но перенести parent::populateState в начало метода, тогда сбрасывания limitstart не будет, так как родительский populateState() его установит до сбрасывания.

Правда я пока не понял, почему в админке все работает с $this->getUserStateFromRequest.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Дело в том, что метод getUserStateFromRequest модели по умолчанию при его использовании скидывает limitstart на 0. А его использование происходит при установке фильтров, так как их значение мы получаем через $this->getUserStateFromRequest.
я подразумеваю что так и должно быть.
Дело в том что использование фильтров каких-либо на страницах отличных от первой приводит не очень к хорошему результату.
Т.е. допустим вы находитесь на n-ой странице, применяете фильтр, результатов фильтрации естественно будет меньше, допустим 1 страница. В итоге limitstart остается тот же, а результатов соответственно на странице не будет.

По крайне мере такой баг был точно в 1.5, что там дальше не знаю, не смотрел.
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Круто все варианты работают)) Спасибо!
Разве что при смене фильтра отображается та же страница. хотя по идее должна быть первая.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Да, SmokerMan скорее всего прав, сбрасываться должно. Похоже, что полагаться на parent::populateState вообще нельзя, нужно реализовывать сортировку, порядок и limit / limitstart самому. По сути как сделано здесь.

Я еще покапаюсь и попробую найти рабочее решение с реализацией запоминания фильтров.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Вообщем решения я пока не нашел. Дело тут даже не в parent::populateState или использовании фильтров, а в том, что при отправке формы не скидывается limitstart. Я уже пробовал код из стандартных компонентов, но все равно не работает - limitstart не сбрасывается. Если взять любой стандартый компонент, то там даже при простом изменеинии лимита страниц сбрасывается limitstart. А здесь ни в какую не хочет.

Разработчики, где ошибка? Кто решит загадку апреля? :) Чую, что где-то недосмотрел, но я в своем компоненте использую AJAX навигацию и сбрасываю limistart с помощью JS. А тут ступор =)
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Загадку все же решил :D

Первое, что нужно сделать, это добавить в форму скрытое поле:
Код: php-brief
<input type="hidden" name="limitstart" value="" />

Второе, постраничную навигацию нужно выводить вот так:
Код: php-brief
<?php echo $this->pagination->getPagesLinks(); ?>

При таком раскладе все работает - фильтры сохраняют состояние (только использовать нужно $app->getUserStateFromRequest) и происходит сброс страниц при изменении фильтров. parent::populateState тоже работает как надо.

Но если выводить постраничную навигацию вот так:
Код: php-brief
<?php echo $this->pagination->getListFooter(); ?>

То тогда выводится еще одно скрытое поле limitstart, которое обновляется постраничной навигацией. Оно соответственно не пустое и сброса limitstart не происходит.
*

DimkaJack

  • Осваиваюсь на форуме
  • 28
  • 0 / 0
Цитировать
Загадку все же решил
Отлично, спасибо за решение проблемы
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
На самом деле, решено не до конца. Один ворос остался открытым - почему в админке все работает без этих хитрых манипуляций? Там же при использовании фильтров с $this->getUserStateFromRequest все отлично переключается, то есть limitstart работает нормально...
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод таблицы, деление на страницы

Автор March Cat

Ответов: 6
Просмотров: 831
Последний ответ 09.01.2019, 18:49:15
от dmitry_stas
Проблема с модулем после переноса с локалки на хостинг

Автор master-smeta

Ответов: 8
Просмотров: 2244
Последний ответ 15.11.2018, 16:34:46
от master-smeta
Меню схлопывается после перезагрузки страницы

Автор onelawyer

Ответов: 10
Просмотров: 1247
Последний ответ 11.10.2017, 14:50:48
от effrit
Как вставить модуль в код нужной страницы php?

Автор zvi

Ответов: 7
Просмотров: 3397
Последний ответ 12.04.2016, 19:36:55
от AlekVolsk
Модуль. Сообщение о включенном AdBlock. Как отпустить Javascript в низ страницы?

Автор cartgen

Ответов: 2
Просмотров: 1517
Последний ответ 19.08.2015, 23:42:16
от palexa