Организация каталога

Здравствуйте, уважаемые участники проекта!

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

Есть документ «Услуги», который содержит дочерние документы с услугами. Дочерний документ представляет собой Название и TV параметр с кодом услуги. К примеру, «Чистка ковров» и TV параметр «100». Грубо говоря, это некий справочник, который связивает кодовое обозначение услуги и название.

Есть организации, которые в TV параметре содержат перечисление услуг через запятую, 100,101,102.
Необходимо на странице организации вывести перечень услуг, которая она оказывает, но не только код, а и название самой услуги.

Чешу голову и думаю как это лучше сделать.
Игорь Павлов
07 мая 2015, 14:34
modx.pro
858
0

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

Павел Романов
07 мая 2015, 20:04
+1
Сам в PHP ноль, но по идее должен сработать такой костыль )):
<?php
$array = explode(",", $services);
foreach ($array as $value) 
{
    $y = $modx->runSnippet('pdoResources',array(
    'parents'=>100,
    'limit'=>0,
    'includeTVs'=> ''.$field.'',
    'tpl'=>'@INLINE [[+pagetitle]], ',
    'tvFilters'=>''.$field.'==='.$value.''
));
    $out .= $y;
}
return mb_substr($out, 0, -1);
100 тут — ID док-та «Услуги».
И, естественно, нужен pdoTools.

Ну и вызываете:
[[!Snippet?
&services=`[[*TV_у_компании]]`
&field=`TV_у_услуги`
]]
    Игорь Павлов
    08 мая 2015, 12:00
    0
    Я сам не обогнал в развитии Буратино в этом вопросе :)

    Вызываю сниппет, но ничего не происходит, журнал ошибок пуст :(

    Вот небольшая схема текущей структуры


      Павел Романов
      08 мая 2015, 12:14
      +1
      pdoTools установлен?
      Если да, то делаете сниппет «getServices»:
      <?php
      $array = explode(",", $services);
      foreach ($array as $value) 
      {
          $y = $modx->runSnippet('pdoResources',array(
          'parents'=>1,
          'limit'=>0,
          'includeTVs'=> 'tv-code',
          'tpl'=>'@INLINE [[+pagetitle]], ',
          'tvFilters'=>'tv-code==='.$value.''
      ));
          $out .= $y;
      }
      return mb_substr($out, 0, -1);

      А на странице организации вызываете:

      [[!getServices? &services=`[[*tv-code-list]]`]]

      Но я бы вообще по-другому сделал.
      В TV tv-code-list у организаций просто бы перечислял ID тех услуг, которые нужны. То есть не 100,101, а 2,3.
      Тогда вообще ничего мудрить не придется — просто вызываете любой сниппет, который поддерживает параметр &resources и скармливаете ему этот TV:
      [[pdoResources?
      &parents=`1`
      &tpl=`@INLINE [[+pagetitle]]`
      &resources=`[[*tv-code-list]]`
      &limit=`0`
      &outputSeparator=`, `
      ]]
      и т. д.
      Игорь Павлов
      08 мая 2015, 12:37
      0
      Да, pdoTools установлен
      Опять журнал пуст как и страница с результатами

      Но я бы вообще по-другому сделал.
      В TV tv-code-list у организаций просто бы перечислял ID тех услуг, которые нужны. То есть не 100,101, а 2,3.
      Тогда вообще ничего мудрить не придется — просто вызываете любой сниппет, который поддерживает параметр &resources и скармливаете ему этот TV:
      Коды нужны, так как пользователь зная код может искать организации по нему
        Павел Романов
        08 мая 2015, 12:41
        0
        Тогда киньте в личку или на romanov_frilans.ru доступ к админке — гляну.
        Павел Романов
        08 мая 2015, 13:28
        +1
        Все работает. Вы просто услуги не опубликовали )).
        Отписал в почту.
          Игорь Павлов
          08 мая 2015, 15:57
          0
          Большое спасибо!

          А можно ли полученные данные записать в TV параметр данного документа?
            Павел Романов
            08 мая 2015, 16:26
            0
            Есть setTVValue:
            $resource = $modx->getObject(‘modResource’, ID страницы);
            $resource->setTVValue(‘ID нужного TV’, ‘значение, которое нужно вписать’);
            $resource->save();
            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
            9