GRAV cms Twig доступ к определенному индексу массива в шаблоне темы yaml - PullRequest
0 голосов
/ 11 мая 2018

У меня есть созданная тема, в которой хранится некоторое значение конфигурации в файле конфигурации:

enabled: true
dropdown:
  enabled: true

motto: 'il desiderio di coltivare.'
color1: '#0522ff'
color2: '#ff0000'
custom_logo:
  user/themes/terretinte/images/ttlogoh.svg:
    name: ttlogoh.svg
    type: image/svg+xml
    size: 3416
    path: user/themes/terretinte/images/ttlogoh.svg

для доступа к пути custom_logo, который я использовал в ветке:

<img src="{{config.themes.terretinte.custom_logo|first.path}}" alt="Terre Tinte" width="160" height="38">

Myвопрос: это правильный путь?поскольку "config.themes.terretinte.custom_logo" возвращает массив ... я не могу просто указать значение индекса вместо первого?(т. е. в ситуации, когда мне нужно второе значение) Я попытался:

{{config.themes.terretinte.custom_logo[0].path}} -- doesn't work
{{config.themes.terretinte.custom_logo(0).path}} -- doesn't work
{{config.themes.terretinte.custom_logo|path}} -- doesn't work
{{config.themes.terretinte.custom_logo.path}} -- doesn't work

, как лучше всего получить доступ к указанному ключу в любой позиции, не повторяя цикл for for all?ключи?

Спасибо.

1 Ответ

0 голосов
/ 14 мая 2018

Ваш синтаксис YAML фактически создал подобъекты, а не список.На момент написания этого ответа у вас была запись YAML:

custom_logo:
  user/themes/terretinte/images/ttlogoh.svg:
    name: ttlogoh.svg
    type: image/svg+xml
    size: 3416
    path: user/themes/terretinte/images/ttlogoh.svg

Используя нотацию [], вы пытаетесь получить доступ к ней как к массиву, но на самом деле вы не создалимассив.Скорее, вы создали вложенную переменную.Я не совсем уверен, насколько хорошо веточка обрабатывает / в именах переменных, но, поскольку она не выдает ошибку, это, вероятно, хорошо.Исправление для этого будет немного меняться в зависимости от того, как вы хотите действовать.

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

Это кажется мне немного страннымчто тема будет иметь несколько логотипов.Если вы собираетесь использовать только первое, нет причин создавать массив.Это простое исправление.

custom_logo:
  name: ttlogoh.svg
  type: image/svg+xml
  size: 3416
  path: user/themes/terretinte/images/ttlogoh.svg

Одна строка user/themes/terretinte/images/ttlogoh.svg: была удалена, теперь мы можем получить доступ к каждой из переменных намного проще.

<img src="{{config.themes.terretinte.custom_logo.path}}" alt="Terre Tinte" width="160" height="38">

Есливам действительно нужно несколько логотипов в индексе

Как указано выше, использование текстового поля с : создает именованную переменную.Если мы просто удалим всю эту строку и заменим ее -, у нас теперь будет индексируемый массив.Добавьте столько -, сколько захотите.

custom_logo:
  -       
    name: ttlogoh.svg
    type: image/svg+xml
    size: 3416
    path: user/themes/terretinte/images/ttlogoh.svg

Вы действительно хотите именованные логотипы?

Я действительно могу вспомнить несколько случаев, когдаВы хотели бы несколько логотипов.При этом я не уверен, когда вы захотите увидеть их в массиве, в отличие от именованных переменных.Ниже приведен пример того, как у вас может быть несколько логотипов с именами, которые затем будут использоваться в веточке.

custom_logo:
  normal:
    name: ttlogoh.svg
    type: image/svg+xml
    size: 3416
    path: user/themes/terretinte/images/ttlogoh.svg
  black_and_white:
    name: ttlogoh_bw.svg
    type: image/svg+xml
    size: 3416
    path: user/themes/terretinte/images/ttlogoh_bw.svg

На них можно ссылаться как:

<img src="{{config.themes.terretinte.custom_logo.normal.path}}" alt="Terre Tinte" width="160" height="38">
<img src="{{config.themes.terretinte.custom_logo.black_and_white.path}}" alt="Terre Tinte" width="160" height="38">
...