XF 2.0 Как скрыть дополнительные поля тем

Виталий Васильевич

Проверенные
Сообщения
2,146
Решения
28
Реакции
1,378
Баллы
11,330
Здрасти всем .. как можно воплотить такое ...

Хочу сделать вот такого

screenshot-www.belovo42.ru-2018-02-03-14-30-21.png

При получении поля т.е. адрес и телефоны будут видны после описание проблем, а это уже чревато последствиями.
Возможно ли переменными после заполнения их скрыть от простых смертных?
 
Можно создать аддон и расширить возможности доп. полей. Там есть настройки "Кто может редактировать" к ним добавить "Кто может видеть эти поля, а от кого скрыть после ввода значения".

Виталий Васильевич, гляньте - [SXF] Core.
 
Последнее редактирование модератором:
Нужно скрыть эти поля на странице отображения темы? Можно и без аддона. Вернусь домой опишу подробно

Если кратко, то в макросе вывода кастомных полей надо в цикле проверять на ID поля и не выводить, если группа пользователя не та.
 
Последнее редактирование:
  • Мне нравится
Реакции: Hope
Итак.

В шаблоне custom_fields_macros нужно найти следующий код:
HTML:
<xf:macro name="custom_fields_values"
    arg-type="!"
    arg-group="!"
    arg-set="!"
    arg-onlyInclude="{{ null }}"
    arg-additionalFilters="{{ [] }}"
    arg-valueClass="pairs pairs--columns pairs--fixedSmall">

    <xf:foreach loop="$xf.app.getCustomFields({$type}, {$group}, {$onlyInclude}, {$additionalFilters})" key="$fieldId" value="$fieldDefinition">
        <xf:if is="$fieldDefinition.hasValue({$set.{$fieldDefinition.field_id}})">
            <dl class="{$valueClass}">
                <dt>{$fieldDefinition.title}</dt>
                <dd>
                    <xf:macro name="custom_field_value"
                        arg-definition="{$fieldDefinition}"
                        arg-value="{$set.{$fieldDefinition.field_id}}" />
                </dd>
            </dl>
        </xf:if>
    </xf:foreach>
</xf:macro>

В цикле <xf:foreach... перебираются все кастомные поля. Достаточно внутри цикла делать проверку на группу пользователя и не отображать кастомное поле, если условие не выполнено.
Код внутри тега <xf:foreach замените на:
HTML:
<xf:if is="$fieldId == 'testID' && !$xf.visitor.isMemberOf(4)">
    <xf:else />
    <xf:if is="$fieldDefinition.hasValue({$set.{$fieldDefinition.field_id}})">
        <dl class="{$valueClass}">
            <dt>{$fieldDefinition.title}</dt>
            <dd>
                <xf:macro name="custom_field_value"
                          arg-definition="{$fieldDefinition}"
                          arg-value="{$set.{$fieldDefinition.field_id}}" />
            </dd>
        </dl>
    </xf:if>
</xf:if>

Вся магия в первой строчке. Вместо testID должен быть ID поля темы. Вместо 4 в isMemberOf(4) ID группы. Пользователи не из этой группы поле видеть не будут.

Вот так выглядит тема для админа:
result_as_admin.png

А вот так для гостя:
result_as_guest.png
 
Последнее редактирование:
Вместо 4 в isMemberOf(4) ID группы. Пользователи не из этой группы поле видеть не будут.

Для сведений. Так же можно указать и массив ID групп. Например: isMemberOf([1,4,9]).
 
Последнее редактирование:
Познавательно все конечно, но как по мне, лучше вынести отдельно нужное поле, задать ему нужные условия и стили и не трогать дефолтного вывода.
 
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу