Как вывести похожие посты? Есть решение

Добрый день

Вывожу похожие посты таким кодом:

 {$posts = $wa->blog->posts(1,3)}
 {foreach $posts as $post}
  <div class="pohogie">
         <h3>
             <a href="{$post.link}" itemprop="url">{$post.title|unescape|truncate:40}</a>
         </h3>
   <div class="credentials">
   
               {if isset($post.user.photo_url_20)}
                   {if $post.user.posts_link}
                       <a href="{$post.user.posts_link}">
                           <img src="{$post.user.photo_url_20}" class="userpic" alt="">
                       </a>
                   {else}
                       <img src="{$post.user.photo_url_20}" class="userpic" alt="">
                   {/if}
               {/if}
   
               {if $post.user.posts_link}
                   <a href="{$post.user.posts_link}" class="username">{$post.user.name}</a>
               {else }
                   <span class="username">{$post.user.name}</span>
               {/if}
               <span class="hint date">{$post.datetime|wa_datetime:"humandate"}</span>
               {if $show_comments && $post.comments_allowed}
                   {if !empty($post.comment_count)}
                       <a href="{$post.link}#comments" class="small">
                           {_w('%d comment','%d comments',$post.comment_count)}
                       </a>
                   {else}
                       {*
                       <a href="{$post.link}#comments" class="hint">
                           [`no comments`]
                       </a>
                       *}
                   {/if}
               {/if}
   
           </div>  
         <a href="{$post.link}">
                     {* @event prepare_posts_frontend.%plugin_id%.post_title *}
                     {if !empty($post.plugins.post_title)}
                         {foreach $post.plugins.post_title as $plugin => $output}{$output}{/foreach}
                     {/if}
                     </a>
            {$post.text|regex_replace:"/(<img.*?>)/":""|unescape|truncate:150}
         <a href="{$post.link}">Читать далее...</a>
   </div>
 {/foreach}

        

нужно его доработать:

1. Вывод похожих постов по id блога (когда человек читает блог по ремонту то и похожие выводить по этой теме)

2. удалить активный пост из общего списка

Может есть другое решение данной задачи?

Спасибо

4 ответа

  • 2
    Syrnik.com Партнер-разработчик 18 сентября 2015 06:03 # Решение

    Неясно как определить "похожие" посты.

    Выводите на странице со статьей?

    • +1
      Виталий Виталий 18 сентября 2015 06:05 #

      Есть к примеру 3 блога (экономика, публикации, бизнес) нужно что бы похожие были именно из того же блога что и сама статья

      • +1

        Вышеприведенном коде выбирается 3 записи из блога id=1. Это на странице просмотра записи происходит?

        • +1
          Виталий Виталий 18 сентября 2015 06:23 #

          Да, но он показывает во всех блогах одинаковые записи.

          http://unia.com.ua

          • +1
            $wa->blog->posts($post.blog_id, 3)}
            • +1
              Виталий Виталий 18 сентября 2015 06:48 #

              Супер! Спасибо. То что надо!

              Сделал как Вы сказали:


              {$similar_posts = $wa->blog->posts($post.blog_id, 3)}
              {foreach $similar_posts as $similar_post}
                <div class="pohogie">
                       <h3>
                           <a href="{$similar_post.link}" itemprop="url">{$similar_post.title|unescape|truncate:40}</a>
                       </h3>
                 <div class="credentials">
                 
                             {if isset($similar_post.user.photo_url_20)}
                                 {if $similar_post.user.posts_link}
                                     <a href="{$similar_post.user.posts_link}">
                                         <img src="{$similar_post.user.photo_url_20}" class="userpic" alt="">
                                     </a>
                                 {else}
                                     <img src="{$similar_post.user.photo_url_20}" class="userpic" alt="">
                                 {/if}
                             {/if}
                 
                             {if $similar_post.user.posts_link}
                                 <a href="{$similar_post.user.posts_link}" class="username">{$similar_post.user.name}</a>
                             {else }
                                 <span class="username">{$similar_post.user.name}</span>
                             {/if}
                             <span class="hint date">{$similar_post.datetime|wa_datetime:"humandate"}</span>
                             {if $show_comments && $similar_post.comments_allowed}
                                 {if !empty($similar_post.comment_count)}
                                     <a href="{$similar_post.link}#comments" class="small">
                                         {_w('%d comment','%d comments',$similar_post.comment_count)}
                                     </a>
                                 {else}
                                     {*
                                     <a href="{$similar_post.link}#comments" class="hint">
                                         [`no comments`]
                                     </a>
                                     *}
                                 {/if}
                             {/if}
                 
                         </div>  
                       <a href="{$similar_post.link}">
                                   {* @event prepare_posts_frontend.%plugin_id%.post_title *}
                                   {if !empty($similar_post.plugins.post_title)}
                                       {foreach $similar_post.plugins.post_title as $plugin => $output}{$output}{/foreach}
                                   {/if}
                                   </a>
                          {$similar_post.text|regex_replace:"/(<img.*?>)/":""|unescape|truncate:150}
                       <a href="{$similar_post.link}">Читать далее...</a>
                 </div>
               {/foreach}
              
                      
              

              Проверьте пожалуйста правильный ли код?

              В идеале бы конечно исключать из похожих ту запись на которой находится юзер.

              Спасибо

              • +1

                Похоже на правду

                А выберем на 1 пост больше (про запас — вдруг в списке есть основной пост) и добавим условие, чтоб выводились только 3 поста и только те, у которых id не совпадает с текущим :)

                {$similar_posts = $wa->blog->posts($post.blog_id, 4)}
                {$similar_counter=0}
                {foreach $similar_posts as $similar_post}
                 {if ($post.id != $similar_post.id) && ($similar_counter < 3) }
                 {$similar_counter = $similar_counter+1}
                  <div class="pohogie">
                         <h3>
                             <a href="{$similar_post.link}" itemprop="url">{$similar_post.title|unescape|truncate:40}</a>
                         </h3>
                   <div class="credentials">
                   
                               {if isset($similar_post.user.photo_url_20)}
                                   {if $similar_post.user.posts_link}
                                       <a href="{$similar_post.user.posts_link}">
                                           <img src="{$similar_post.user.photo_url_20}" class="userpic" alt="">
                                       </a>
                                   {else}
                                       <img src="{$similar_post.user.photo_url_20}" class="userpic" alt="">
                                   {/if}
                               {/if}
                   
                               {if $similar_post.user.posts_link}
                                   <a href="{$similar_post.user.posts_link}" class="username">{$similar_post.user.name}</a>
                               {else }
                                   <span class="username">{$similar_post.user.name}</span>
                               {/if}
                               <span class="hint date">{$similar_post.datetime|wa_datetime:"humandate"}</span>
                               {if $show_comments && $similar_post.comments_allowed}
                                   {if !empty($similar_post.comment_count)}
                                       <a href="{$similar_post.link}#comments" class="small">
                                           {_w('%d comment','%d comments',$similar_post.comment_count)}
                                       </a>
                                   {else}
                                       {*
                                       <a href="{$similar_post.link}#comments" class="hint">
                                           [`no comments`]
                                       </a>
                                       *}
                                   {/if}
                               {/if}
                   
                           </div>  
                         <a href="{$similar_post.link}">
                                     {* @event prepare_posts_frontend.%plugin_id%.post_title *}
                                     {if !empty($similar_post.plugins.post_title)}
                                         {foreach $similar_post.plugins.post_title as $plugin => $output}{$output}{/foreach}
                                     {/if}
                                     </a>
                            {$similar_post.text|regex_replace:"/(<img.*?>)/":""|unescape|truncate:150}
                         <a href="{$similar_post.link}">Читать далее...</a>
                   </div>
                {/if}
                 {/foreach}
                
  • 1
    Виталий 2 сентября 2015 11:39 #

    ?

  • 1
    Виталий 18 сентября 2015 03:37 #

    Как в данном коде ограничить вывод записей до трех?

  • 1

    Вот это не очень хорошо. Работать будет, но может запутать.

    {foreach $posts as $post}

    На странице с записью уже есть переменная $post.

    Сделайте что-нибудь такое

    {$similar_posts = $wa->blog->posts($post.blog_id, 3)}
    {foreach $similar_posts as $similar_post}

    и внутри цикла используйте не $post, а $similar_post

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите