Twig включает с повторной визуализацией - PullRequest
0 голосов
/ 07 мая 2020

Я хочу включить какой-то шаблон и добавить его при нажатии кнопки (до js), и мне нужно, чтобы каждый включенный шаблон имел уникальный идентификатор.

Вот logi c, где я добавляю templates:

<button type="submit" id="addTranslationFields">Add translations</button>
// and js
$('#addTranslationFields').on('click', function (event) {
   event.preventDefault();
   event.stopPropagation();

   let part = `{% include 'translationPart.twig' with {'languages': languages,}%}`;
   $('.table tbody').append(part);
});

Вот как я генерирую uuid в translationPart.twig

    {% set uuid = uuid() %}
    {{ uuid }}

Проблема в том, что UUID одинаков для всех созданных шаблонов. Я понимаю, почему это происходит, это bz twig сгенерировано на стороне сервера, и в момент генерации он видит только одно включение. Но есть ли возможность перерисовывать включенный шаблон для каждой новой включенной копии? Или, может быть, какой-то другой способ установить разные UUID для каждого из включенных шаблонов.

Обновлено

uuid() - это настраиваемая функция ветки

$twig->addFunction(
    new TwigFunction(
        'uuid',
        static function(): string {
             return Uuid::uuid4()->toString();
        }
    )
);

1 Ответ

1 голос
/ 07 мая 2020

Вы можете достичь этого с помощью ajax вызовов или замены строки .

замены строки

Twig template (translationPart.twig)

{% set uuid = '#_SOME_STRING_TO_REPLACE_#' %} 
{{ uuid }}

Javascript

<button type="submit" id="addTranslationFields">Add translations</button>
// and js
$('#addTranslationFields').on('click', function (event) {
   event.preventDefault();
   event.stopPropagation();

   let generatedUuid = generateUuidByJavascript();

   let part = `{% include 'translationPart.twig' with {'languages': languages,}%}`.replace('#_SOME_STRING_TO_REPLACE_#', generatedUuid);
   $('.table tbody').append(part);
});

Uuid js может использоваться для генерации uuid.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...