Как обернуть несколько масивов в снипете в чанк?

Я делаю вот так

foreach ($resources1 as $k => $res1) {
    
    $resource1 = $res1->toArray();
    $output .= $modx->getChunk($tpl1,$resource1);
           
              foreach ($resources2 as $k => $res2) {
    
                           $resource2 = $res2->toArray();
                           $output .= $modx->getChunk($tpl2,$resource2);
                      
                           foreach ($resources3 as $k => $res3) {
    
                                            $resource3 = $res3->toArray();
                                            $output .= $modx->getChunk($tpl3,$resource3);


                             } $output .= $modx->getChunk($tpl4,0);

             } $output .= $modx->getChunk($tpl5,0);

} 
return $output;


Получается мы делаем двойную работу: в 1 и 2 масиве мы делаем 2 чанка, чанк открытия и чанк закрытия.

А хотелось бы сделать 1 чанка, для каждого масива и что бы в каждой чанке сразу обворачивал масив, как например в wayfander там когда меню выводим мы делаем чанк внутри него выводиться масив.
    [[+wf.wrapper]]
Слава Саленок
18 августа 2016, 04:23
modx.pro
1 074
0

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

Сергей Шлоков
18 августа 2016, 08:19
0
Жесткая конструкция. Даже при небольшом количестве ресурсов тормоза будут серьёзные. Я так понимаю, что подразумевается конструкция —
Раздел
    Подраздел
         Ресурсы
Используйте pdoMenu.
    Слава Саленок
    18 августа 2016, 09:36
    0
    нет там пользовательские таблицы, и каждый цикл это отдельная таблица со своими условиями, это не весь код, это только часть, там есть ещё и getcoletion с условиями. это схематично я код привел.
      Сергей Шлоков
      18 августа 2016, 10:30
      +1
      Для начала импортозамещайте getResources на pdoTools и используйте его методы getCollection и getChunk (он не лезет в базу за чанком при каждом вызове, а берёт его из памяти).
      Получается что-то типа такого
      foreach ($resources1 as $res1) {
         $output2 = '';
          foreach ($resources2 as $res2) {
              $output3 = '';
              foreach ($resources3 as $res3) {
                  $output3 .= $pdoFetch->getChunk($tpl3,$res3);
              }
              $res2['wrapper'] = $output3;
              $output2 .= $pdoFetch->getChunk($tpl2, $res2);
          }
          $res1['wrapper'] = $output2;
          $output .= $pdoFetch->getChunk($tpl1, $res1);
      } 
      return $output;
      }
      Ну и соответственно в чанки $tpl1 и $tpl2 нужно добавить плейсхолдер [[+wrapper]] в нужное место
      // Чанк $tpl1
      <div class="level1">
      	...
      	[[+wrapper]]
      </div>
      Если чанки простые, можно использовать INLINE чанки.
      Как-то так. Может «прям разработчики» что-нибудь допилят.
        Слава Саленок
        18 августа 2016, 12:22
        0
        Ну спасибо дружище помог, я почти дошёл до этого)))))
    Слава Саленок
    18 августа 2016, 09:38
    0
    Нужно прям совет разработчика кто с таким сталкивался. При разработке своего компонента.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      5