Возможно ли заставить работать плейсхолдеры в зарегистрированном коде?

При регистрации кода при помощи:
cssToHead — регистрация CSS кода в шапке страницы
htmlToHead — регистрация произвольного HTML в шапке страницы
htmlToBottom — регистрация произвольного HTML в подвале страницы
jsToHead — регистрация javascript файла в шапке страницы. Если передать параметром true, то можно регистрировать сразу код.
jsToBottom — регистрация javascript в подвале страницы. Если передать параметром true, то можно регистрировать сразу код.
Или
$_modx->regClientCSS
$_modx->regClientScript
$_modx->regClientStartupHTMLBlock
$_modx->regClientHTMLBlock
плейсхолдеры ни в MODX-вварианте — [[+placeholder]] или [[*placeholder]], ни на Fenom — {$placeholder} НЕ РАБОТАЮТ. В исходном коде и на странице отображаются в неизменном виде.

Можно ли заставить работать плейсхолдеры в зарегистрированном коде?
Дмитрий
06 апреля 2019, 15:11
1
193
0

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

Дмитрий
07 апреля 2019, 19:42
0
Неужели проблема нерешаема?
Баха Волков
08 апреля 2019, 00:26
0
Скорее всего решаема, только вот проблема не озвучена. В системе есть настройка fix_your_problems, попробуйте его включить, вдруг поможет
    Дмитрий
    08 апреля 2019, 04:09
    0
    Вроде описал, что плейсхолдеры отображаются в неизменном виде.

    Например, если прописывать регистрацию кода в чанке, который относится к сниппету.

    Есть вызов сниппета, там прописано:
    'tplForm' => '@FILE chunks/my_chank.tpl'
    В этом чанке все нужные плейсхолдеры работают.

    Регистрирую в этом чанке код html и js, указанными выше способами. Прописываю в нем (регистрируемом коде) в нужных местах плэйсхолдеры. Код регистрируется там где мне нужно, однако плэйсхолдеры не работают — остаются в неизменном виде.
Сергей Шлоков
08 апреля 2019, 09:12
0
Вы хотите, чтобы MODX распарсил теги в яваскрипт файле?
    Дмитрий
    10 апреля 2019, 16:58
    0
    Нет не в файле а в регистрируемом коде, который находится в чанке. Плейсхолдеры в чанке работают, ниже в этом же чанке прописываю регистрацию кода, в котором плейсхолдеры не работают.

    Вот комментарии:
    modx.pro/help/17975#comment-109213
    modx.pro/help/17975#comment-109225
      Сергей Шлоков
      11 апреля 2019, 08:05
      0
      Вообще теги остаются только при аякс запросах.

      В Вашем случае логичнее всего предположить, что Вы выставляете теги несуществующих плейсхолдеров.
        Дмитрий
        11 апреля 2019, 16:38
        0
        Плейсхолдеры рабочие, в чанке они работают.

        Есть чанк — my_chank.tpl, в нем прописываю:
        <b>{$placeholder}</b> // выводит значение плейсхолдера
        
        {$_modx->regClientHTMLBlock('
        <b>{$placeholder}</b> // тег плейсхолдера  выводится в неизменном виде - {$placeholder}
        ')}
        или так:
        {'<b>{$placeholder}</b>' | htmlToBottom : true} // тоже в неизменном виде
        {'<b>{$placeholder}</b>' | htmlToBottom} // тоже в неизменном виде
          Сергей Шлоков
          11 апреля 2019, 17:22
          1
          +1
          {('<b>' ~ $placeholder ~ '</b>') | htmlToBottom : true}
            Дмитрий
            11 апреля 2019, 19:32
            0
            Сергей, благодарю.
            Так плейсхолдеры работают.
            Дмитрий
            11 апреля 2019, 20:30
            0
            Сергей, а не подскажешь, возможно ли вывести значения плейсхолдеров без регистрации кода, прописав их в главном шаблоне?
            Может не так выражусь, типа сделать их глобальными или хотя бы чтобы они работали не только в чанке, но и в главном шаблоне.
              Александр Мельник
              11 апреля 2019, 21:01
              0
              Дмитрий, мы тут все наблюдаем, зачем же Вам понадобилось парсить плейсхолдеры, которые внутри регистрируемого через методы кода, а Вы сразу же как нашлось решение, спрашиваете — а
              возможно ли вывести значения плейсхолдеров без регистрации кода
              Расскажите?
                Дмитрий
                11 апреля 2019, 21:14
                0
                Я недавно знаком с MODX, можно сказать, только учусь. Поэтому интересуюсь и такой возможностью.
                  Александр Мельник
                  11 апреля 2019, 22:27
                  0
                  А где вы отрыли вообще эту информацию о методах
                  $_modx->regClientCSS
                  $_modx->regClientScript
                  $_modx->regClientStartupHTMLBlock
                  $_modx->regClientHTMLBlock
                  и зачем вообще решили ими пользоваться? Я специально зашел на страницу документации по fenom
                  docs.modx.pro/komponentyi/pdotools/parser#%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80-Fenom
                  и нашел упоминание только об одном методе, значит вы явно отрыли их не на этой странице.
                  Я могу ошибаться, но считаю, что 99 процентов разработчиков вообще ими не пользуется для сайтов. Эти методы скорее нужны для написания компонентов и регистрации каких-то строго определенных скриптов.
                    Дмитрий
                    11 апреля 2019, 22:55
                    0
                    … и нашел упоминание только об одном методе, значит вы явно отрыли их не на этой странице.
                    Конечно не на этой странице, а вот здесь:
                    docs.modx.com/revolution/2.x/developing-in-modx/basic-development/snippets/adding-css-and-js-to-your-pages-through-snippets
                      Александр Мельник
                      12 апреля 2019, 07:41
                      0
                      Ну там видите как озаглавлена страница? Как подключать css и js изнутри созданного вами сниппета.
                      И это имеет смысл, поскольку обращение идет к объекту приложения $modx, который доступен только внутри сниппета.

                      А вот использовать эти методы для объекта $_modx на мой взгляд бесполезно, хотя мало ли…
    Sem
    Sem
    08 апреля 2019, 10:04
    0
    Как подключаете Вы — так работать не будет! MODX своим парсером, на сколько я знаю, не заглядывает в подключаемые таким образом js файлы, соответственно никаких плейсхолдеров не будет внутри.
    А вот если создать ресурс с типом js и внутри писать js-код с динамикой, а потом этот ресурс подключать по ссылке — вот так работать будет. Но сам такой подход уже попахивает не очень.
    Дмитрий
    08 апреля 2019, 12:09
    0
    Я же не писал, что файлы регистрирую. В файлах мне не нужно чтобы работало. Интересует в самом зарегистрированном коде.

    Регистрирую так:
    {$_modx->regClientHTMLBlock('
    <script>
    здесь js-код с плейсхолдерами
    </script>
    ......
    здесь html код с плейсхолдерами
    '}

    Однако плейсхолдеры не работают.
      Дмитрий
      24 мая 2019, 13:10
      0
      Вот так можно попробовать
      {$modx->setPlaceholder('namePlaceholder','text')}
      
      {$_modx->regClientScript('
      <script type="text/javascript">
          console.log("' ~ $_modx->getPlaceholder('namePlaceholder') ~ '");
      </script>')}
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.