Сборки серверов

СливПлатные

Новые сообщения

Сейчас онлайн

  • DenchikRox
  • y9olek
  • Darklol36
  • HScats1
  • tjkgeg
  • parnisha
  • toha
  • ytfly
  • XapBu
  • Hozxc
  • Lexa1231123
  • AhmetKaya
  • eqerre57889
  • imdas
  • fongbe50
  • zimbago
  • rseg23
  • fcPlugins
  • ZerthDev
  • cho_cho
  • destme
  • Prashdk
  • _Offlistid_
  • Mork
  • Polezno
  • deezzee777
  • dikdik
  • Shehiki
  • Sqwery
  • BlackCerot
  • ijdeoe
  • MrJohny
  • XCEL0038
  • spoonerboy33
  • ekilisra289
  • SIMBAY
  • hawahawahawa8888
  • nemory
  • Jek
  • wbdaAA
  • prorotyz3d
  • 01NeDeXD
  • Ilonmask222_2
  • Gendut
  • Blanche
  • Refrakus
  • Tieumiu
  • Hyperzed
  • namida
  • br1ckv73
  • LiSnow
  • Groundbreaking

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

youok
Доброго времени суток

Пытаюсь сделать вывод в разделах своего форума кнопок для возможности материально поблагодарить пользователя в определенных разделах (раздел обычного форума + раздел с статьями + раздел с вопросами и ответами на них).

1. Создал определенные поля для qiwi, boosty и т.п.
2. Начал пробовать вывести это всё в post_article_macros
3. Вывод пока что сформировал вот так:
PHP:
</br><b>Поблагоарить пользователя:</b>
                        <xf:XOR is="{{ $xf.visitor.Profile.custom_fields.boosty > 0}}">
                        <dl class="pairs pairs--justified fauxBlockLink">
                            <dd>
                                <p><a href="https://boosty.to/{{ $xf.visitor.Profile.custom_fields.boosty }}" target="_blank"><img alt="" src="https://mctalk.ru/icons/boosty.png" style="height:18px; width:15px" /></a>
                            </dd>
                        </dl>
                    </xf:if>

Единственное что никак не могу понять - как сделать условие где система будет проверять заполнено ли то или иное поле (например данные для QIWI) и если оно не заполнено - то система не выводит его а остальные заполненные отображает. Ну и если ни одно поле не заполнено - то не выводит ничего.
 
Решение
youok
Разобрался
В post_article_macros вывод данных дополнительных полей пользователей не везде срабатывает т.к. движок выцепляет по ним информацию (как я понял) только в части с выводом имени, звания и т.д.

Получается что вывести, например, в конце сообщения эти поля нельзя (без доп. правок).

Вставил свои поля после вывода информации (код после которого вставил своё):
HTML:
            <div class="message-articleUserStats">
                <ul class="listInline listInline--bullet">
                    <!--[XF:stats:start]-->
                    <li><dl class="pairs pairs--inline">
                        <dt>{{ phrase('messages') }}</dt>
                        <dd>{$user.message_count|number}</dd>...
youok
п.с. код на текущий момент скорее не совсем корректный указал. Это я уже там пытался логику проверки понять, но в итоге это не то что нужно.

Изначально код выглядел вот так:

PHP:
</br><b>Поблагоарить пользователя:</b>
                        <dl class="pairs pairs--justified fauxBlockLink">
                            <dd>
                                <p><a href="https://boosty.to/{{ $xf.visitor.Profile.custom_fields.boosty }}" target="_blank"><img alt="" src="https://**********/icons/boosty.png" style="height:18px; width:15px" /></a>
                            </dd>
                        </dl>
 
bobobo
Сейчас приведу тебе пример как сделано тут у нас. Так же расскажу про валидацию.

У нас каждый пользователь может указать ссылку на поддержку его на платформах.
То есть для пользователя создано дополнительные поле, где он может сам ввести всё что хочет.
К примеру: ресурс https://black-minecraft.com/resources/ultimateserverprotector.2160/
В этом ресурсе разработчик указал boosty.to, и валидация происходит именно на стадии добавления и редактирования поля пользователем.
То есть создан regex и выводится поле вот так:
HTML:
<xf:if is="$resource.User.Profile.CustomFields.donates AND $resource.User.Profile.CustomFields.donates.field_value">
<xf:button target="_blank" data-tippy-content="{$resource.User.Profile.CustomFields.donates.field_value}" href="{$resource.User.Profile.CustomFields.donates.field_value}" class="button--fullWidth pay_ME">{{ phrase('user_field_title.donates') }}</xf:button>
</xf:if>
Как ты можешь заметить, мы выводим это в ресурсах, поэтому проверяем именно автора ресурса на наличие заполненности у него доп. поля с донатом.
HTML:
<xf:if is="$resource.User.Profile.CustomFields.donates AND $resource.User.Profile.CustomFields.donates.field_value">
/// кнопка
</xf:if>
Так вот эта проверка как уже говорил ранее идёт на автора ресурса, для тем другое нужно.
Попробую воспроизвести у себя у себя и покажу что там получилось

Валидация ссылок​

Сама валидация ссылок происходит как я уже говорил через regex (Настройки для текстовых полей -> Регулярное выражение)
Код:
^https:\/\/(?:www\.)?(?:donationalerts\.com\/r\/[\w-]{3,32}\/?|qiwi\.com\/[pn]\/[\w-]{3,32}\/?|ko-fi\.com\/[\w-]{3,32}\/?|boosty\.to\/[a-zA-Z0-9_-]+(?:\/donate)?|donate\.qiwi\.com\/payin\/[\w-]{3,32}\/?|yoomoney\.ru\/to\/\d+|paypal\.me\/[\w-]{3,32})$
Следовательно, пользователю показываются какие возможны примеры, и идёт валидация ссылки.
 
bobobo
@yuok, В общем проверка осуществляется вот так:
PHP:
<xf:if is="{$user.Profile.custom_fields.donates}">
        код
    </xf:if>
Где donates, это название доп. поля.
Так же советую использовать не
PHP:
{{ $xf.visitor.Profile.custom_fields.boosty }}
А всё же
PHP:
{$user.Profile.custom_fields.donates.boosty}
Для вывода значения дополнительного поля. Так как $xf.visitor, это всё же обращение к юзеру, который в данный момент просматривает тему. С этим кодом проблем конечно не должно возникнуть, но даже если создавать для этого проверку, и сделать вот так:
PHP:
<xf:if is="{$xf.visitor.Profile.custom_fields.boosty}">
        // код
    </xf:if>
То он выведет именно доп. поле (если есть), пользователя который просматривает тему.

Это всё я тестировал на шаблоне message_macros, в post_article_macros не проверял, но думаю там тоже самое.
 
Последнее редактирование:
youok
@bobobo,
Не думал что получу на столько развёрнутый ответ :eyes:
Благодарствую за такое пояснение, теперь логика максимально понятна, осталось разобраться почему например тот же {$user.Profile.custom_fields.qiwi} не работает в post_article_macros:sweat_smile: (проверил этот метод в message_macros - работает безотказно)

Ушел разбираться
 
youok
Разобрался
В post_article_macros вывод данных дополнительных полей пользователей не везде срабатывает т.к. движок выцепляет по ним информацию (как я понял) только в части с выводом имени, звания и т.д.

Получается что вывести, например, в конце сообщения эти поля нельзя (без доп. правок).

Вставил свои поля после вывода информации (код после которого вставил своё):
HTML:
            <div class="message-articleUserStats">
                <ul class="listInline listInline--bullet">
                    <!--[XF:stats:start]-->
                    <li><dl class="pairs pairs--inline">
                        <dt>{{ phrase('messages') }}</dt>
                        <dd>{$user.message_count|number}</dd>
                    </dl></li>
                    <!--[XF:stats:after_messages]-->
                    <li><dl class="pairs pairs--inline">
                        <dt>{{ phrase('reaction_score') }}</dt>
                        <dd>{$user.reaction_score|number}</dd>
                    </dl></li>
                    <!--[XF:stats:after_likes]-->
                    <!--[XF:stats:after_reactions]-->
                    <xf:if is="$xf.options.enableTrophies">
                        <li><dl class="pairs pairs--inline">
                            <dt>{{ phrase('points') }}</dt>
                            <dd>{$user.trophy_points|number}</dd>
                        </dl></li>
                    </xf:if>
                    ТУТ МОЙ КОД
                <!--[XF:stats:end]-->
                </ul>
            </div>
        </div>
    </div>
</xf:macro>

Что у меня получилось с полями:
HTML:
                    </br>Поблагодарить пользователя:
                    <xf:if is="{$user.Profile.custom_fields.qiwi}"><xf:button class="button--qiwi" icon="">
                        <span class="button-text"><a href="{$user.Profile.custom_fields.qiwi}" target="_blank">QIWI</a> </span>
                    </xf:button></xf:if>
                    <xf:if is="{$user.Profile.custom_fields.boosty}"><xf:button class="button--boosty" icon="">
                        <span class="button-text"><a href="{$user.Profile.custom_fields.boosty}" target="_blank">Boosty</a> </span>
                    </xf:button></xf:if>
                    <xf:if is="{$user.Profile.custom_fields.yoomoney}"><xf:button class="button--yomooney" icon="">
                        <span class="button-text"><a href="{$user.Profile.custom_fields.yoomoney}" target="_blank">ЮMoney</a> </span>
                    </xf:button></xf:if>

К полям зацепил класс button и в core_button.less добавил свои стили для каждой
Пример QIWI:
CSS:
    &.button--qiwi
    {
        // block colors
        background-color: #ff8c00;
        color: #fff;
        font-weight: 600;
        padding-top: 5px;
        padding-right: 5px;
        padding-bottom: 5px;
        padding-left: 5px;
        .m-buttonBorderColorVariation(@xf-paletteColor2);

        &:hover,
        &:active,
        &:focus
        {
            background-color: #ff8c00cf;
            color: #fff;
        }
    }

В итоге получил:
1700468179328
Осталось подпилить напильником и готово. Главное что теперь вывод адекватно работает :smiley:
 
Решение

Похожие темы на Black-Minecraft.com

ВерхНиз