We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 20972
    • 19 Posts
    Столкнулся с такой проблемой где то уже встречалась но форуме необходимо в чанках иметь возможность использовать операторы <? IF ?> <? FOREACH ?> <? MD5 ?> и другие возможности. Способ который предлагали на форуме использование PHX мне не понравилось можно пытаться прикрутить к чанкам Smarty но на мой взгляд много работы ради такого пустяка.
    Я предлагаю использовать исполняемые чанки которые отличаются от простых только тем что будут заключены в такую конструкцию [% код чанка %]

    Примеры исполняемого чанка:
    Пример1:
    [%
    <?$login=get(’login’)?>
    <?if($login):?>
    пользователь прошел регистрацию (выдать браузеру)
    <?else:?>
    пользователь не прошел регистрацию (выдать браузеру)
    <?endif?>
    %]

    Пример2:
    [%
    <?#определение переменных шаблона?>
    <?$a=get(’a’)?>
    <?$c=getarr(’c’)?>
    <?#вывод шаблона?>
    <h2>[+pagetitle+] - [(base_url)][~[+id+]~]</h2>
    <?=$a?>
    Всего в массиве <?=$c->count?> элементов!
    Первый элемент [<?=$c->first->key?>]=><?=$c->first->value?>.
    Последний элемент [<?=$c->last->key?>]=><?=$c->last->value?>.
    <?foreach($c->arr as $key=>$val):?>
    [<?=$key?>]=><?=$val?>
    <?endforeach?>
    %]


    Из первого примера видно что первым делом необходимо определить переменные которые скрипт передал чанку делается это при помощи метода get(name) где name имя переменной взятое в кавычки.
    Дальше в шаблоне можно использовать переменную в нашем случае производим проверку $login на true можно отправить переменную на вывод используя конструкцию
    <?=$login?> - выдаст браузеру значение переменной $login.

    Возможные конструкции:

    <? Код ?> - аналогично синтаксису Smarty { Код }
    <?#комментарий?> - комментарий
    <?=$a?> - вывод в браузер переменной $a
    <?=md5($a)?> - вывод в браузер md5 переменной $a

    <?if(условие1):?>
    действие1
    <?elseif(условие2):?>
    действие2
    <?else:?>
    действие3
    <?endif?> - конструкция if

    <?foreach($arr as $key=>$val):?>
    [<?=$key?>]=><?=$val?>
    <?endforeach?> - конструкция foreach


    Приведенный выше синтаксис является “Альтернативным синтаксисом PHP” данный синтаксис описан в официальном руководстве к PHP. Синтаксис довольно простой, данный подход позволяет использовать в чанках все возможности PHP и обрабатывать все заранее объявленные переменные.

    Способ объявить переменную:

    $modx->setPlaceholder(’%login’,true);

    таким образом переменная задается стандартным для modx образом с единственным отличием перед именем необходимо поместить %.

    Если у кого-нибудь есть свои наработки не похожие на PHX, пишите. Если кому интересно моё решение пишите, скину файлы.
      • 785
      • 2,113 Posts
      Может, я и неправильно поступаю, но мне как-то проще написать сниппет на PHP, чем использовать чанки с расширенными возможностями. Впрочем, PHX я тоже не пользуюсь – пишу при необходимости сниппеты. Наверное, все-таки я совсем неправ grin.
        Создание сайтов на MODx, поддержка сайтов, поисковая оптимизация, программирование, копирайтинг
        Статьи о MODx, регулярно новые публикации
        • 26709
        • 4 Posts
        Хотя способ довольно интересный. Полезно,когда надо незначительно изменить чанк взависимости от ситуации. Зачем писать целый сниппет ради одной строчки ?:)
          • 19164
          • 1,215 Posts
          Если вы решили не утруждать себя разбираться с PHx и привыкли пользоваться чем-то другим, это не значит что PHx плох. Лично я активно им пользуюсь и нахожу достаточно функциональным. В случае недостатка функциональности всегда можно дописать собственные модификаторы. Конечно foreach там нет, но мне даже не придумать ситуацию, для которой бы это нужно было бы для использования в шаблоне и невозможно было бы обойтись другим способом.

          Обычно достаточно if then else. Для вывода чего то в цикле используется Ditto или Wayfinder.
            DirectResize 0.9 beta. PHPThumb, sets of configurations, configuration, binded to specific path. No backward compatibility. | DirectResize 0.9. PHPThumb, наборы параметров, параметры, привязанные к определенным путям. Без обратной совместимости.

            Unfortunately, DirectResize project is closed. If you want to continue development, PM me for access to project page on Google Code. К сожалению, проект DirectResize закрыт. Если вы желаете продолжить разработки, обращайтесь через ПМ для получения доступа к репозиторию на Google Code.

            [PLUGIN] DirectResize - as Maxigallery but for single images :: Download :: [url=http://modxcms.com/forums/index.php/topic,21490]