We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 41718
    • 3 Posts
    artyomov.anton Reply #1, 14 years ago
    Доброго времени суток.

    Столкнулся с непонятной проблемой в ModX Evo

    Имеется чанк PHONE2
    , bla bla bla


    Имеется сниппет BlaRepl
    <?php
    if(!isset($ph2)) return false;
    echo str_replace(",","",$ph2);
    ?>


    Вызываю сниппет:
    [[BlaRepl? &ph2=`{{PHONE2}}`]]


    Проблема: Получаю строку с запятой. str_replace не заменил запятую.
    Если я в сниппете явно указываю переменную и инициализирую её
    <?php
    $ph2 = ', bla bla bla';
    if(!isset($ph2)) return false;
    echo str_replace(",","",$ph2);
    ?>


    то возвращается
     bla bla bla
    , т.е. нормально, без запятой.

    В чем дело???
      • 16278
      • 928 Posts
      У меня ваши коды работают нормально. Дело может быть с кэшом? Работает-ли замена, если сниппет вызывается без каширования?
      [!BlaRepl? &ph2=`{{PHONE2}}`!]

      :) KP

      P.S. Вообще лучше выводить результат сниппета через return, а не через echo.
        • 41718
        • 3 Posts
        artyomov.anton Reply #3, 14 years ago
        Спс. Я и через return уже пробовал. Отключаю кэширование. Запятую обрезает.
        Но теперь новая проблемка. Для примера я здесть привел строку
        , bla bla bla

        Но в действительности я использую строку чанка
        , +7 (926) <span style="color:#ee4831;">983-05-65</span>


        Теперь сниппет возвращает
         +7 (926) <span styl</div>


        Обрезал половину HTML. Изменить в чанке не вариант, т.к. на многих страницах этот чанк используется как есть. Что то не то творится на выходе сниппета. [ed. note: artyomov.anton last edited this post 14 years ago.]
          • 16278
          • 928 Posts
          Можно взять текст чанка внутри сниппета, а не через параметр, с помощью API функции getChunk(). Так:
          <?php
          $chunk = $modx->getChunk($ph2);
          if (!empty($chunk)) {
              $output = str_replace(",", "", $chunk);
          }
          return $output;
          ?>

          Вызов сниппета содержит теперь название чанка:
          [!BlaRepl? &ph2=`PHONE2`!]

          Этим образом обойдется без всяких вредных взяимодействий с парсером.

          ;) KP
            • 41718
            • 3 Posts
            artyomov.anton Reply #5, 14 years ago
            Оууу... Но почему же я сразу не догадался так попробовать. Это работает! Спасибо kp52.