Output filter to get TV display name - tvLabel does not work on pdoResources

В бд попадают записи: GD, GL, GR и другие

Список одиночный выбор тв например Возможные значения
Гренада==GD||Гренландия==GL||Греция==GR||Грузия==GE
Два года назад уже кто-то задавал этот вопрос, но ответа на него не дали.

На выходе должно получится название страны типа «Греция», но выходит только «GR»
[[+tv.vendor_address:getTvDisplayName]]
[[#[[+id]].vendor_address:tvLabel]]
[[+tv.vendor_address:tvLabel]]
R2m0x94 (Vasily)
12 мая 2020, 12:25
modx.pro
973
+1
Поблагодарить автора Отправить деньги

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

Андрей
12 мая 2020, 13:55
+2
[[pdoResources?
    &parents=`0`
    &includeTVs=`vendor_address`
    &tvPrefix=``
    &tpl=`test.tpl`
]]

test.tpl:
[[+vendor_address:tvLabel]]

Всё работает, выводит Греция и т.п.
    Михаил
    27 мая 2021, 09:17
    0
    Неа, не работает, тоже вот столкнулся.
    Если интересно, вот вызов
    [[pdoResources?
            &tpl=`itemarh`
            &limit=`100`
            &parents=`7`
            &offset=`1`
            &includeTVs=`tagis`
    ]]
    и в чанке
    [[+publishedon:date=`%d.%m.%Y`]] / [[+tv.tagis:tvLabel]]
    Просто выводит
    1||2||4
    и даже не указание разделителя в параметрах вывода не реагирует
      Роман
      27 мая 2021, 09:31
      0
      Все нормально работает. Возможно у вас просто кэш.
        Андрей
        27 мая 2021, 10:44
        0
        Задай пустой tvPrefix и будет работать:
        [[pdoResources?
                &tpl=`itemarh`
                &limit=`100`
                &parents=`7`
                &offset=`1`
                &includeTVs=`tagis`
                &tvPrefix=``
        ]]
        В чанке:
        [[+publishedon:date=`%d.%m.%Y`]] / [[+tagis:tvLabel]]
          Михаил
          27 мая 2021, 11:17
          0
          нет, так тоже не работает. Точнее работает
          [[+tagis]]
          , но выводит конечно просто цифры
          А вот с
          [[+tagis:tvLabel]]
          ничего.

          Найду в чем дело, отпишусь тут )
            Андрей
            27 мая 2021, 11:27
            0
            Вот для интереса сделал на тестовом сайте:

            s26240.h8.modhost.pro/manager/
            s26240
            lC6YU7NlRxFt

            MODX 2.8.2, php 7.4, всё работает. Может в ТВшке что то не так заполнено?
              Михаил
              27 мая 2021, 11:57
              0
              хм… скопировал туда свои значения, и они и там не работают )) Может с цифрами проблема?
                Михаил
                27 мая 2021, 12:43
                0
                о, заработало там О_о
                ойду теперь со своим разбираться.

                Для ТВшки множественного выбора, ведь все тоже самое правильно будет?
                  Андрей
                  27 мая 2021, 13:25
                  0
                  Вероятно дело в кэше)

                  Для ТВшки множественного выбора, ведь все тоже самое правильно будет?
                  Возможно, надо тестить, ни разу не пробовал =)
                    Михаил
                    27 мая 2021, 15:07
                    0
                    нет, для множественного надо что то другое думать :)
                      Андрей
                      27 мая 2021, 16:37
                      0
                      Набросал на скорую руку. Поставь в параметрах вывода разделитель — ||. В чанке вызов сниппета:
                      [[!kvTV? &tvName=`[[+tagis2:tvLabel]]` &tvVal=`[[+tagis2]]`]]

                      Код сниппета:
                      <?php
                      $tvNames = explode('||', $tvName);
                      $tvValues = explode('||', $tvVal);
                      
                      $tvArr = array_combine($tvNames, $tvValues);
                      
                      foreach($tvArr as $n => $v) {
                         echo '<p><a href="/'.$v.'">'.$n.'</a></p>';
                      }

                      Возможно это топорно и неверный путь, но работает =) Можешь чекнуть на сайте выше, добавил там.
                        Михаил
                        09 июня 2021, 12:34
                        0
                        Привет! Запоздалое (уезжал) большое спасибо, да костыль небольшой, зато работает как надо!
                        R2m0x94 (Vasily)
                        09 июня 2021, 18:05
                        0
                        В моём случае мне хватило вывести так (в tv на админке для возможных значений в списке):
                        <?php
                        // [[!tvLabelnameCountry? &tvVal=`[[+tv.vendor_address]]`]]
                        $tvArr = explode('||', $tvVal);
                        
                        foreach($tvArr as $n => $v) {
                           echo strstr($v, '=', true);
                        }

                        А, так как задача с поставщиками и производителями перешла на ms2 в связке с ресурсами, то пришёл к такому результату, так как с id-шниками не стал заморачиваться, но потребовалось просто вывести страну [[+vendor.country]]:
                        <?php
                        /**
                         * Получаем страну производителя из настроек ms2 по имени $name. 
                         * Если используется для поставщика, то имя может отсутствовать, поэтому ничего не выводим.
                         * Если же необходимо получить по id, то 'name' заменить на 'id' (Тodo: Кастумизация)
                         * 
                         * $page = $modx->getObject('modResource', ['id' => 13]);
                         * $output = $page->get('pagetitle');
                         * 
                         * return $output;
                         * 
                         * Пример вызова:
                         * [[!msVendorCountry? &name=`{$purveyor | resource : "pagetitle"}`]]
                         * {'!msVendorCountry' | snippet : ['name' => $purveyor | resource : "pagetitle"]}
                         * 
                         */
                        
                        //$name = 'Sony';
                        $vendor = $modx->getObject('msVendor', ['name' => $name]);
                        if (!is_object($vendor)) {
                            return '';
                        }
                        $output = ', '.$vendor->get('country');
                        return $output;

                        Код чанка в чанке с mFilter2:
                        {if $_pls['tv.purveyor']!= ''}
                           {foreach $key as $purveyor index=$index}
                                {$purveyor | resource : "pagetitle"}{'!msVendorCountry' | snippet : ['name' => $purveyor | resource : "pagetitle"]}
                            {/foreach}
                        {/if}
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    13