pdotools + tvsuperselect

Здравствуйте!

Есть дерево след. вида:

Врачи
— Врач 1 (ТВ тэг Уролог || Хирург)
— Врач 2 (ТВ тэг Хирург)
— Врач 3 (ТВ тэг ЛОР)

Нужно вывести врачей по категориям, из выше изложенного дерева должно получится:

Хирург — Врач 1, Врач 2
Уролог — Врач 1
Лор — Врач 3 и тд.

Подскажите пожалуйста, как решить данную задачу посредством pdotools и tvsuperselect?

P.S. делаю из-за того, что в Collections нельзя вывести ТВ параметры (изображении) во втором вложении

как в примере,

Врачи
— Уролог
  |____ Врач 1
  |____ Врач 2
— Хирург
  |____ Врач 1
— Лор
  |____ Врач 3

и не сделать Вывод ТВ в документах (кастомазации форм) в как в примере ilyaut.ru/tips-and-tricks/customization-of-forms-in-modx-revolution/

Выводит только на предмет проверки, что документ является потомком «parent» первого уровня.
Антон Грошев
21 ноября 2017, 15:24
modx.pro
1
2 285
0

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

Павел Романов
21 ноября 2017, 20:10
0
Параметр фильтрации:
[[pdoResources?
&tvFilters=`tvname==%Хирург%`
...
]]

Как вставлять в вызов слово «Хирург» зависит от реализации каталога. Если есть страница с таким pagetitle, то на ней так:
&tvFilters=`tvname==%[[*pagetitle]]%`

Если через GET-запрос (page.html?doctor=Хирург), то так:
&tvFilters=`tvname==%[[!#GET.doctor]]%`

В Collections есть кнопка «Открыть», которая открывает следующий уровень (если речь об этом):
    Антон Грошев
    22 ноября 2017, 00:47
    0


    так и сделано, мне нужен первый уровень, т.к. в настройке форм параметр «Ограничивающее поле:parent» работает только с первым уровнем, а в коллекции вывод ТВ с типом «изображение» не выводит данные ТВ изображение если открыть второй уровень, как показано на картинке.

    Фильтры как работают я знаю.

    Мне нужно перебрать по тегам и вывести врачей по специальностям по отдельности, т.к. врач может иметь несколько специальностей, пример я выше указал.
      Zulya
      09 апреля 2023, 10:34
      1
      0
      Здравствуйте!
      Когда я добавляю &tvFilters=`companytype==mfo` к запросу pdoResources, то ничего не выводит, убираю tvFilters, снова выводит список ресурсов. Подскажите пожалуйста, где моя ошибка, почему tvFilters не работает? Спасибо!

      [[pdoResources:default=`Ничего не найдено`?
      			&parents=`47`
      			&includeTVs=`address,tel,logo,companytype`
      			&tvFilters=`companytype==mfo`
      			&processTVs=`1`
      			&limit=`10`
      			&loadModels=`easycomm`
      			&where=`{"class_key":"modDocument"}`
      			&leftJoin=`{
      			"ecThread": {
      			"class": "ecThread",
      			"on": "modResource.id = ecThread.resource"
      						}
      					   }`
      			&select=`{
      			"modResource": "*",
      			"ecThread": "ecThread.rating_simple AS rating, ecThread.count AS reviews"
      				}`
      			&tpl=`topcompanies`
      			&sortby=`{"rating":"DESC", "reviews":"DESC"}`
      			]]
        Zulya
        09 апреля 2023, 16:17
        1
        0
        Надеюсь, кому-нибудь пригодится. Оказывается если в ТВ стоит значение по умолчанию, то при нем tvFilters не будет работать, даже после сохранения и смены на другое значение, не пишется в бд. Я убрала значение по умолчанию, и вручную указала значения ТВ в ресурсах. После все сработало.
      Антон Грошев
      27 ноября 2017, 18:47
      0
      Вывожу всех врачей у кого есть значение в ТВ, используя компонент TvSuperSelect
      {$_modx->runSnippet('pdoPage', [
      	'element' => 'tvssResources',
      	'tv' => '7',
      	'tags' => $_modx->runSnippet('pdoResources' , [ 
      		'loadModels' => 'tvsuperselect','class' => 'tvssOption',
      		'sortby' => '{ "value":"ASC" }'
      		'groupby' => 'value',	'tpl' => '@INLINE {$value}', 'tplWrapper' => '@INLINE {$output}',
      		'limit'=>0,'outputSeparator'=>'||'
      		]),
      	'parents' => 10,  'limit' => 0,
      	'tpl' => '@INLINE <div>{$pagetitle}{$tags}</div>',
          ])}
      Подскажите пожалуйста как вывести значение в tvsuperselect в ввиде:
      Врачи (Коллекция)
      — Уролог ( tvsuperselect)
      |____ Врач 1 (документ)
      |____ Врач 2 (документ)
      — Хирург (tvsuperselect)
      |____ Врач 1 (документ)
      — Лор ( tvsuperselect)
      |____ Врач 3 (документ)
        Антон Грошев
        29 ноября 2017, 19:00
        0
        Есть контент:



        и таблица modx_tvss_options c заполненными значениями компонента tvsuperselect:



        Код выборки:
        {'pdoResources' | snippet : [ 'parents' => 10, 'limit' => 0,
        'groupby' => 'val', 'sortby'=> 'val', 'sortdir' => 'ASC',
        'select' => '{"modResource":"id,pagetitle","tvss":"count(value) as cnt, value as val"}',
        'innerJoin'=>'{ "tvss": {"class":"tvssOption","alias":"tvss","on":"tvss.resource_id=modResource.id"}}',
        'tpl'=> '@INLINE {$val} ({$cnt}) <p>{$pagetitle}</p>', 
         'showLog'=> 1
        ]}
        Лог:
        0.0001180: pdoTools loaded
        0.0000310: xPDO query object created
        0.0005209: innerJoined tvssOption as tvss
        0.0000041: Grouped by val
        0.0001049: Added selection of modResource: SQL_CALC_FOUND_ROWS `id`, `pagetitle`
        0.0000241: Added selection of tvssOption: count(value) as cnt, value as val
        0.0017450: Processed additional conditions
        0.0020249: Added where condition: modResource.parent:IN(10,14,15,18,25,30,19,26,24,16,17), modResource.published=1, modResource.deleted=0
        0.0000939: Sorted by val, ASC
        0.0013371: SQL prepared "SELECT SQL_CALC_FOUND_ROWS `modResource`.`id`, `modResource`.`pagetitle`, count(value) as cnt, value as val FROM `modx_site_content` AS `modResource` JOIN `modx_tvss_options` `tvss` ON tvss.resource_id=modResource.id WHERE  ( `modResource`.`parent` IN (10,14,15,18,25,30,19,26,24,16,17) AND `modResource`.`published` = 1 AND `modResource`.`deleted` = 0 )  GROUP BY val ORDER BY val ASC "
        0.0014529: SQL executed
        0.0001609: Total rows: 5
        0.0000231: Rows fetched
        0.0002599: Created inline "modChunk" with name "1530b8d8924dfc8cb34a1caeaa0cf9b0"
        0.0185289: Compiled Fenom chunk with name "modchunk/1530b8d8924dfc8cb34a1caeaa0cf9b0"
        0.0190470: Returning processed chunks
        0.0251350: Total time
        6 291 456: Memory usage


        Результат:

        Лор (3)
        Врач4

        Уролог (1)
        Врач5

        Фонитар (1)
        Врач3

        Хирург (1)
        Врач6

        Эндокринолог (1)
        Врач1

        Подскажите пожалуйста как сделать выборку join, так чтобы выводило id документов с одинаковыми значениями в superselect, не могу сообразить как сделать несколько id значения, который имеют tvsuperselect:

        Например:

        Лор (3)
        Врач4 (25), Врач7 (26), Врач5 (15)

        Уролог (1)
        Врач5

        Фонитар (1)
        Врач3

        Хирург (1)
        Врач6

        Эндокринолог (1)
        Врач1

          Антон Грошев
          30 ноября 2017, 12:57
          1
          0
          Решил следующим образом:

          {'pdoResources' | snippet : [ 'parents' => 10, 'limit' => 0,
          'groupby' => 'val', 'sortby'=> 'val', 'sortdir' => 'ASC',
          'select' => '{"modResource":"id,pagetitle","tvss":"count(value) as cnt, value as val, (select GROUP_CONCAT(resource_id) as t from modx_tvss_options where value = val) as idv " }',
          'innerJoin'=>'[{"class":"tvssOption","alias":"tvss","on":"tvss.resource_id=modResource.id"}]',
          'tpl'=> '@INLINE {$val} ({$cnt}) <p>
          {set $ar = $idv |split}
          {foreach $ar as $row}
          [[#{$row}.pagetitle]]
          {/foreach}
          </p>', 
           'showLog'=> 1,
           'return' => 'null'
          ]}
            Прохор
            30 ноября 2017, 13:22
            0
            Всем доброго! Господа подскажите как вывести список всех тегов.
            [[!tvssTags?
            	&tv=`71`
            	&id=`[[+parent]]`
            	&pageId=`1485`
            	&tpl=`@INLINE <a class="btn btn-default btn-xs" href="[[+link]]" role="button"><i class="fa fa-tag" aria-hidden="true"></i> [[+tag]]</a> `
            ]]
            Такой код не отрабатывает…
              Антон Грошев
              30 ноября 2017, 14:09
              0
              попробуй:

              [[tvssCloud? &id=`[[+parent]]` &tv=`71` &tpl=`@INLINE <a class="btn btn-default btn-xs" href="[[+link]]" role="button"><i class="fa fa-tag" aria-hidden="true"></i>[[+tag]]</a>`]]
                Прохор
                30 ноября 2017, 14:55
                0
                Точна! Не заметил что имеется еще один снипет. в доках про это ни слова.
              Максим
              03 февраля 2018, 18:37
              0
              Почему при выводе тегов через pdoPage не работает toPlaceholder?
                Максим
                03 февраля 2018, 18:43
                0
                Поправил сниппет, заработало.
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                12