On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • Âñåì ïðèâåò!
    âîò çäåñü http://modxcms.com/forums/index.php/topic,6107.0.html ÿ èçëîæèë êðàòåíüêî, êàê ìîæíî çàþçàòü setPlaceholder è getChunk.

    ñòîëêíóëñÿ ñî ñëåäþùåé ïðîáëåìîé. åñòü òàêîé ñíèïïåò:

    // ïîëó÷àþ ïîäðàçäåëû, ñòàíäàðòíàÿ ôóíêöèÿ
    $children = $modx->getActiveChildren($pid, 'menuindex', 'ASC', 'id, pagetitle, description, alias, longtitle, menutitle, introtext');
    
    // ïîäñ÷èòûâàþ äåòåé
    $c = count($children);
    
    // äåëàþ öèêë äëÿ âûâîäà
    for($x=0; $x<$c; $x++) 
     {
    
       $id = $children[$x]['id'];
       $pagetitle = $children[$x]['pagetitle'];
       
       $modx->setPlaceholder('id', $id);
       $modx->setPlaceholder('title', $pagetitle);
      
       $output .= $modx->getChunk($chunk); 
     
    }
      return $output;
    


    íî âîò òóò-òî è çàñàäà, òàê êàê â öèêëå, êàê ÿ ïîíèìàþ, âñ¸ ìàññèâû -- è $pagetitle, è modx->setPlaceholder(’title’, $pagetitle), a âîò getChunk -- íåò, ò.å. ìíå $c ðàç âûâîäèòñÿ ÷àíê, íî ñ âõîäíûìè ïàðàìåíòðàìè ñ ïîñëåäíåãî öèêëà.

    ìîæíî â öèêë çàñóíóòü, ê ïðèìåðó, $output .= $modx->getPlaceholder(’title’); -- âñ¸ íîðìàëüíî, ïîëó÷àåì $c ðàçíûõ $pagetitle. ïîêîïàë äîêóìåíòàöèþ, äà, òàê è åñòü, getPlaceholder -- array, à âîò getChunk -- íåò.

    èëè ÿ òóïëþ ñî ñòðàøíîé ñèëîé è ïðè÷èíà â ÷¸ì -òî äðóãîì? grin

    Ðåøåíèå ïðîáëåìû

    ÿ òóò íèæå ñàì ñå îòâå÷àë, ÷òî ïðîáëåìà â òîì, ÷òî ÷àíê íå ïàðñèòñÿ, â ÷¸ì è âñÿ çàñàäà, ïðîáëåìà ðåøàåòñÿ ñëåäóþùèì îáðàçîì (ïðîãðàììåðû, ïîïðàâüòå ìåíÿ, ïîæàëóéñòà, à òî ÿ íå âàðþ â PHP, íàêîñÿ÷èòü ìîãó smiley ):

    åñòü ôóíêöèÿ $modx->setPlaceholder ($fields, $values), åñòü $modx->getChunk($name) -- æåëàþùèå ìîãóò çàëåçòü â ïàðñåð è ãëÿíóòü, ÷¸ äà êàê smiley

    êîðî÷å, â öèêë íàäî âñòàâèòü ñëåäóþùåå:
       $a = $modx->getChunk($chunk);
       $fields = array ('[+id+]', '[+title+]');
       $values = array ($id,$title);
       $output .= str_replace ($fields, $values, $a); 
    


    âðîäå, ðàáîòàåò:)
      [img]http://jurist-info.ru/pic/rrr.jpg[/img]

      Безжалостный пияр!
      Artima -- неуч!
      Осторожно: преступная локализация -- modx-cms.ru
      Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

      Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
    • ïîêîâûðÿë åù¸, ïðîáëåìà âîò â ÷¸ì: ÷àíê íå ïàðñèòñÿ! èíûìè ñëîâàìè, òàê èëè èíà÷å, îí ïåðåäà¸ò â ñíèïïåò êàêîå-íèòü ïîëå òèïà [+field+], êîòîðîå îòäà¸òñÿ ïàðñåðó, à ïàðñåð óæå ïîäàñòàâëÿåò òóäà ïîñëåäíåå âû÷èñëåííîå çíà÷åíèå $field. ê ïðèìåðó, ñ òàêèì æå óñïåõîì ìû ìîæåì âîîáùå íå âñòàâëÿòü ÷àíê â ñíèïïåò, ìîæåì âûçâàòü åãî ïîñëå ñíèïïåòà, âñòàâèâ â ñòðàíèöó {{chunk}}, ýôôåêò áóäåò òîò æå.
      ÿ ïîêà íå ïîíÿë, êàê ðåøèòü ïðîáëåìó, íàäî ïîêîâûðÿòü ditto, íî òàì ÷òî-òî íàâåð÷åíî ñ øàáëîíàìè tpl è ò. ï... åñòü êàêàÿ-òî âíóòðåííÿ ôóíêöèÿ $modx->parseChunk -- ïûòàþñü ïîíÿòü, çà êèì îíà:)

      yentsun, ìîæåò, ó òÿ áóäåò âîçìîæíîñòü ïîèíòåðåñîâàòüñÿ ó Âèêà, êàê ìîæíî ðåøèòü ïðîáëåìó smiley ÿ á ñàì, êàíåøíà, íî ÿ êàêèì-òî äðóãèì àãëèöêèì âëàäåþ smiley ìåíÿ íå âñåãäà ïîíèìàþò íàòèâíûå íîñèòåëè smiley

        [img]http://jurist-info.ru/pic/rrr.jpg[/img]

        Безжалостный пияр!
        Artima -- неуч!
        Осторожно: преступная локализация -- modx-cms.ru
        Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

        Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
      • Я даже не знаю как объяснить... smiley

        Представь себе, цикл выводит несколько раз подряд содержимое чанка:
        [+title+]
        [+pagetitle+]
        ------------
        [+title+]
        [+pagetitle+]
        ------------
        [+title+]
        [+pagetitle+]
        ------------
        ...

        Как после этого парсер поймет, какой из title-ов ему надо заменить на какое значение? Значения плейсхолдеров задаются до парсинга документа. Если дважды задать значения одному плейсхолдеру, то возьмется последний вариант. Так что тут все неверно. Вот, что надо:

        // получаю подразделы, стандартная функция
        $children = $modx->getActiveChildren($pid, 'menuindex', 'ASC', 'id, pagetitle');
        
        // Получаю чанк
        $tpl=$modx->getChunk($chunk);
        
        // делаю цикл для вывода
        foreach($children as $child) 
         {
           $new_record=$tpl;
           
           // делаю цикл по всем полям документа
           foreach($child as $field=>$value) 
              $new_record = str_replace("[+$field+]", $value, $new_record);
        
           $output .=$new_record;  
        }
        
        return $output;
        • grin grin grin

          òû áû ïî÷àùå çäåñü ïîÿâëÿëñÿ, ñýêîíîìèë áû ìíå êó÷ó âðåìåíè grin

          äà, â êîíöå êîíöîâ ÿ ïîíÿë, êàê è ÷òî ïðîèñõîäèò , íî âîò êàê ðåøèòü ïðîáëåìó, î÷åíü äîëãî ñîîáðàæàë. ðåøèë òàêè, ðåøåíèå âûøå èçëîæèë, íî òâî¸ ðåøåíèå ìíå íðàâèòñÿ áîëüøå, ñïàñèáî áîëüøîå, âçÿë íà âîîðóæåíèå... âñ¸ îò òîãî, ÷òî, ïîâòîðÿþñü, ÿ íå âàðþ â php, à äåëàþ âñ¸, òóïî êîâûðÿÿ ïàðñåð, ïî÷èòûâàÿ äîêóìåíòàöèþ.

          ñïàñèáî çà ïîìîùü. wink
            [img]http://jurist-info.ru/pic/rrr.jpg[/img]

            Безжалостный пияр!
            Artima -- неуч!
            Осторожно: преступная локализация -- modx-cms.ru
            Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

            Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun
          • ой...а что это за каракули?
              http://modx.ru - российская поддержка MODx
              http://newscup.ru - экспериментальный проект
              http://yentsun.com - персональный сайт
            • опенагату надо принудительно выставить в браузере автоопределение кодировки smiley
                "Und wenn du lange in einen Abgrund blickst, blickt der Abgrund auch in dich hinein."

                Не используйте Revo для "просто сайтов". Используйте Evo

                Who can defeat the Russian bear?
              • gospoda, u menja i stoit avtoopredelenie, west-eu (ISO). tolku-to, kada srabatYvaet, kada net. i poprobujte sdelat’ quickedit svoego posta smiley
                  [img]http://jurist-info.ru/pic/rrr.jpg[/img]

                  Безжалостный пияр!
                  Artima -- неуч!
                  Осторожно: преступная локализация -- modx-cms.ru
                  Баштанник Андрей -- мегапрограммер из Белоруссии и поедатель говна, очень критично настроенный молодой человек!

                  Дисклеймер для общительных: даю сам себе право транслировать в открытый эфир содержание лички, just for fun