[Fenom] Динамические плейсхолдеры (и var-переменные) срабатывают только при первой загрузке страницы (когда она еще не закэширована)

Задаю в динамическом сниппете {'!get_country' | snippet} плейсхолдер с кодом страны:

Сниппет:
$modx->setPlaceholder('country_code', 'RU');
Вызываю данный сниппет на странице:
{'!get_country' | snippet}
{if $_modx->getPlaceholder('country_code') == 'RU'}
    Russia | {$_modx->getPlaceholder('country_code')}
{else}
    Other | {$_modx->getPlaceholder('country_code')}
{/if}
При первой загрузке страницы (пока ее нет в кэше) все срабатывает как положено.
Но при следующей загрузке страницы условие не срабатывает и при все том же коде 'RU' выдает «else» или наоборот… Странно как-то очень. Что с этим делать?

Может нужно каким-то образом (каким?) выводить и проверять некэшируемый плейсхолдер? Только как его сделать?
Fullstack
18 января 2022, 01:51
modx.pro
851
0

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

Fullstack
18 января 2022, 01:57
0
Более того!

Задаю внутри сниппета плейсхолдер
$modx->setPlaceholder('ttt', 'b');
Вывожу его на странице:
{if $_modx->getPlaceholder('ttt') == 'a'}
    <script>alert('ttt = a');</script>
{else}
    <script>alert('ttt else');</script>
{/if}
И у меня постоянно выводится, что «ttt = a» (вместо «ttt else»),
хотя я задаю значение плейсхолдера «b», а не «a».
    Fullstack
    18 января 2022, 02:08
    0
    Короче да. Fenom-шаблон скомпилировался и закэшировался. Меняю значение только в сниппете — шаблон реагирует так же, как и до этого, что в сниппете ни выставляй.

    Видимо условие закэшировалось вместе с шаблоном с тем значением, которое попало в кэш первый раз.
    Нужен некэшируемый вывод плейсхолдера, как в стандартном MODX: [[!+placeholder]]
      Fullstack
      18 января 2022, 18:27
      0
      Теперь стало работать. Но плейсхолдеры теперь не кэшируются вообще. Никакие. При первой загрузке страницы работают, а как она закэшировалась — пропадают :(((((
        Fullstack
        18 января 2022, 19:01
        0
        Что делать? Лог ошибок пустой

        Шаблон:
        {include 'head'}
        {'footer' | chunk : [ 'goals_mod' => '_dom' ]}
        Чанк head:
        {'MinifyX' | snippet : [
            'minifyCss' => '0',
            'minifyJs' => '1',
            'registerCss' => 'placeholder',
            'registerJs' => 'placeholder',
            'cssPlaceholder' => 'min_css',
            'jsPlaceholder' => 'min_js',
            'cssSources' => '',
            'jsSources' => '
            	assets/js/script.js
            ' 
        ]}
        Чанк footer:
        {'min_js' | placeholder} | {$_modx->getPlaceholder('min_js')} | $min_js
        Выводится " | | ". А при первой загрузке страницы все норм.
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          4