Новости Joomla

Компонент Joomla 6: Генератор LLMs.txt.

Компонент Joomla 6: Генератор LLMs.txt.

Компонент Joomla 6: Генератор LLMs.txt.

Ещё один генератор ИИ-файлов llms.txt и llms-full.txt.

Основные особенности/возможности компонента:

  • Генерация по стандарту: Автоматическое создание файла-визитки llms.txt и расширенной версии llms-full.txt с аннотированным списком материалов.
  • Интеллектуальная работа с контентом: Компонент использует мета-описания (Meta Description) из статей и пунктов меню, превращая SEO-настройки сайта в качественный контекст для нейросетей.
  • Просмотреть результат генерации файлов можно сразу в рабочей области компонента. После внесения корректив (через Настройки компонента. При отладке лучше открыть три вкладки в браузере: Настройка — Геренация/Превью — Список Материалов/Категории/Меню.) — проводим перегенерацию, смотрим результат до полной «победы».
  • Автоматизация и безопасность: Синхронизация с sitemap.xml, группировка по категориям и автоматическое создание резервных копий (.bak) при каждой генерации.
  • Гибкое управление: Возможность исключения определенных категорий и/или статей и/или пунктов меню, а также простая настройка через стандартную админпанель Joomla.
  • Подробное руководство/справка: Пошаговая инструкция для пользователя в Настройках компонента для редакторов с базовым знанием администрирования Joomla.

👉 Важно учесть.
1️⃣ Компонент Генератор LLMs.txt изначально составляет базовый список ссылок на основе sitemap.xml и сверяется с ним на предмет: запрета индексации url в robots.txt, тегов noinex/nofollow. Это экономит время на проверку «закрыть от индексации», поскольку компонент генерации Sitemap.xml уже реализовал эту задачу. Посему, формирование ссылок для ИИ имеет комплексный подход, составление грамотного/валидного/релевантного sitemap.xml никто не отменял.

2️⃣ Тексты-описания ссылок формируются из Meta Description com_content (только компонент Материалы) и выбранных пользователем Меню сайта. Важно, чтобы Meta Description были уникальными и релевантными, соответствовали базовому seo. Составленные «на отшибись» Description для ИИ — «не катит» (впрочем, для поисковых систем они тоже «не канали»).

Разработчик - участник нашего сообщества Александр Кузнецов (@newvksan).

Страница расширения

@joomlafeed

#joomla #ии #ai

👩‍💻 WT LLMs для Joomla: llms.txt, llms.json для AI-агентов.

👩‍💻 WT LLMs для Joomla: llms.txt, llms.json для AI-агентов.

Это Joomla-компонент для публикации AI-ready карты сайта и автоматической генерации файлов llms.txt, llms-full.txt и llms.json по концепции llmstxt.org.  Также о концепции llms.txt говорит Google в своей справке Lighthouse. Решение помогает LLM-моделям, AI-агентам, GEO/AI SEO-процессам и внутренним автоматизациям получать структурированные данные о сайте без ручной сборки JSON и Markdown.

С помощью WT LLMs можно:
- создать структурированное описание сайта для AI-агентов;
- управлять профилем сайта, картой интентов и каноническими страницами для этих интентов из админки Joomla;
- генерировать llms.txt и llms.json;
- использовать REST API для автоматического заполнения данных;
- отдавать публичную schema-инструкцию для AI-агентов;

В комплект компонента входит плагин markdown-версии страниц Joomla. Системный плагин Joomla, который добавляет альтернативное Markdown-представление страниц сайта. Он позволяет отдавать содержимое страницы в более чистом текстовом формате, удобном для AI-агентов, LLM, поисковых систем и технических интеграций.
Плагин добавляет в ссылки на AI-файлы.

Пакет подходит для сайтов на Joomla 5+, которым важно сделать контент понятнее для LLM, AI-поиска, ассистентов и будущих систем машинного чтения.

Видео:
- ВК Видео
- RuTube
- YouTube

Ссылки:
Страница расширения
GitHub

@joomlafeed

0 Пользователей и 1 Гость просматривают эту тему.
  • 9 Ответов
  • 1447 Просмотров
*

makc9I

  • Захожу иногда
  • 89
  • 0 / 0
Всем привет. Возникла странная проблема. Слегка покосилась верстка главной страницы. И я даже толком не могу сказать, после каких действий. Так как косяк не очень заметный и мог заметить не сразу.
Суть проблемы. Есть сайт: musaget.net
На главной есть блок, созданный модулем произвольного HTML кода и вставленный в позицию position-9. Вот как это выглядит на старой версии, развернутой с бекапа.
Спойлер
[свернуть]
При отображении позиций выглядит вот так:
Спойлер
[свернуть]

На боевом сайте я занимался тем, что переопределял внешний вид модулей и компонентов, вынося все правки в папку с шаблоном, каталог HTML. Предварительно все те же действия делал на локальной машине, проблем не было. Скорее всего их не было и на боевом сайте, но еще раз повторюсь, косяк небольшой, я мог не заметить.
Но вот теперь заметил и не знаю, как его победить. А косяк в том, что на сайте главная выглядит так:
Спойлер
[свернуть]
Проблемы 2: блок "Смотреть больше мероприятий" уехал вверх, и футер обрезается шириной внутреннего контента, хотя должен быть в ширину всего окна. Причем проблема с футером наблюдается только на главной, на любой другой странице он ведет себя, как положено.
А вот так выглядит странице при отображении позиций:
Спойлер
[свернуть]
position-9 каким-то чудесным образом переехала вверх.

Я пытался выцепить какие-то зависимости через панель разработчика браузера, анализируя стили, никаких аномалий не вижу. Файлы templateDetails.xls и index.php абсолютно такие-же, как и в бекапе, где все работает, на боевом index.php отличается только тем, что я добавил скрипты Яндекс метрики и Google аналитики, грешил на них, но уже проверил этот вариант, удалив их. Не помогло.
Я уже не понимаю, в чем дело. очень хочется разобраться в ситуации, чтобы знать, как действовать в таких случаях, а не тупо откатиться на бекап.
« Последнее редактирование: 09.11.2014, 21:17:46 от makc9I »
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
привет.
на счет первой проблемы - не понял, где косяк, т.к. не наблюдаю этого блока на сайте.
на счет ширины футера - скорее всего имеем где-то незакрытый div, т.к. на главной футер попадает в блок #all с фиксированной шириной, а на прочих страницах он вне его находится.
обычно лечится поочередным отключением модулей главной страницы. если при отключении какого-то из них глюк пропадает - то лезем в шаблон этого модуля и фиксим там лишний/недостающий тег.
ну либо может в основном шаблоне с условиями перемудрили и в условиях для главной странице где-то пропущен/лишний тег закрывающий.
*

makc9I

  • Захожу иногда
  • 89
  • 0 / 0
привет. Первая проблема: блок уехал за надпись : "Календарь мероприятий" сразу под слайдером вверху, а должен быть над футером.
*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
ну наверно проблемы связаны ))
я так понимаю, на главной блок с новостями  выводится компонентом?
если да - то закомментируте в шаблоне вызов компонента и посмотрите результат.
просто сейчас там внушает сомнение структура
<div class="blog">:
<div class="items-row cols-3 row-1"> вложена внутрь <div class="items-row cols-3 row-0">, хотя по смыслу они вроде бы одноранговые должны быть.
<div class="items-row cols-3 row-1">
*

makc9I

  • Захожу иногда
  • 89
  • 0 / 0
да, проблема именно в этом компоненте, его отключил, все спозиционировалось нормально. Буду колупать код.
*

makc9I

  • Захожу иногда
  • 89
  • 0 / 0
вот листинг кода, вроде как реально накинуты лишние закрывающие дивы в конце, но пытаюсь что-то удалять, вообще все летит.
Код: php
<?php
/**
 * @package Joomla.Site
 * @subpackage com_content
 * @copyright Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
 * @license GNU General Public License version 2 or later; see LICENSE.txt
 */

// no direct access
defined('_JEXEC') or die;

// Create a shortcut for params.
$params = &$this->item->params;
$images = json_decode($this->item->images);
$canEdit = $this->item->params->get('access-edit');
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html');
JHtml::_('behavior.tooltip');
JHtml::_('behavior.framework');

?>

<?php if ($this->item->state == 0) : ?>
<div class="system-unpublished">
<?php endif; ?>


<?php if ($params->get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?>
<ul class="actions">
<?php if ($params->get('show_print_icon')) : ?>
<li class="print-icon">
<?php echo JHtml::_('icon.print_popup', $this->item, $params); ?>
</li>
<?php endif; ?>
<?php if ($params->get('show_email_icon')) : ?>
<li class="email-icon">
<?php echo JHtml::_('icon.email', $this->item, $params); ?>
</li>
<?php endif; ?>
<?php if ($canEdit) : ?>
<li class="edit-icon">
<?php echo JHtml::_('icon.edit', $this->item, $params); ?>
</li>
<?php endif; ?>
</ul>
<?php endif; ?>

<?php if (!$params->get('show_intro')) : ?>
<?php echo $this->item->event->afterDisplayTitle; ?>
<?php endif; ?>

<?php echo $this->item->event->beforeDisplayContent; ?>

<?php // to do not that elegant would be nice to group the params ?>

<?php if (($params->get('show_author')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_parent_category')) or ($params->get('show_hits'))) : ?>
 <dl class="article-info">
 <dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt>
<?php endif; ?>

<?php if ($params->get('show_parent_category') && $this->item->parent_id != 1) : ?>
<dd class="parent-category-name">
<?php $title = $this->escape($this->item->parent_title);
$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_id)). '">' . $title . '</a>'; ?>
<?php if ($params->get('link_parent_category')) : ?>
<?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?>
<?php else : ?>
<?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?>
<?php endif; ?>
</dd>
<?php endif; ?>

<?php if ($params->get('show_category')) : ?>
<dd class="category-name">
<?php $title = $this->escape($this->item->category_title);
$url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catid)). '">' . $title . '</a>'; ?>
<?php if ($params->get('link_category')) : ?>
<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?>
<?php else : ?>
<?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?>
<?php endif; ?>
</dd>
<?php endif; ?>

<?php if ($params->get('show_create_date')) : ?>
<dd class="create">
<?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC2'))); ?>
</dd>
<?php endif; ?>

<?php if ($params->get('show_modify_date')) : ?>
<dd class="modified">
<?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC2'))); ?>
</dd>
<?php endif; ?>

<?php if ($params->get('show_publish_date')) : ?>
<dd class="published">
<?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC2'))); ?>
</dd>
<?php endif; ?>

<?php if ($params->get('show_author') && !empty($this->item->author )) : ?>
<dd class="createdby">
<?php $author =  $this->item->author; ?>
<?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author);?>

<?php if (!empty($this->item->contactid ) &&  $params->get('link_author') == true):?>
<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY' ,
JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id='.$this->item->contactid), $author)); ?>

<?php else :?>
<?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?>
<?php endif; ?>
</dd>
<?php endif; ?>

<?php if ($params->get('show_hits')) : ?>
<dd class="hits">
<?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?>
</dd>
<?php endif; ?>

<?php if (($params->get('show_author')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_parent_category')) or ($params->get('show_hits'))) :?>
  </dl>
<?php endif; ?>

<?php  if (isset($images->image_intro) and !empty($images->image_intro)) : ?>
<?php $imgfloat = (empty($images->float_intro))? $params->get('float_intro') : $images->float_intro; ?>
<div class="img-intro-<?php echo htmlspecialchars($imgfloat); ?>">
<div class="img-wrapper"><img
<?php if ($images->image_intro_caption):
echo 'class="caption"'.' title="' .htmlspecialchars($images->image_intro_caption).'"';
endif; ?>
src="<?php echo htmlspecialchars($images->image_intro); ?>" alt="<?php echo htmlspecialchars($images->image_intro_alt); ?>"/>
</div>

<div class="corner">
<?php if ($params->get('show_title')) : ?>

<h2>
<?php if ($params->get('link_titles') && $params->get('access-view')) : ?>
<a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid)); ?>">
<?php echo $this->escape($this->item->title); ?></a>
<?php else : ?>
<?php echo $this->escape($this->item->title); ?>
<?php endif; ?>
</h2>
<?php echo $this->item->introtext; ?>
<?php endif; ?>


<?php if ($params->get('show_readmore') && $this->item->readmore) :
if ($params->get('access-view')) :
$link = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid));
else :
$menu = JFactory::getApplication()->getMenu();
$active = $menu->getActive();
$itemId = $active->id;
$link1 = JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId);
$returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid));
$link = new JURI($link1);
$link->setVar('return', base64_encode(urlencode($returnURL)));
endif;
?>
<p class="readmore">
<a href="<?php echo $link; ?>">
<?php if (!$params->get('access-view')) :
echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE');
elseif ($readmore = $this->item->alternative_readmore) :
echo $readmore;
if ($params->get('show_readmore_title', 0)!= 0) :
echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));
endif;
elseif ($params->get('show_readmore_title', 0) == 0) :
echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE');
else :
echo JText::_('COM_CONTENT_READ_MORE');
echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit'));
endif; ?></a>
</p>

<?php endif; ?>

</div>
</div>

<?php endif; ?>







<?php if ($this->item->state == 0) : ?>
</div>
<?php endif; ?>

<div class="item-separator"></div>
<?php echo $this->item->event->afterDisplayContent; ?>

*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
ну мне-то точно этот код ничего не даст - каша такая, как её визуально разобрать?
надо менять и смотреть.
лучше наоборот, по одному закрывающему добавьте по очереди к каждому существующему закрывающему тегу
*

almika

  • Захожу иногда
  • 325
  • 27 / 0
Мне кажется, что дело не в компоненте, а во вводном тексте какого-то материала. В одном из них должен быть незакрытый <div> (До ссылки readmore).

*

effrit

  • Легенда
  • 10132
  • 1118 / 13
  • effrit.com
кстати, да. если шаблон не сам переделывал, то более вероятно.
тогда то же самое для материалов - по одному отключаем те, что на главную выводятся и смотрим результат
*

makc9I

  • Захожу иногда
  • 89
  • 0 / 0
Цитировать
Мне кажется, что дело не в компоненте, а во вводном тексте какого-то материала. В одном из них должен быть незакрытый <div> (До ссылки readmore).
Бинго! Так оно и было. Я нашел этот материал. Ух, спасибо огромное. Сколько же нервов и сил угробил на такую мелочь.
Проблема исчезла.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Проблемы с мобильной версией

Автор gromlan

Ответов: 0
Просмотров: 1464
Последний ответ 04.07.2018, 15:23:33
от gromlan
Слетела верстка на Joomla 2.5 после установки JL No Doubles

Автор qvaro

Ответов: 3
Просмотров: 1206
Последний ответ 02.07.2017, 21:53:43
от vipiusss
Проблемы с кодировкой Joomshoping

Автор mary_NK

Ответов: 3
Просмотров: 1799
Последний ответ 06.06.2017, 10:19:14
от darkghost
Удаление дублей страниц и связанные с этим проблемы

Автор Deska

Ответов: 1
Просмотров: 2275
Последний ответ 14.03.2017, 19:57:10
от Deska
Проблемы с формой GET

Автор Yan

Ответов: 1
Просмотров: 1882
Последний ответ 01.07.2016, 14:52:42
от saharin88