Как в twig шаблоне получить данные из переменной, в название которой нужно подставить значение из другой переменной?

Ссылка скопирована
1 ответ

Есть строчка кода из tpl шаблона:

<?php echo isset(${'oth_bank_bill_bank' . $language['language_id']}) ? ${'oth_bank_bill_bank' . $language['language_id']} : ''; ?>

<?php echo isset(${'oth_bank_bill_bank' . $language['language_id']}) ? ${'oth_bank_bill_bank' . $language['language_id']} : ''; ?>

Как вот тоже самое сделать в twig шаблоне?

Дополнительно:

Просто пофилософствую немного. Может быть, это даст вам какие-то идеи.
Зачем вообще нужно было вводить в обиход нашей прекрасной PHP-экосистемы какие-то сторонние шаблонные языки? Ведь PHP и так прекрасно сочетается с HTML: расставил вопросики со знаками "больше" и "меньше", да и работает.
И второй вопрос: почему у PHP такая плохая репутация? Ведь лично я считаю, что современному PHP ни Python, ни JavaScript даже в подмётки не годятся.
Ответ на оба вопроса: чудовищный говнокод, который стали писать люди, мешая как попало логику и отображение. Исправить баг в этой куче из функций, циклов, ветвлений, перемешанных с развесистым HTML, было просто невозможно. И наш PHP заработал репутацию очень плохого языка.
И вот тогда умные люди решили: а что если мы придумаем для PHP отдельный язык шаблонов, который будет максимально урезан, и программистам придётся не просто отделять HTML от PHP, но и хорошенько подготавливать переменные для этих шаблонов, ведь даже несложную логику на этом языке шаблонов писать очень больно. Это решение (и некоторые другие) настолько улучшило PHP код, что язык ожил, стал развиваться и снова стал нравиться людям, которые постоянно его улучшают.
Так вот... Может быть, вам подготовить все переменные для twig заранее? Чтобы не было вот этой боли?
Этот комментарий просто "на подумать"...

  • Виктор Кожухарь, сочетание пхп с хтмл – самое хреновое что произошло в этом языке.
    сейчас до многих людей наконец дошло для чего шаблонизаторы, а не спагетти–код.

    а хороший шаблонизатор не должен давать возможность исполнять произвольный код в шаблоне, только свой синтаксис.
    твиг из таких.

  • Виктор Кожухарь, мужик я не с нуля делаю, просто модуль переношу с 2 версии опенкарта, на третью
  • Kerm, И таки що, в опенкарте нельзя свои переменные в twig передавать?
    И ещё. Не забывайте в любых CMS чистить кэш после любых изменений.
  • Виктор Кожухарь, там суть в том что есть массив, в нем добавленные идентификаторы языков, языки какие сам клиент там определяет, добавляет. А есть массив с данными и там для в нем для каждого языка свои переводы и переменные типа name_1, name_2 где цифра в конце это язык, какие цифры там будут предсказать не возможно, в пыхе там не буду для сотни языков переменные указывать свои и в шаблоне потом так же делать) Я уже переделал естественно в пыхе, но просто думал узнать может для общего развития в том числе, возможно ли такое в твиг шаблоне сделать.
  • Kerm, Можете попробовать плясать от глобального массива _context
    Вот есть что-то похожее на стэке. Там в первом ответе как раз всё хорошо расписано.
    https://stackoverflow.com/questions/24697313/how-t...
    Но я ещё раз вам рекомендую перенести эту логику в PHP
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Мария Код Ответ

    Для того чтобы получить данные из переменной, название которой нужно подставить значение из другой переменной в Twig шаблоне, можно воспользоваться функцией attribute. Эта функция позволяет обращаться к свойствам объекта или элементам массива, используя динамическое имя.

    Пример использования функции attribute:

    {% set mainVariable = 'foo' %}
    {% set foo = {'bar': 'baz'} %}
     
    {{ attribute(_context, mainVariable).bar }}

    {% set mainVariable = 'foo' %} {% set foo = {'bar': 'baz'} %} {{ attribute(_context, mainVariable).bar }}

    В данном примере мы сначала устанавливаем значение переменной mainVariable равным 'foo', а затем создаем массив foo с элементом 'bar' равным 'baz'. Затем мы используем функцию attribute и передаем ей _context (специальную переменную, содержащую все данные шаблона) и значение переменной mainVariable. Функция attribute получает значение переменной mainVariable ('foo') и обращается к элементу 'bar' массива foo, выводя его значение 'baz'.

    Таким образом, используя функцию attribute, мы можем динамически обращаться к переменным в Twig шаблоне, и получать нужные данные, даже если название переменной формируется из другой переменной.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно