[решение] pdoResources вывод родительских ссылок
Использую pdoResources для вывода данных, возникла потребность вывести "категория / подкатегория" текущего документа, выискивал решения, но все неработающие.
Собственно требуется вывести их в виде ссылки с названием.
Возможно кто-то уже это реализовывал и знает готовое решение?
— Моё решение задачи:
Самописный сниппет getWayFild
Примеры использования:
Возможно кому нибудь пригодится :-)
Собственно требуется вывести их в виде ссылки с названием.
Возможно кто-то уже это реализовывал и знает готовое решение?
— Моё решение задачи:
Самописный сниппет getWayFild
<?php
/**
* Доступные значения:
* &id - id документа
* &fild - желаемые данные
* &uri - по желанию, формирует ссылку с доп значениями:
* &title - выводит в title 'pagetitle', 'longtitle' или значение переменной
* &class - выводит в class значение переменной
* &tag - выводит значение переменной
*/
$page = $modx->getObject('modResource', $id);//значение &id
$output = $page->get($fild);//значение &fild
if ($uri != false) {//значение &uri
$uri = $page->get('uri');//получение uri
$title = ($title == 'pagetitle' || $title == 'longtitle' ?$page->get($title):$title);
$title = ($title != false ? ' title="'.$title.'"' : '');//значение &title
$class = ($class != false ? ' class="'.$class.'"' : '');//значение &class
$tag = ($tag != false ? ' '.$tag : '');//значение &tag
$result = '<a href="'.$uri.'"'.$title.$class.$tag.'>'.$output.'</a>';//результат
return $result;
} else {
return $output;
}
Примеры использования:
- Выводим заголовок родителя текущего документа
[[!getWayFild? &id=`[[*parent]]` &fild=`pagetitle`]]
- Выводим родителя текущего документа в виде ссылки с тайтлом "заголовок" родителя
[[!getWayFild? &id=`[[*parent]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]]
- Выводим родителя текущего документа в виде ссылки с тайтлом "расширенного заголовка" родителя
[[!getWayFild? &id=`[[*parent]]` &fild=`pagetitle` &uri=`1` &title=`longtitle`]]
- Выводим родителя текущего документа в виде ссылки с классом и дополнительным тегом
[[!getWayFild? &id=`[[*parent]]` &fild=`pagetitle` &uri=`1` &class=`my_class` &tag=`id="my_id_tag"`]]
- Выводим прародителя и родителя текущего документа в виде ссылок с тайтлами их заголовков
[[!getWayFild? &id=`[[getWayFild? &id=`[[+parent]]` &fild=`id`]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]] / [[!getWayFild? &id=`[[*parent]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]]
- Выводим прародителя и родителя текущего документа в виде ссылок с тайтлами их заголовков, но в шаблоне для pdoResources или getResources
[[!getWayFild? &id=`[[getWayFild? &id=`[[~[[+parent]]]]` &fild=`id`]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]] / [[!getWayFild? &id=`[[+parent]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]]
Возможно кому нибудь пригодится :-)
Комментарии: 16
Отыскал:
[[+parent:parent=`id`:parent=`longtitle`]]
но выводит только id прародителя
Если нужно выбирать категорию и подкатегорию плюсом к ресурсу (то есть 2 родителя к документу), то простой вариант только один — вызывать в чанке сниппет Breadcrumb и передавать ему id выбираемого ресурса.
Он построит хлебные крошки, но не обещаю, что это будет быстро.
Он построит хлебные крошки, но не обещаю, что это будет быстро.
Да, я о том же и думал, что такой вызов (многократный) как минимум, первичный, замедлит загрузку страницы. Ну а далее кэш.
Я вычитал, что разметка PHx достаточно ограничена в MODx Revolution, возможно временно, но это жалко, придется искать сниппет или что-то подобное.
— Спасибо за ответ.
Я вычитал, что разметка PHx достаточно ограничена в MODx Revolution, возможно временно, но это жалко, придется искать сниппет или что-то подобное.
— Спасибо за ответ.
Конечно замедлит, если вы для оформления одной строки результата выбираете 3 строки из БД.
PHx тут не при чем, да и не для того он придуман. Вы можете вызывать свой собственный сниппет в чанке, который выполнит ту же работу, что и Breadcrumb, только быстрее.
Другого решения я не вижу.
PHx тут не при чем, да и не для того он придуман. Вы можете вызывать свой собственный сниппет в чанке, который выполнит ту же работу, что и Breadcrumb, только быстрее.
Другого решения я не вижу.
Задачу решил, пост отредактировал.
Есть недочеты! В таком варианте он загибается:
[[!getWayFild? &id=`[[getWayFild? &id=`[[+parent]]` &fild=`parent`]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]]
Пока не знаю как это решить, вообще хотел всё сделать по другому, чтобы не выводить одно в другом, но пока не выходит -__-
Постараюсь сегодня выкатить pdoCrumbs — он быстро строит хлебные крошки, должен решить твой вопрос.
Держи новую версию pdoTools — там добавлен сниппет pdoCrumbs, который выводит родителей от указанного ресурса.
Работает довольно быстро. Например у меня в поиске вывод навигации у каждой строки добавляет всего 0.15 — 0.2 сек для страницы.
Параметры примерно совместимы с BreadCrumb.
Потестируй, если все окей — буду выпускать.
Работает довольно быстро. Например у меня в поиске вывод навигации у каждой строки добавляет всего 0.15 — 0.2 сек для страницы.
Параметры примерно совместимы с BreadCrumb.
Потестируй, если все окей — буду выпускать.
Держи новую версию pdoTools — там добавлен сниппет pdoCrumbs, который выводит родителей от указанного ресурса.Василий, если я правильно понял, pdoCrumbs является альтернативой getResourceField?
Спасибо.
Выводжу так:
Еще выводил:
Подскажите пример. Я вывожу данные на главной странице, последние новости/изменения.
Выводжу так:
[[!pdoCrumbs? &limit=`2` &showCurrent=`1` &from=`[[+parent]]`]]
получаю пустоту.Еще выводил:
[[!pdoCrumbs? &limit=`2` &showCurrent=`1` &from=`[[+id]]`]]
собственно без изменений, пусто.Подскажите пример. Я вывожу данные на главной странице, последние новости/изменения.
А надо параметр &to=`[[+id]]`
Это не я придумал — это хлебные крошки строятся, как бы, от корня к ресурсу.
Это не я придумал — это хлебные крошки строятся, как бы, от корня к ресурсу.
Да, так работает.
[[!pdoCrumbs? &limit=`3` &showCurrent=`0` &to=`[[+id]]`]]
А планируется ли передача класса через параметр для шаблона tplWrapper?, а то там зашит «breadcrumbs» и делать другой чанк ради класса, не знаю…
и еще вопрос, как заменить стрелочку (которая меж ними)?
и еще вопрос, как заменить стрелочку (которая меж ними)?
Я видел. Просто внес предложение и всё.
[[#[[+parent:parent]].uri]]
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.