[решение] pdoResources вывод родительских ссылок

Использую pdoResources для вывода данных, возникла потребность вывести "категория / подкатегория" текущего документа, выискивал решения, но все неработающие.

Собственно требуется вывести их в виде ссылки с названием.

Возможно кто-то уже это реализовывал и знает готовое решение?

Моё решение задачи:

Самописный сниппет 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;
}

Примеры использования:
  1. Выводим заголовок родителя текущего документа
    [[!getWayFild? &id=`[[*parent]]` &fild=`pagetitle`]]
  2. Выводим родителя текущего документа в виде ссылки с тайтлом "заголовок" родителя
    [[!getWayFild? &id=`[[*parent]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]]
  3. Выводим родителя текущего документа в виде ссылки с тайтлом "расширенного заголовка" родителя
    [[!getWayFild? &id=`[[*parent]]` &fild=`pagetitle` &uri=`1` &title=`longtitle`]]
  4. Выводим родителя текущего документа в виде ссылки с классом и дополнительным тегом
    [[!getWayFild? &id=`[[*parent]]` &fild=`pagetitle` &uri=`1` &class=`my_class` &tag=`id="my_id_tag"`]]
  5. Выводим прародителя и родителя текущего документа в виде ссылок с тайтлами их заголовков
    [[!getWayFild? &id=`[[getWayFild? &id=`[[+parent]]` &fild=`id`]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]] / [[!getWayFild? &id=`[[*parent]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]]
  6. Выводим прародителя и родителя текущего документа в виде ссылок с тайтлами их заголовков, но в шаблоне для pdoResources или getResources
    [[!getWayFild? &id=`[[getWayFild? &id=`[[~[[+parent]]]]` &fild=`id`]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]] / [[!getWayFild? &id=`[[+parent]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]]

Возможно кому нибудь пригодится :-)
Павел Левин
13 сентября 2013, 13:11
modx.pro
1
10 579
0

Комментарии: 16

Павел Левин
13 сентября 2013, 18:26
0
Отыскал:
[[+parent:parent=`id`:parent=`longtitle`]]
но выводит только id прародителя
    Василий Наумкин
    14 сентября 2013, 09:05
    0
    Если нужно выбирать категорию и подкатегорию плюсом к ресурсу (то есть 2 родителя к документу), то простой вариант только один — вызывать в чанке сниппет Breadcrumb и передавать ему id выбираемого ресурса.

    Он построит хлебные крошки, но не обещаю, что это будет быстро.
      Павел Левин
      14 сентября 2013, 15:15
      0
      Да, я о том же и думал, что такой вызов (многократный) как минимум, первичный, замедлит загрузку страницы. Ну а далее кэш.

      Я вычитал, что разметка PHx достаточно ограничена в MODx Revolution, возможно временно, но это жалко, придется искать сниппет или что-то подобное.

      — Спасибо за ответ.
        Василий Наумкин
        14 сентября 2013, 16:13
        0
        Конечно замедлит, если вы для оформления одной строки результата выбираете 3 строки из БД.

        PHx тут не при чем, да и не для того он придуман. Вы можете вызывать свой собственный сниппет в чанке, который выполнит ту же работу, что и Breadcrumb, только быстрее.

        Другого решения я не вижу.
          Павел Левин
          15 сентября 2013, 01:51
          0
          Задачу решил, пост отредактировал.
            Павел Левин
            15 сентября 2013, 03:33
            0
            Есть недочеты! В таком варианте он загибается:
            [[!getWayFild? &id=`[[getWayFild? &id=`[[+parent]]` &fild=`parent`]]` &fild=`pagetitle` &uri=`1` &title=`pagetitle`]]
            Пока не знаю как это решить, вообще хотел всё сделать по другому, чтобы не выводить одно в другом, но пока не выходит -__-
              Василий Наумкин
              15 сентября 2013, 06:09
              0
              Постараюсь сегодня выкатить pdoCrumbs — он быстро строит хлебные крошки, должен решить твой вопрос.
                Василий Наумкин
                15 сентября 2013, 10:28
                0
                Держи новую версию pdoTools — там добавлен сниппет pdoCrumbs, который выводит родителей от указанного ресурса.

                Работает довольно быстро. Например у меня в поиске вывод навигации у каждой строки добавляет всего 0.15 — 0.2 сек для страницы.
                Параметры примерно совместимы с BreadCrumb.

                Потестируй, если все окей — буду выпускать.
                  Александр Наумов
                  15 сентября 2013, 11:25
                  0
                  Держи новую версию pdoTools — там добавлен сниппет pdoCrumbs, который выводит родителей от указанного ресурса.
                  Василий, если я правильно понял, pdoCrumbs является альтернативой getResourceField?
                    Павел Левин
                    15 сентября 2013, 13:54
                    0
                    Спасибо.

                    Выводжу так:
                    [[!pdoCrumbs? &limit=`2` &showCurrent=`1` &from=`[[+parent]]`]]
                    получаю пустоту.

                    Еще выводил:
                    [[!pdoCrumbs? &limit=`2` &showCurrent=`1` &from=`[[+id]]`]]
                    собственно без изменений, пусто.

                    Подскажите пример. Я вывожу данные на главной странице, последние новости/изменения.
                      Василий Наумкин
                      15 сентября 2013, 13:55
                      0
                      А надо параметр &to=`[[+id]]`

                      Это не я придумал — это хлебные крошки строятся, как бы, от корня к ресурсу.
                        Павел Левин
                        15 сентября 2013, 14:30
                        0
                        Да, так работает.
                        [[!pdoCrumbs? &limit=`3` &showCurrent=`0` &to=`[[+id]]`]]
                          Павел Левин
                          15 сентября 2013, 14:38
                          0
                          А планируется ли передача класса через параметр для шаблона tplWrapper?, а то там зашит «breadcrumbs» и делать другой чанк ради класса, не знаю…

                          и еще вопрос, как заменить стрелочку (которая меж ними)?
                            Василий Наумкин
                            15 сентября 2013, 15:55
                            0
                            Посмотри в параметры сниппета, почитай описание.

                            Я и так уже все сделал, давай дальше сам?
                              Павел Левин
                              15 сентября 2013, 21:50
                              0
                              Я видел. Просто внес предложение и всё.
          shelder14
          07 августа 2017, 18:11
          1
          0
          [[#[[+parent:parent]].uri]]
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            16