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


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




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 august 2016, 07:23    Слава Саленок   
0    240 0

Comments (5)

  1. Сергей Шлоков 18 august 2016, 08:19 # 0
    Жесткая конструкция. Даже при небольшом количестве ресурсов тормоза будут серьёзные. Я так понимаю, что подразумевается конструкция —
    Раздел
        Подраздел
             Ресурсы
    Используйте pdoMenu.
    1. Слава Саленок 18 august 2016, 09:36 # 0
      нет там пользовательские таблицы, и каждый цикл это отдельная таблица со своими условиями, это не весь код, это только часть, там есть ещё и getcoletion с условиями. это схематично я код привел.
      1. Сергей Шлоков 18 august 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 чанки.
        Как-то так. Может «прям разработчики» что-нибудь допилят.
        1. Слава Саленок 18 august 2016, 12:22 # 0
          Ну спасибо дружище помог, я почти дошёл до этого)))))
    2. Слава Саленок 18 august 2016, 09:38 # 0
      Нужно прям совет разработчика кто с таким сталкивался. При разработке своего компонента.
      You need to login to create comments.