6 способов эффективно управлять разделом "Похожие статьи" в Joomla
Joomla предоставляет широкий выбор встроенных возможностей для отображения информации на сайте, что особенно важно при работе с сотнями или даже тысячами статей. Этот CMS предлагает множество инструментов для организации контента, в том числе раздел "Похожие статьи", который помогает пользователям находить дополнительные материалы по схожим темам. В этой статье рассмотрены шесть способов отображения связанных статей, используя только нативные функции Joomla.
Что такое "Похожие статьи"?
Раздел "Похожие статьи" — это блок, который обычно располагается внизу страницы или в боковой панели и предлагает пользователю продолжить чтение материалов на ту же или смежную тему. Такой раздел улучшает пользовательский опыт, увеличивает время пребывания на сайте и снижает показатель отказов.
Пример отображения на фронтенде
Ниже представлен базовый пример раздела "Похожие статьи" с тремя публикациями, созданный с помощью встроенных модулей Joomla.
Способы отображения похожих статей
1. Статьи из той же категории (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
)
Если на сайте есть несколько авторов, можно показывать статьи, написанные тем же человеком, что и текущая публикация. Например, если один автор пишет только о путешествиях по Италии, а другой о Франции, этот метод поможет не выходить за рамки тематики.
Настройки
В параметрах модуля выберите "Добавленные или измененные мной" в разделе "Авторы".
Код переопределения
<?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
)
Теги — удобный инструмент для объединения статей по темам, особенно если они принадлежат разным категориям. Этот метод полезен, если требуется максимальная гибкость в отображении связанных материалов.
Настройки
Задайте число отображаемых материалов, выберите уровень схожести тегов и порядок вывода.
Код переопределения
<?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.
Настройки
Укажите количество отображаемых публикаций и выберите, отображать ли даты.
Код переопределения
<?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
Этот модуль позволяет гибко настраивать отображение связанных статей, выбирая их по различным параметрам.
Код переопределения
<?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. Фильтрация по дате публикации
Можно отображать статьи, опубликованные в определённый временной промежуток.
Код переопределения
<?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 позволяет гибко управлять разделом "Похожие статьи", повышая вовлеченность пользователей. Выбор метода зависит от структуры контента сайта и предпочтений в организации материалов.
Соседние материалы | ||||
![]() |
Как исправить ошибку установления соединения с базой данных WordPress | Увеличьте продажи вашего интернет-магазина с помощью оптимизации конверсии (CRO) |
![]() |