Постраничная навигация результатов макроса data doSelection — различия между версиями
Mad grant (обсуждение | вклад) (Новая страница: «category:Написание кастомных макросовcategory:Верстка_в_TPL '''Актуально для версии 2.9.1''' == Зада…») |
Mad grant (обсуждение | вклад) |
||
(не показано 7 промежуточных версий этого же участника) | |||
Строка 19: | Строка 19: | ||
%data doSelection('default','usel', '0', '10')% | %data doSelection('default','usel', '0', '10')% | ||
</source> | </source> | ||
− | где default - имя шаблона, по которому мы выводим результат макроса %data doSelection()% | + | где: |
− | + | *default - имя шаблона, по которому мы выводим результат макроса %data doSelection()% | |
− | + | *usel - имя шаблона, по которому мы формируем Usel выборку | |
− | + | *0 - значение атрибута page тега <limit> (первая страница) | |
+ | *10 - значение тега <limit> (10 элементов на странице) | ||
=== Добавляем вызов %system numpages()% === | === Добавляем вызов %system numpages()% === | ||
Теперь мы можем железно задать количество элементов на странице и номер страницы, но нам нужно передавать значения, учитывающие работу макроса %system numpages()%. | Теперь мы можем железно задать количество элементов на странице и номер страницы, но нам нужно передавать значения, учитывающие работу макроса %system numpages()%. | ||
+ | |||
Сначала мы добавляем в шаблон результатов работы макроса %data doSelection()%, в блок 'elements_block' вызов макроса %system numpages()%, со следующими параметрами: | Сначала мы добавляем в шаблон результатов работы макроса %data doSelection()%, в блок 'elements_block' вызов макроса %system numpages()%, со следующими параметрами: | ||
<source lang="php"> | <source lang="php"> | ||
%system numpages(%total%, %per_page%,'default','n')% | %system numpages(%total%, %per_page%,'default','n')% | ||
</source> | </source> | ||
− | где %total% и %per_page% - стандартные макросы блока 'elements_block', выводящие общее число элементов и количество элементов на странице соответственно. | + | где: |
− | + | *%total% и %per_page% - стандартные макросы блока 'elements_block', выводящие общее число элементов и количество элементов на странице соответственно. | |
− | + | *default - шаблон для вывода результатов работы макроса %system numpages()% | |
+ | *'n' - Имя переменной, которая будет использоваться для задания номера страницы в URL в списке страниц. По умолчанию — символ "p". Например, ~/vse_novosti/?p=0 отобразит первую страницу ленты, ~/vse_novosti/?p=1 — вторую страницу, и так далее. | ||
=== Пишем кастомный макрос === | === Пишем кастомный макрос === | ||
Теперь, нам нужно чтобы макрос %data doSelection()% как-то взаимодействовал с переменной 'n' в адресной строке. | Теперь, нам нужно чтобы макрос %data doSelection()% как-то взаимодействовал с переменной 'n' в адресной строке. | ||
Строка 38: | Строка 41: | ||
public function getNumPage($numPage){ | public function getNumPage($numPage){ | ||
− | if(! | + | if(!isset($_GET['p'])){ |
$result = $numPage; | $result = $numPage; | ||
} | } | ||
Строка 56: | Строка 59: | ||
%data doSelection('default','usel', %custom getNumPage(0)%, '10')% | %data doSelection('default','usel', %custom getNumPage(0)%, '10')% | ||
</source> | </source> | ||
− | В третий параметр мы передаем наш кастомный макрос, который, если мы находимся на | + | *В третий параметр мы передаем наш кастомный макрос, который, если мы находимся на 'первой странице' постраничной навигации принимаем значение, |
− | указанное его параметром - "0"(то есть первая страница), а если мы перейдем на любую другую | + | указанное его параметром - "0"(то есть первая страница), а если мы перейдем на любую другую 'страницу' навигации, то макрос возвратит значение переменной 'n', |
− | которую поместит в адресную строку браузера макрос %system numpages()% | + | которую поместит в адресную строку браузера макрос %system numpages()%. |
+ | *А четвертым параметром мы задаем сколько элементов мы хотим видеть на каждой "странице" постраничной навигации. | ||
+ | == Результат == | ||
+ | Выборки по Usel, получаемые при помощи макроса %data doSelection()% будут адекватно работать с постраничной навигацией, выводимой макросом %system numpages()%. | ||
+ | == Полезные ссылки == | ||
+ | *Документация по протоколу Usel [http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/vyborki_iz_bd_protokol_usel/] | ||
+ | *Документация по макросу %data doSelection()% [http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/shablony_dannyh/data_doselection/] | ||
+ | *Документация по макросу %system numpages()% [http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/virtualnyj_modul_system/system_numpages/] |
Текущая версия на 07:28, 17 октября 2013
Актуально для версии 2.9.1
Содержание
Задача
Стандартно, если добавить в шаблон макроса %data doSelection()% вывод постраничной навигации, то есть макрос %system numpages()%, то работать постраничная навигация, в полном смысле этого слова, не будет, она выведется, но результат выборки по Usel, полученный с помощью макроса %data doSelection()% реагировать на переключение страниц не будет.
Решение
Чтобы результат выборки реагировал на переключение страниц в постраничной навигации нужно будет каким-то образом корректировать выборку.
Модифицируем Usel шаблон
В первую очередь, добавляем в наш Usel тег <limit> с атрибутом page, и поставляем в значение тега и атрибута page индексированные параметры {1} и {2}, то есть добавляем в наш usel шаблон следующую строку:
<limit page="{1}">{2}</limit>
В качестве значения тега <limit> передается количество элементов, которые будут присутствовать в выборке. Атрибут page используется для того, чтобы указать, какую страницу данных вернуть в результате выборки.
Эта модификация дает нам возможно менять результат выборки, передавая в нее некоторые параметры, например, прямо в макрос %data doSelection()%:
%data doSelection('default','usel', '0', '10')%
где:
- default - имя шаблона, по которому мы выводим результат макроса %data doSelection()%
- usel - имя шаблона, по которому мы формируем Usel выборку
- 0 - значение атрибута page тега <limit> (первая страница)
- 10 - значение тега <limit> (10 элементов на странице)
Добавляем вызов %system numpages()%
Теперь мы можем железно задать количество элементов на странице и номер страницы, но нам нужно передавать значения, учитывающие работу макроса %system numpages()%.
Сначала мы добавляем в шаблон результатов работы макроса %data doSelection()%, в блок 'elements_block' вызов макроса %system numpages()%, со следующими параметрами:
%system numpages(%total%, %per_page%,'default','n')%
где:
- %total% и %per_page% - стандартные макросы блока 'elements_block', выводящие общее число элементов и количество элементов на странице соответственно.
- default - шаблон для вывода результатов работы макроса %system numpages()%
- 'n' - Имя переменной, которая будет использоваться для задания номера страницы в URL в списке страниц. По умолчанию — символ "p". Например, ~/vse_novosti/?p=0 отобразит первую страницу ленты, ~/vse_novosti/?p=1 — вторую страницу, и так далее.
Пишем кастомный макрос
Теперь, нам нужно чтобы макрос %data doSelection()% как-то взаимодействовал с переменной 'n' в адресной строке. Для этого напишем следующий кастомный макрос, в файле /classes/modules/custom.php:
public function getNumPage($numPage){
if(!isset($_GET['p'])){
$result = $numPage;
}
else $result = htmlspecialchars($_GET['n']);
if(is_numeric($result) === true){
return "$result";
}
else return 'i need number';
}
Работаем он следующим образом, если нет переменной 'n', макрос возвращает значение параметра, который в него передали, если такая переменная есть то получается её значение, если значение - число, макрос возвращает его, если нет, то макрос возвращает текст "i need number".
Модифицируем вызов макроса %data doSelection()%
Теперь изменяем вызов нашего макроса %data doSelection()% на следующий:
%data doSelection('default','usel', %custom getNumPage(0)%, '10')%
- В третий параметр мы передаем наш кастомный макрос, который, если мы находимся на 'первой странице' постраничной навигации принимаем значение,
указанное его параметром - "0"(то есть первая страница), а если мы перейдем на любую другую 'страницу' навигации, то макрос возвратит значение переменной 'n', которую поместит в адресную строку браузера макрос %system numpages()%.
- А четвертым параметром мы задаем сколько элементов мы хотим видеть на каждой "странице" постраничной навигации.
Результат
Выборки по Usel, получаемые при помощи макроса %data doSelection()% будут адекватно работать с постраничной навигацией, выводимой макросом %system numpages()%.