Сменить сортировку по дате создания?

/latest (и всё остальное) выглядит примерно так:

Ответы показывают активность темы, а Активность — когда в ней что-то происходило в последний раз. Это полезные данные. Но Просмотры… это может быть интересно администраторам и автору темы (OP), но для обычного пользователя это ничего не значит — они не смотрят на это и не думают: «Ну, тема, наверное, неинтересная, раз её открыло так мало людей» (или наоборот).

Но если бы там указывали дату создания/начала, это сразу показывало бы, тема древняя или совершенно свежая.

Я сделал этот скриншот, потому что ответил в той теме. Я мог бы оставить всё как есть, если бы знал, что тема уже довольно старая. Так что, конечно, показ даты в обсуждениях — палка о двух концах, я это понимаю.

Думаю, это можно изменить с помощью компонента темы. Но насколько это сложно?

И под сложно я имею в виду… Найдётся ли кто-то, кто захочет сделать это бесплатно? :wink: Я не умею программировать. У меня степень PhD в области копипаста, и всё. И точно нет бюджета.

Но мне бы тоже хотелось узнать, я ли один думаю, что показ количества просмотров делается в основном из любопытства администраторов (мы можем получить логи и статистику просмотров гораздо лучше, например, через SQL) и просто для заполнения пустого места, и поэтому мы могли бы использовать это пространство немного эффективнее… более продуктивно :wink:

3 лайка

Привет, Jakke,

Не уверен, нужно ли тебе это еще, но держи!
Ты можешь заменить колонку «просмотры», переписав соответствующие шаблоны (topic-list-header и topic-list-item).

К сожалению, есть нюанс: тебе придется скопировать и вставить много исходного кода, который может работать некорректно в зависимости от твоей темы, плагинов или компонентов. Кроме того, возможно, тебе придется обновлять его, если Discourse обновит эти части.

Вот код, который ты можешь скопировать и вставить в компонент:

Head
<script type='text/x-handlebars' data-template-name='topic-list-header.raw'>
    {{~raw-plugin-outlet name="topic-list-header-before"~}}
    {{#if bulkSelectEnabled}}
      <th class="bulk-select topic-list-data">
        {{#if canBulkSelect}}
          {{raw "flat-button" class="bulk-select" icon="list" title="topics.bulk.toggle"}}
        {{/if}}
      </th>
    {{/if}}
    {{raw "topic-list-header-column" order='default' name=listTitle bulkSelectEnabled=bulkSelectEnabled showBulkToggle=toggleInTitle canBulkSelect=canBulkSelect canDoBulkActions=canDoBulkActions}}
    {{raw-plugin-outlet name="topic-list-header-after-main-link"}}
    {{#if showPosters}}
      {{raw "topic-list-header-column" order='posters' ariaLabel=(i18n "category.sort_options.posters")}}
    {{/if}}
    {{raw "topic-list-header-column" sortable=sortable number='true' order='posts' name='replies' ariaLabel=(i18n "sr_replies")}}
    {{#if showLikes}}
      {{raw "topic-list-header-column" sortable=sortable number='true' order='likes' name='likes' ariaLabel=(i18n "sr_likes")}}
    {{/if}}
    {{#if showOpLikes}}
      {{raw "topic-list-header-column" sortable=sortable number='true' order='op_likes' name='likes' ariaLabel=(i18n "sr_op_likes")}}
    {{/if}}
    {{raw "topic-list-header-column" sortable=sortable number='true' order='created' name='created' ariaLabel=(i18n "sr_created")}}
    {{raw "topic-list-header-column" sortable=sortable number='true' order='activity' name='activity' ariaLabel=(i18n "sr_activity")}}
    {{~raw-plugin-outlet name="topic-list-header-after"~}}
</script>

<script type='text/x-handlebars' data-template-name='list/topic-list-item.raw'>
    {{~raw-plugin-outlet name="topic-list-before-columns"}}
    
    {{#if bulkSelectEnabled}}
      <td class="bulk-select topic-list-data">
        <label for="bulk-select-{{topic.id}}">
          <input type="checkbox" class="bulk-select" id="bulk-select-{{topic.id}}">
        </label>
      </td>
    {{/if}}
    
    {{!--
      Синтаксис `~` удаляет пробелы между элементами, что приводит к выводу
      `<a class=topic-post-badges>Some text</a><span class=topic-post-badges>`,
      без пробела между ними.
      Из-за этого topic-post-badge считается частью слова "text" в конце ссылки,
      что мешает переносу строки на новую строку.
    --}}
    <td class='main-link clearfix topic-list-data' colspan="1">
      {{~raw-plugin-outlet name="topic-list-before-link"}}
      <span class='link-top-line'>
        {{~raw-plugin-outlet name="topic-list-before-status"}}
        {{~raw "topic-status" topic=topic}}
        {{~topic-link topic class="raw-link raw-topic-link"}}
        {{~#if topic.featured_link}}
          {{~topic-featured-link topic}}
        {{~/if}}
        {{~raw-plugin-outlet name="topic-list-after-title"}}
        {{~raw "list/unread-indicator" includeUnreadIndicator=includeUnreadIndicator
                                       topicId=topic.id
                                       unreadClass=unreadClass~}}
        {{~#if showTopicPostBadges}}
          {{~raw "topic-post-badges" unreadPosts=topic.unread_posts unseen=topic.unseen url=topic.lastUnreadUrl newDotText=newDotText}}
        {{~/if}}
      </span>
      <div class="link-bottom-line">
        {{#unless hideCategory}}
          {{#unless topic.isPinnedUncategorized}}
            {{~raw-plugin-outlet name="topic-list-before-category"}}
            {{category-link topic.category}}
          {{/unless}}
        {{/unless}}
        {{discourse-tags topic mode="list" tagsForUser=tagsForUser}}
        {{raw "list/action-list" topic=topic postNumbers=topic.liked_post_numbers className="likes" icon="heart"}}
      </div>
      {{#if expandPinned}}
        {{raw "list/topic-excerpt" topic=topic}}
      {{/if}}
    
      {{~raw-plugin-outlet name="topic-list-main-link-bottom"}}
    </td>
    
    {{~raw-plugin-outlet name="topic-list-after-main-link"}}
    
    {{#if showPosters}}
      {{raw "list/posters-column" posters=topic.featuredUsers}}
    {{/if}}
    
    {{raw "list/posts-count-column" topic=topic}}
    
    {{#if showLikes}}
      <td class="num likes topic-list-data">
        {{#if hasLikes}}
          <a href='{{topic.summaryUrl}}'>
            {{number topic.like_count}} {{d-icon "heart"}}
          </a>
        {{/if}}
      </td>
    {{/if}}
    
    {{#if showOpLikes}}
      <td class="num likes">
        {{#if hasOpLikes}}
          <a href='{{topic.summaryUrl}}'>
            {{number topic.op_like_count}} {{d-icon "heart"}}
          </a>
        {{/if}}
      </td>
    {{/if}}

    <td class="num topic-list-data {{cold-age-class topic.createdAt startDate=topic.bumpedAt class=""}} activity" title="{{html-safe topic.bumpedAtTitle}}">
      <a class="post-activity" href="{{topic.url}}">
        {{~raw-plugin-outlet name="topic-list-before-relative-date"~}}
        {{~format-date topic.createdAt format="tiny" noTitle="true"~}}
      </a>
    </td>

    {{raw "list/activity-column" topic=topic class="num topic-list-data" tagName="td"}}
</script>

Примечание: При наведении курсора у неё та же подсказка, что и у «Активности», а клик по дате перенаправляет к началу темы.

1 лайк

Спасибо!

Работает отлично.

Небольшая оговорка, правда

Это как бы отключает плагин Topic List Preview.

  • Во-первых, этот код — очень милый жест и делает именно то, что ожидается. Это даже больше, чем я надеялся.
  • Во-вторых, в зависимости от того, как форум отображает длинные даты (я использую формат дд.мм.гг), свободного места не так много, если одновременно включены и этот код, и TLP. В любом случае придётся выбрать что-то одно, но не оба варианта.
  • В-третьих, плагин Topic List Preview, насколько я понимаю, довольно сложный. Конфликты с ним возникают очень легко. Опять же: вопрос выбора.
1 лайк

Спасибо за тестирование!

Если вы используете Topic List Previews (TLP) (версия плагина устарела), вы можете скопировать и вставить следующее, используя код topic-list-item из репозитория.

Заголовок
<script type='text/x-handlebars' data-template-name='topic-list-header.raw'>
    {{~raw-plugin-outlet name="topic-list-header-before"~}}
    {{#if bulkSelectEnabled}}
      <th class="bulk-select topic-list-data">
        {{#if canBulkSelect}}
          {{raw "flat-button" class="bulk-select" icon="list" title="topics.bulk.toggle"}}
        {{/if}}
      </th>
    {{/if}}
    {{raw "topic-list-header-column" order='default' name=listTitle bulkSelectEnabled=bulkSelectEnabled showBulkToggle=toggleInTitle canBulkSelect=canBulkSelect canDoBulkActions=canDoBulkActions}}
    {{raw-plugin-outlet name="topic-list-header-after-main-link"}}
    {{#if showPosters}}
      {{raw "topic-list-header-column" order='posters' ariaLabel=(i18n "category.sort_options.posters")}}
    {{/if}}
    {{raw "topic-list-header-column" sortable=sortable number='true' order='posts' name='replies' ariaLabel=(i18n "sr_replies")}}
    {{#if showLikes}}
      {{raw "topic-list-header-column" sortable=sortable number='true' order='likes' name='likes' ariaLabel=(i18n "sr_likes")}}
    {{/if}}
    {{#if showOpLikes}}
      {{raw "topic-list-header-column" sortable=sortable number='true' order='op_likes' name='likes' ariaLabel=(i18n "sr_op_likes")}}
    {{/if}}
    {{raw "topic-list-header-column" sortable=sortable number='true' order='created' name='created' ariaLabel=(i18n "sr_created")}}
    {{raw "topic-list-header-column" sortable=sortable number='true' order='activity' name='activity' ariaLabel=(i18n "sr_activity")}}
    {{~raw-plugin-outlet name="topic-list-header-after"~}}
</script>

<script type='text/x-handlebars' data-template-name='list/topic-list-item.raw'>
    {{#if bulkSelectEnabled}}
      <td class='star'>
        <input type="checkbox" class="bulk-select">
      </td>
    {{/if}}
    
    {{#if tilesStyle}}
      <div class="tiles-grid-item-content main-link">
        <div class="image">
          {{#if hasThumbnail}}
            {{raw "list/topic-thumbnail" topic=topic thumbnails=thumbnails currentUser=currentUser site=site category=category opts=thumbnailOpts}}
          {{/if}}
          <a href='{{topic.url}}'>
            <div class="image-mask" style="{{backgroundGradient}}"></div>
          </a>
        </div>
        <div class="topic-details">
          <div class="topic-header-grid">
            {{raw "list/topic-list-title" topic=topic tilesStyle=tilesStyle showTopicPostBadges=showTopicPostBadges}}
            <div class="topic-category">
              {{#if showCategoryBadge}}
                {{category-link topic.category}}
              {{/if}}
              {{#if topic.tags}}
                {{discourse-tags topic mode="list"}}
              {{/if}}
            </div>
          </div>
          {{#if showExcerpt}}
            <a href='{{topic.url}}'>
              {{raw "list/topic-excerpt" topic=topic}}
            </a>
          {{/if}}
          <div class="topic-footer">
            {{raw 'list/topic-meta' likesHeat=likesHeat title=view.title topic=topic}}
            {{raw "list/topic-users" tilesStyle=tilesStyle abbreviatePosters=abbreviatePosters posters=abbreviatedPosters posterNames=posterNames}}
            {{#if showActions}}
              {{raw "list/topic-actions" likeCount=likeCount topicActions=topicActions topic=topic}}
            {{/if}}
          </div>
        </div>
      </div>
    {{else}}
      {{~raw-plugin-outlet name="topic-list-before-columns"}}
      {{!--
        Синтаксис `~` удаляет пробелы между элементами, что приводит к выводу
        `<a class=topic-post-badges>Некоторый текст</a><span class=topic-post-badges>`,
        без пробела между ними.
        Из-за этого элемент topic-post-badge считается частью того же слова, что и "текст"
        в конце ссылки, что препятствует переносу строки на новую строку.
      --}}
      <td class='main-link clearfix topic-list-data' colspan="1">
        {{#if hasThumbnail}}
          {{raw "list/topic-thumbnail" topic=topic thumbnails=thumbnails category=category opts=thumbnailOpts}}
        {{/if}}
        {{~raw-plugin-outlet name="topic-list-before-link"}}
        <span class='link-top-line'>
          {{~raw-plugin-outlet name="topic-list-before-status"}}
          {{~raw "topic-status" topic=topic}}
          {{~topic-link topic class="raw-link raw-topic-link"}}
          {{~#if topic.featured_link}}
            {{~topic-featured-link topic}}
          {{~/if}}
          {{~raw-plugin-outlet name="topic-list-after-title"}}
          {{~raw "list/unread-indicator" includeUnreadIndicator=includeUnreadIndicator
                                        topicId=topic.id
                                        unreadClass=unreadClass~}}
          {{~#if showTopicPostBadges}}
            {{~raw "topic-post-badges" unreadPosts=topic.unread_posts unseen=topic.unseen url=topic.lastUnreadUrl newDotText=newDotText}}
          {{~/if}}
        </span>
        <div class="link-bottom-line">
          {{#unless hideCategory}}
            {{#unless topic.isPinnedUncategorized}}
              {{~raw-plugin-outlet name="topic-list-before-category"}}
              {{category-link topic.category}}
            {{/unless}}
          {{/unless}}
          {{discourse-tags topic mode="list" tagsForUser=tagsForUser}}
          {{#if expandPinned}}
            {{raw "list/topic-excerpt" topic=topic}}
          {{/if}}
          {{#if showActions}}
            {{raw "list/topic-actions" likeCount=likeCount topicActions=topicActions}}
          {{/if}}
          {{raw "list/action-list" topic=topic postNumbers=topic.liked_post_numbers className="likes" icon="heart"}}
        </div>
      </td>
    
      {{#if showPosters}}
        {{raw "list/posters-column" posters=topic.featuredUsers}}
      {{/if}}
    
      {{raw "list/posts-count-column" topic=topic}}
    
      {{#if showLikes}}
        <td class="num likes topic-list-data">
          {{#if hasLikes}}
            <a href='{{topic.summaryUrl}}'>
              {{number topic.like_count}} {{d-icon "heart"}}
            </a>
          {{/if}}
        </td>
      {{/if}}
    
      {{#if showOpLikes}}
        <td class="num likes">
          {{#if hasOpLikes}}
            <a href='{{topic.summaryUrl}}'>
              {{number topic.op_like_count}} {{d-icon "heart"}}
            </a>
          {{/if}}
        </td>
      {{/if}}
    
        <td class="num topic-list-data {{cold-age-class topic.createdAt startDate=topic.bumpedAt class=""}} activity" title="{{html-safe topic.bumpedAtTitle}}">
          <a class="post-activity" href="{{topic.url}}">
            {{~raw-plugin-outlet name="topic-list-before-relative-date"~}}
            {{~format-date topic.createdAt format="tiny" noTitle="true"~}}
          </a>
        </td>
    
      {{raw "list/activity-column" topic=topic class="num topic-list-data" tagName="td"}}
    {{/if}}
</script>

Дайте знать, если это сработает для вас. :slight_smile:

Оба. Плагин sidecar не устарел, верно?

Но я попробую это чуть позже сегодня вечером. У меня уже почти 17:00, а это значит, что пора разогревать сауну :wink: Так что сначала самое важное :rofl:

(И для модераторов и администраторов: это НЕ оффтоп, а реальный пользовательский опыт…)

Да, плагин Sidecar дополняет компонент темы, здесь нет никаких проблем.

1 лайк