1. Приветствуем Вас на неофициальном форуме технической поддержки XenForo на русском языке. XenForo - коммерческий форумный движок от бывших создателей vBulletin, написанный на PHP.

1.4.x Тэги <xen:set> и {xen:raw}

Тема в разделе "Советы, руководства и видео-уроки", создана пользователем Георгий Шевченко, 09.05.2015.

Загрузка
  1. Георгий Шевченко

    Георгий Шевченко Местный

    Регистрация:
    07.12.13
    Сообщения:
    44
    Симпатии:
    27
    Версия XF:
    1.4.7
    Вступление:
    И так всем привет, не давно столкнулся с такой проблемой, что сильно много кода в одном шаблоне.
    Хотелось бы как-то свести к минимуму. Казалось бы, возьми создай просто шаблоны, и разбей их на куски, но даже таким образом выходило сильно много кода, а плодить куча шаблонов, тоже не есть хорошо. И тут начал смотреть шаблоны, как же все таки выводят так много информации с помощью различных тэгов XenForo. И наткнулся на тэги <xen:set> и {xen:raw}. Ладно меньше болтавни, больше кода.
    :-D

    Тэг <xen:set>:
    Вы наверное сталкивались с такими переменными скажем так {$user}, но никто наверно не задавался вопросом как оно работает. По большей части а зачем, работает и работает это главное.
    Но мне стало интересно как же это. И тут я начал экспериментировать!

    Я попробовал вывести так

    Код:
    <xen:set var="$gx_user">
    Георгий Шевченко
    </xen:set>
    
    {$gx_user}
    Все отлично вывело. Теперь мы могли пихать этот {$gx_user}, куда нам хотелось. Но я не остановился, начал проверять все возможные варианты.
    set1.png

    Потом я попробовал вывести язык готовый. К примеру {xen: phrase gx_xenforo}
    Код:
    <xen:set var="$xenforo">
    {xen:phrase gx_xenforo}
    </xen:set>
    
    {$xenforo}
    Вот сама фраза готовая.
    set2-1.png
    И вот что он мне вывел.
    set2.png

    Я подумал, боже так хорошо. А если делать заготовки для стилей.
    К примеру у меня не сколько элементов будут ВСЕГДА одного цвета. То почему бы не сделать одну переменную которая будет
    отвечать за это.

    Я попробовал сделать так
    Код:
    <xen:set var="$xenforo" value="{xen:phrase gx_xenforo}" />
    <xen:set var="$gx_color" value="red" />
    <span style="color:{$gx_color};">{$xenforo}</span>
    
    И все получилось. А значит я так же могу манипулировать и цветом фона и прочим.Возможности безграничны.
    set-3.png

    Мне стало любопытно а проглотит ли он проверки xen:if , xen:elseif и xen:else
    Код:
    <xen:set var="$gender">
    <xen:if is="{$visitor.gender} == 'male' ">
    Мужык
    <xen:elseif is="{$visitor.gender} == 'female' " />
    Девушка
    <xen:else />
    Укажите пол
    </xen:if>
    </xen:set>
    
    {$gender}
    
    Смотрите сколько кода экономим, теперь можно {$gender} проверять пол пользователя.
    set-4.png

    Потом я попробовал вывести имя пользователя. Обычным {$visitor.username}
    Код:
    <xen:set var="$gx_username" value="Привет {$visitor.username}!">
    
    {$gx_username}
    
    Ага как видим, выводит. Все хорошо!
    set-5.png

    Но мне сталось интересно а можно ли вывести аватар с именем rich true.
    Код:
    <xen:set var="$gx_info">
    <xen:avatar user="$visitor" size="m" img="true" />
    <xen:username user="$visitor" rich="true" />
    </xen:set>
    
    {$gx_info}
    
    И тут он вывел мне как обычный текст. И я расстроился.:( Думал блин, ну как так.
    set-6.png

    И тут я начал пробовать вообще вставить любой элемент HTML
    Код:
    <xen:set var="$gx_info">
    <div>Тут текст какой-то!</div>
    </xen:set>
    
    {$gx_info}
    
    И опять мимо, выводит как есть.
    set-7.png
    И тут к нам приходит на помощь тэг {xen:raw}!

    Тэг {xen:raw}:
    Я попробовал завернуть его в {xen:raw}!
    Код:
    <xen:set var="$gx_block">
    <div style="background: red; padding: 10px; color:white;">{xen:phrase gx_xenforo}</div>
    </xen:set>
    
    {xen:raw $gx_block}
    
    Сработало! Все отлично!
    set-8.png

    Пробую снова вывести
    Код:
    <xen:set var="$gx_info">
    <xen:avatar user="$visitor" size="m" img="true" />
    <xen:username user="$visitor" rich="true" />
    </xen:set>
    
    {xen:raw $gx_info}
    
    Ура! Получилось!
    set-9.png

    Теперь с помощью этих 2 тэгов. Вы можете делать свои переменные. И манипулировать ими как вам хочется. На этом пожалуй всё.

    Автор: @Георгий Шевченко
     
    edka, Dmitriy Jurkin, Kolya groza morey и ещё 1-му нравится это.
  2. edka

    edka Активный пользователь

    Регистрация:
    23.06.13
    Сообщения:
    28
    Симпатии:
    2
    Интересно, а можно устанавливать переменные как массив?

    Проверил только что, в принципе можно задавать переменные таким образом: $myvar.one, $myvar.two
    Т.е. получается поддержка массивов работает )
     

Поделиться этой страницей