XF 2.1 Переменные в macro

Версия XenForo
2.1

john_j

Проверенные
Сообщения
422
Решения
8
Реакции
133
Баллы
745
В шаблоне есть макро конструкции типа этого:

Код:
<xf:macro name="n1">
... $a1
</xf:macro>

...

<xf:macro name="n2" />
...
<xf:macro name="n3"  />
... $x1
</xf:macro>

Возможно ли как-то использовать переменную $a1 там, где $x1 ?
 
Возможно ли как-то использовать переменную $a1 там, где $x1 ?
Передайте его явно.
HTML:
<xf:macro name="n1" arg-a1="!">
    {$a1}
</xf:macro>

<xf:macro name="n2">
    ...
</xf:macro>

<xf:macro name="n3" arg-x1="!">
    <xf:macro name="n1" arg-a1="{$x1}" />
</xf:macro>
 
Последнее редактирование:
Ну так покажите, что вы пробовали. Тут не форум гадалок

Хотел из шаблона thread_view передать переменную{$thread.title} в lightbox_macros

В thread_view написал
Код:
<xf:macro template="lightbox_macros" name="myname" arg-mytitle="{$thread.title}" />

Теперь, если в начале lightbox_macros создать macro

Код:
<xf:macro name="myname" arg-mytitle="!">
</xf:macro>

То в нем {$thread.title} появляется.
Но естественно только внутри этого macro

А мне ее нужно вставить сюда:

Код:
<xf:macro name="single_image" arg-canViewAttachments="!" arg-id="!" arg-src="!" arg-dataUrl="" arg-containerZoom="1"
    arg-alt=""
    arg-styleAttr=""
    arg-alignClass="">

    <xf:macro name="setup" arg-canViewAttachments="{$canViewAttachments}" />

    <div class="lbContainer lbContainer--inline {$alignClass}" title="{$alt|for_attr}"
        data-xf-init="lightbox"
        data-lb-single-image="1"
        data-lb-container-zoom="{$containerZoom}"
        data-lb-trigger=".js-lbImage-{$id}"
        data-lb-id="{$id}">
        <xf:if is="{$containerZoom}">
            <div class="lbContainer-zoomer js-lbImage-{$id}" data-src="{$src}" aria-label="{{ phrase('zoom')|for_attr }}"></div>
        </xf:if>
      
--->    {$thread.title} 
      
      
        <img src="{$src}" data-url="{$dataUrl}" class="bbImage" data-zoom-target="1" {{ $alt ? 'alt="' . $alt|for_attr . '"' : '' }} style="{$styleAttr}" />
    </div>
</xf:macro>


Пробовал из thread_view сразу передавать аргументы в macro name="single_image" - не передаются
И не передаются внутри шаблона
 
Конечно пробовал, разные варианты
Причем если в macro name="setup" добавляю аргумент, даже переменная шаблона не создается
Если в name="single_image" добавляю, переменная создается, но не передается ее значение.
 
Покажите полностью, что и где Вы меняли. Желательно - итоговые фрагменты кода с правками.
Понятно точно, что Вы что-то где-то теряете и не вписываете, отсюда и эффект.
 
А с фига ли она должна создаться, если Вы её не объявили в декларации макроса?
Я ещё раз повторю: покажите полностью весь код, который Вы правили и то, к чему он пришёл.
У меня есть стойкое ощущение, что Вы сам макрос не привели к виду:
HTML:
<xf:macro name="single_image" arg-canViewAttachments="!" arg-id="!" arg-src="!" arg-dataUrl="" arg-containerZoom="1"
    arg-alt=""
    arg-styleAttr=""
    arg-alignClass=""
    arg-mytitle="">

    <xf:macro name="setup" arg-canViewAttachments="{$canViewAttachments}" />

    <div class="lbContainer lbContainer--inline {$alignClass}" title="{$alt|for_attr}"
        data-xf-init="lightbox"
        data-lb-single-image="1"
        data-lb-container-zoom="{$containerZoom}"
        data-lb-trigger=".js-lbImage-{$id}"
        data-lb-id="{$id}">
        <xf:if is="{$containerZoom}">
            <div class="lbContainer-zoomer js-lbImage-{$id}" data-src="{$src}" aria-label="{{ phrase('zoom')|for_attr }}"></div>
        </xf:if>
      
        {$mytitle}
      
      
        <img src="{$src}" data-url="{$dataUrl}" class="bbImage" data-zoom-target="1" {{ $alt ? 'alt="' . $alt|for_attr . '"' : '' }} style="{$styleAttr}" />
    </div>
</xf:macro>
 
arg-mytitle="" - добавлял
переменная создается, но не получает значение от этого
<xf:macro template="lightbox_macros" name="single_image" arg-mytitle="{$thread.title}" />
 
Последнее редактирование:
Значит неправильно передаёте.
Догадываюсь )
А как правильно ?

Просто все варианты я уже удалил.
Напрямую из thread_view тоже пробовал.
В существующие macro не передается, в новый отдельный - передается.
 
Последнее редактирование:
А как правильно ?
В самом макросе объявляете возможность получения такой переменной и её использование по аналогии, как я продемонстрировал выше.
Передаёте значение в вызов макроса. Если это значение из переменной - не забываем обрамить в скобки, чтобы компилятор поставил раскрытие выражения с передачей результата в макрос.
По итогу, Вы должны получить макрос из этого поста, и такой вызов:
HTML:
<xf:macro template="lightbox_macros" name="single_image" arg-canViewAttachments="..."
    /** ... */
    arg-mytitle="{$thread.title}" />
 
Последнее редактирование:
{{ dump($thread) }} - перед вызовом макроса. (да-да, топовый способ дебага)
Только ни в коем случае не делайте этого на продакшне, иначе можно случайно слить пользователям данные от базы.
А если сильно хочется - заворачивайте в условие.
 
Значит переменной $thread или свойства title у него нет. Вот почему Вы раньше не могли сказать, что выводится null?
Если делаю и передаю в новый отдельный macro, то переменная передается.
Не передается только в этот существующий macro

Я уже делал некоторые изменения в шаблонах с помощью macro. Все работает, а вот именно этот ни в какую. Поэтому и спрашиваю варианты.

В общем, если не получится - забью на него.
Если сможешь, сделай платно, закину на пивасик.
 
Последнее редактирование:
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу