XF 2.3 Галочка в виджете для решённых вопросов, либо их удаление из виджета

Версия XenForo
2.3.7

CHEL74

Проверенные
Сообщения
60
Решения
2
Реакции
18
Баллы
15
В списке тем решённые вопросы отмечаются галочкой. Возникла идея реализовать это и для виджетов, чтобы перед названием решённой темы была галочка (может даже для этого уже готовый плагин есть).

Что касается самостоятельной реализации, в шаблоне thread_list_macros нашёл следующее:
HTML:
<xf:extension id="thread_type_question_solved">
  <li>
    <i class="structItem-status structItem-status--solved" aria-hidden="true" title="{{ phrase('solved')|for_attr }}"></i>
    <span class="u-srOnly">{{ phrase('solved') }}</span>
  </li>
</xf:extension>

Модифицировать нужно как я понял widget_new_threads:
HTML:
<h4 class="block-header">
  <a href="{{ link('threads', $thread) }}">{$thread.title}</a>
</h4>

Но вот как именно, моих знаний уже не хватит.



Альтернативой будет удаление решённого вопроса из виджета. Возможно, это даже лучший вариант. Но тут я не знаю, можно или нет так.
 
Последнее редактирование:
Решение
у меня виджет новых сообщений в темах, другой получается.
Шаблон: thread_list_macros
Ключ модификации: Придумайте
Тип поиска: Простая замена
Найти:
HTML:
            <xf:if is="$thread.isUnread()">
                <a href="{{ link('threads/unread', $thread) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>{{ prefix('thread', $thread) }}{$thread.title}</a>
            <xf:else />
                <a href="{{ link('threads/post', $thread, {'post_id': $thread.last_post_id}) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>{{ prefix('thread', $thread) }}{$thread.title}</a>
            </xf:if>
Заменить:
HTML:
<xf:if is="$thread.isUnread()">
    <a href="{{ link('threads/unread', $thread) }}"...
Модификация шаблона widget_new_threads
Ключ модификации: Придумайте
Тип поиска: Простая замена
Поиск:
HTML:
<a href="{{ link('threads', $thread) }}">{$thread.title}</a>
Заменить:
HTML:
<a href="{{ link('threads', $thread) }}">
    <xf:if is="$thread.discussion_type == 'question' && $thread.type_data.solution_post_id">
        <xf:fa icon="fa-check-circle" title="{{ phrase('solved')|for_attr }}" />
        <span class="u-srOnly">{{ phrase('solved') }}</span>
    </xf:if>
    {$thread.title}
</a>


Модификация шаблона thread_list_macros
Ключ модификации: Придумайте
Тип поиска: Простая замена
Поиск:
HTML:
<a href="{{ link('threads', $thread) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>{{ prefix('thread', $thread) }}{$thread.title}</a>
Заменить:
HTML:
<a href="{{ link('threads', $thread) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>
    <xf:if is="$thread.discussion_type == 'question' && $thread.type_data.solution_post_id">
        <xf:fa icon="fa-check-circle" title="{{ phrase('solved')|for_attr }}" />
        <span class="u-srOnly">{{ phrase('solved') }}</span>
    </xf:if>
    {{ prefix('thread', $thread) }}{$thread.title}
</a>

Альтернативой будет удаление решённого вопроса из виджета. Возможно, это даже лучший вариант.
Писать только плагин, если делать модификацию шаблона, то не получится это сделать нормально, потому что это скрытие только на уровне шаблона. По дефолту виджет показывает 5 тем, если из них будет 2 темы с решением, то будет показано 3 темы, он не добирает новые темы взамен скрытых
 
Kokiyo, большое спасибо! Принцип ясен, но похоже, я не тот шаблон виджета указал, ничего не произошло.

widget_new_threads - это новые темы? А у меня виджет новых сообщений в темах, другой получается. И что-то я пока не понимаю, какой именно тут шаблон нужен для моего случая.

В целом, перенести эту логику проблем нет теперь. Главное, понять, где его шаблон.

Модификация шаблона thread_list_macros
В листе тем как раз есть галочки. Я его в пример привёл именно поэтому вначале. Но как там FA иконка реализована, я так и не понял.

P. S.: Тестово попробовал модификацию применить, тоже ничего не произошло.
 
у меня виджет новых сообщений в темах, другой получается.
Шаблон: thread_list_macros
Ключ модификации: Придумайте
Тип поиска: Простая замена
Найти:
HTML:
            <xf:if is="$thread.isUnread()">
                <a href="{{ link('threads/unread', $thread) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>{{ prefix('thread', $thread) }}{$thread.title}</a>
            <xf:else />
                <a href="{{ link('threads/post', $thread, {'post_id': $thread.last_post_id}) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>{{ prefix('thread', $thread) }}{$thread.title}</a>
            </xf:if>
Заменить:
HTML:
<xf:if is="$thread.isUnread()">
    <a href="{{ link('threads/unread', $thread) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>
<xf:else />
    <a href="{{ link('threads/post', $thread, {'post_id': $thread.last_post_id}) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>
</xf:if>
    <xf:if is="$thread.discussion_type == 'question' && $thread.type_data.solution_post_id">
        <xf:fa icon="fa-check-circle" title="{{ phrase('solved')|for_attr }}" />
        <span class="u-srOnly">{{ phrase('solved') }}</span>
    </xf:if>
    {{ prefix('thread', $thread) }}{$thread.title}
</a>
 
Заказал себе плагин для скрытия решённых вопросов, поэтому теперь частично не актуальны мне иконки. Оставлю здесь их немного модифицированный вариант, может пригодится кому.

Принцип такой, если вопрос решён, в виджете новых сообщений ставится зелёная галочка. Если вопрос закрыт без решения, ставится серый замок. Если вопрос открыт, но без решения - красный вопросительный знак.

Данные для модификации шаблона

Шаблон:
thread_list_macros

Тип поиска: Простая замена

Найти:
HTML:
<xf:if is="$thread.isUnread()">
                <a href="{{ link('threads/unread', $thread) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>{{ prefix('thread', $thread) }}{$thread.title}</a>
            <xf:else />
                <a href="{{ link('threads/post', $thread, {'post_id': $thread.last_post_id}) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>{{ prefix('thread', $thread) }}{$thread.title}</a>
            </xf:if>

Заменить:
HTML:
<xf:if is="$thread.isUnread()">
    <a href="{{ link('threads/unread', $thread) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>
<xf:else />
    <a href="{{ link('threads/post', $thread, {'post_id': $thread.last_post_id}) }}" {{ !$thread.isSearchEngineIndexable() ? 'rel="nofollow"' : '' }}>
</xf:if>
    <xf:if is="$thread.discussion_type == 'question'">
        <xf:if is="$thread.type_data.solution_post_id">
            <xf:fa icon="fas fa-check" class="solved" title="{{ phrase('solved')|for_attr }}" />
            <span class="u-srOnly">{{ phrase('solved') }}</span>
        <xf:elseif is="!$thread.discussion_open" />
            <xf:fa icon="fas fa-lock" class="closed" title="{{ phrase('closed')|for_attr }}" />
            <span class="u-srOnly">{{ phrase('closed') }}</span>
        <xf:else />
            <xf:fa icon="fas fa-question" class="unsolved" title="{{ phrase('unsolved')|for_attr }}" />
            <span class="u-srOnly">{{ phrase('unsolved') }}</span>
        </xf:if>
    </xf:if>
    {{ prefix('thread', $thread) }}{$thread.title}
</a>

extra.less:
CSS:
// Цвета иконок статуса тем вопросов
.solved { color:#8BC34A; }
.unsolved { color:#E67E22; }
.closed { color:#BBBBBB; }
 
Последнее редактирование:
Современный облачный хостинг провайдер | Aéza
Назад
Сверху Снизу