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

Пример раздела похожих статей в Joomla

Что такое "Похожие статьи"?

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

Пример отображения на фронтенде

Ниже представлен базовый пример раздела "Похожие статьи" с тремя публикациями, созданный с помощью встроенных модулей Joomla.

Пример отображения модуля похожих статей

Способы отображения похожих статей

1. Статьи из той же категории (mod_articles_popular)

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

Настройки

В настройках модуля укажите категорию, и Joomla автоматически выберет статьи с наибольшим числом просмотров. Можно также задать количество публикаций, включить или отключить избранные материалы и применить фильтр по датам.

Настройки модуля mod_articles_popular в Joomla

Код переопределения

<?php
    /**
        * @package     Joomla.Site
        * @subpackage  mod_articles_popular
        * @Author       web-eau.net
        * @copyright   Copyright (C) 2005 - 2019 Open Source Matters, Inc. All rights reserved.
        * @license     GNU General Public License version 2 or later; see LICENSE.txt
    */
    defined('_JEXEC') or die;
?>

<div>
    
    <?php foreach ($list as $item) : ?>
    
    <div itemscope itemtype="https://schema.org/Article">
    
        <div>
        
        <!-- intro image of the item -->
        <?php
            $article_images  = json_decode($item->images);
            $article_image   = '';
            $article_image_alt   = '';
            if(isset($article_images->image_intro) && !empty($article_images->image_intro)) {
                $article_image  = $article_images->image_intro;
                $article_image_alt  = $article_images->image_intro_alt;
            }?>                      
            <a href="/<?php echo $item->link; ?>">
                <img src="/<?php echo $article_image; ?>" alt="<?php echo $article_image_alt; ?>" >
            </a>            

            <div>
                <!-- item title -->
                <h5>        
                    <a href="/<?php echo $item->link; ?>" itemprop="url">
                        <span itemprop="name">
                            <?php echo $item->title; ?>
                        </span>
                    </a>
                </h5>
            </div>
            
        </div>
        
    </div>
    <?php endforeach; ?>
</div>

2. Статьи от того же автора (mod_articles_latest)

Если на сайте есть несколько авторов, можно показывать статьи, написанные тем же человеком, что и текущая публикация. Например, если один автор пишет только о путешествиях по Италии, а другой о Франции, этот метод поможет не выходить за рамки тематики.

Настройки

В параметрах модуля выберите "Добавленные или измененные мной" в разделе "Авторы".

Настройки модуля mod_articles_latest в Joomla

Код переопределения

<?php

/**
 * @package     Joomla.Site
 * @subpackage  mod_articles_latest
 * @Author         web-eau.net
 * @copyright   (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\CMS\Factory;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\Language\Associations;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Content\Administrator\Extension\ContentComponent;
use Joomla\Component\Content\Site\Helper\RouteHelper;

if (!$list) {
    return;
}

?>

<div>
    
    <?php foreach ($list as $item) : ?>  
 
    <div itemscope itemtype="https://schema.org/Article">
    
        <div>         
                
                  <!-- intro image -->
                <?php
                    $article_images  = json_decode($item->images);
                    $article_image   = '';
                    $article_image_alt   = '';
                    if(isset($article_images->image_intro) && !empty($article_images->image_intro)) {
                        $article_image  = $article_images->image_intro;
                        $article_image_alt  = $article_images->image_intro_alt;
                    }?>                               
                <a href="/<?php echo $item->link; ?>">
                    <img src="/<?php echo $article_image; ?>" alt="<?php echo $article_image_alt; ?>" >
                </a>    
                
                <div>
                    <!-- item title -->
                    <h5>        
                        <a href="/<?php echo $item->link; ?>" itemprop="url">
                            <span itemprop="name">
                                <?php echo $item->title; ?>
                            </span>
                        </a>
                    </h5>
                </div>
            
        </div>
        
    </div>
 
    <?php endforeach; ?>
    
</div>

3. Статьи с одинаковыми тегами (mod_tags_similar)

Теги — удобный инструмент для объединения статей по темам, особенно если они принадлежат разным категориям. Этот метод полезен, если требуется максимальная гибкость в отображении связанных материалов.

Настройки

Задайте число отображаемых материалов, выберите уровень схожести тегов и порядок вывода.

Настройки модуля mod_tags_similar в Joomla

Код переопределения

<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_tags_similar
 * @author         web-eau.net
 * @copyright   (C) 2013 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\CMS\Router\Route;
use Joomla\CMS\Helper\ModuleHelper;
use Joomla\CMS\Language\Text;

if (!$list)
{
    return;
}

$db = JFactory::getDbo();
$query = $db->getQuery(true)
    ->select($db->quoteName(array('core_content_id', 'core_images', 'core_body')))
    ->from($db->quoteName('#__ucm_content'))
    ->where($db->quoteName('core_content_id') . ' IN (' . implode(',', array_column($list, 'core_content_id')) . ')');
$extraData = $db->setQuery($query)->loadObjectList('core_content_id');

?>

<div>
 
    <?php foreach ($list as $i => $item) : ?>
 
        <div>
        
            <div>              

                  <a href="/<?php echo Route::_($item->link); ?>">
                <?php // Display intro image ?>
                <?php $images = json_decode($extraData[$item->core_content_id]->core_images); ?>
                <?php if (!empty($images->image_intro)) : ?>

                <img src="/<?php echo htmlspecialchars($images->image_intro, ENT_QUOTES, 'UTF-8'); ?>"
                     alt="<?php echo htmlspecialchars($images->image_intro_alt, ENT_QUOTES, 'UTF-8'); ?>"
                     loading="lazy">                  

                <?php endif; ?>
                </a>
                
                <div>                  
                <?php if (($item->type_alias === 'com_users.category') || ($item->type_alias === 'com_banners.category')) : ?>
                    <?php if (!empty($item->core_title)) : ?>
                    <?php echo htmlspecialchars($item->core_title, ENT_COMPAT, 'UTF-8'); ?>
                    <?php endif; ?>
                
                    <?php else : ?>              
                    <h5>              
                        <a href="/<?php echo Route::_($item->link); ?>">
                            <?php if (!empty($item->core_title)) : ?>
                                <?php echo htmlspecialchars($item->core_title, ENT_COMPAT, 'UTF-8'); ?>
                            <?php endif; ?>
                        </a>  
                    </h5>            
                         
                <?php endif; ?>
                </div>
            
            </div>
        </div>
        
    <?php endforeach; ?>
    
</div>

4. Статьи с одинаковыми ключевыми словами (mod_related_items)

Хотя ключевые слова уже не играют важной роли в SEO, они остаются полезными для организации контента внутри Joomla.

Настройки

Укажите количество отображаемых публикаций и выберите, отображать ли даты.

Настройки модуля mod_related_items в Joomla

Код переопределения

<?php
/**
 * @package     Joomla.Site
 * @subpackage  mod_related_items
 * @author       web-eau.net
 * @copyright   (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\CMS\Layout\FileLayout;
use Joomla\CMS\Layout\LayoutHelper;
use Joomla\CMS\Router\Route;
use Joomla\CMS\Uri\Uri;
use Joomla\Component\Fields\Administrator\Helper\FieldsHelper;
use Joomla\Component\Content\Site\Helper\RouteHelper;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;

?>

<div>
    <?php foreach ($list as $item) : ?>
      
        <!-- intro image -->
        <?php
            $article_images  = json_decode($item->images);
            $article_image   = '';
            $article_image_alt   = '';
            if(isset($article_images->image_intro) && !empty($article_images->image_intro)) {
                $article_image  = $article_images->image_intro;
                $article_image_alt  = $article_images->image_intro_alt;
            }?>
            
            <div>
                <div>
                    <a href="/<?php echo $item->route; ?>">
                        <img src="/<?php echo $article_image; ?>" alt="<?php echo $article_image_alt; ?>" >
                    </a>
                    
                    <div>
                    
                        <h5>
                            <a href="/<?php echo $item->route; ?>">
                                <?php echo $item->title; ?>                        
                            </a>
                          </h5>               

                    </div>  
                    
                </div>
            </div>
                  
    <?php endforeach; ?>

</div>

5. Использование модуля mod_newsflash

Этот модуль позволяет гибко настраивать отображение связанных статей, выбирая их по различным параметрам.

Настройки модуля mod_newsflash в Joomla

Код переопределения

<?php

/**
 * @package     Joomla.Site
 * @subpackage  mod_articles_category
 * @Author        web-eau.net
 * @copyright   (C) 2010 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\CMS\Helper\ModuleHelper;
use Joomla\CMS\HTML\HTMLHelper;
use Joomla\CMS\Language\Text;
use Joomla\CMS\Layout\LayoutHelper;

if (!$list) {
    return;
}

?>

<div>
      
    <?php $items = $list; ?>
 
      <div>

    <?php foreach ($items as $item) : ?>  
    
    <div>
 
        <div>
    
        <a href="/<?php echo $item->link; ?>">
      
        <?php
            $article_images  = json_decode($item->images);
            $article_image   = '';
            $article_image_alt   = '';
            if(isset($article_images->image_intro) && !empty($article_images->image_intro)) {
                $article_image  = $article_images->image_intro;
                $article_image_alt  = $article_images->image_intro_alt;
            }?>                      
    
        <img src="/<?php echo $article_image; ?>" alt="<?php echo $article_image_alt; ?>" >
      
        <?php if ($params->get('link_titles') == 1) : ?>
            <?php $attributes = ['class' => 'mod-articles-category-title ' . $item->active]; ?>
            <?php $link = htmlspecialchars($item->link, ENT_COMPAT, 'UTF-8', false); ?>
            <?php $title = htmlspecialchars($item->title, ENT_COMPAT, 'UTF-8', false); ?>
            <?php echo HTMLHelper::_('link', $link, $title, $attributes); ?>
        <?php else : ?>
      
        <div>
            <h5>
                <?php echo $item->title; ?>                 
            </h5>
        </div>
    
        <?php endif; ?>

        </a>
        
        </div>
        
    </div>
    <?php endforeach; ?>
     
  </div>
 
</div>

6. Фильтрация по дате публикации

Можно отображать статьи, опубликованные в определённый временной промежуток.

Фильтрация статей по дате в Joomla

Код переопределения

<?php

/**
 * @package     Joomla.Site
 * @subpackage  mod_articles_news
 * @Author        web-eau.net
 * @copyright   (C) 2006 Open Source Matters, Inc. <https://www.joomla.org>
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('_JEXEC') or die;

use Joomla\CMS\Helper\ModuleHelper;
use Joomla\CMS\Layout\LayoutHelper;

if (!$list) {
    return;
}

?>
<div>
    
    <?php foreach ($list as $item) : ?>
    
        <div itemscope itemtype="https://schema.org/Article">

            <div>

                <?php if ($params->get('img_intro_full') !== 'none' && !empty($item->imageSrc)) : ?>
                    <figure>
                        <?php echo LayoutHelper::render(
                            'joomla.html.image',
                            [
                                'src' => $item->imageSrc,
                                'alt' => $item->imageAlt,
                            ]
                        ); ?>
                        <?php if (!empty($item->imageCaption)) : ?>
                            <figcaption>
                                <?php echo $item->imageCaption; ?>
                            </figcaption>
                        <?php endif; ?>
                    </figure>
                <?php endif; ?>            

                <divcard-title">
                    <?php if ($item->link !== '' && $params->get('link_titles')) : ?>
                        <a href="/<?php echo $item->link; ?>">
                            <?php echo $item->title; ?>
                        </a>
                    <?php else : ?>
                        <?php echo $item->title; ?>
                    <?php endif; ?>
                    </<?php echo $item_heading; ?>>
                <?php endif; ?>
                </div>
                
            </div>
            
        </div>
        
    <?php endforeach; ?>
    
</div>

Вывод

Использование встроенных модулей Joomla позволяет гибко управлять разделом "Похожие статьи", повышая вовлеченность пользователей. Выбор метода зависит от структуры контента сайта и предпочтений в организации материалов.


 
4.5532994923858 1 1 1 1 1 (Оценок: 197)
4.5532994923858 197
Опубликовано: 02-06-2024

Вы не зарегистрированы, чтобы оставлять комментарии.