Новости 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 Гость просматривают эту тему.
  • 8 Ответов
  • 15904 Просмотров
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Тема такая что мне часто приходится делать шаблоны под Joomla. К счастью почти все модули написаны по канонам Joomla, и их можно перешаблонизировать в папке html/module_name/layout_name.php

Однако иногда нужно для разных экземпляров модуля иметь разный layout. Такая проблема часто возникает с mod_mainmenu и mod_newsflash.
Решение достаточно простое - добавлять к модулям параметр выбора шаблона. делается это очень просто:

1)добавляем в манифест (xml-файл модуля) новый параметр:
Код: xml
<param name="layout" type="modulelayout" module="mod_имя_модуля" label="Layout" description="Select layout" />
Типа modulelayout Joomla не знает, поэтому мы его создадим сами.
2)добавляем атрибут addpath элементу params:
Код: xml
<params addpath="/modules/mod_имя_модуля/elements">
Таким образом мы указываем что неизвестные типы параметров надо искать в данной папке
3)создаем /modules/mod_имя_модуля/elements/modulelayout.php . Вставляем туда следующий код:
[spoiler title="modulelayout.php"]
Код: php
<?php

// no direct access
defined('_JEXEC') or die('Restricted access');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');

class JElementModuleLayout extends JElement
{
var $_name = 'ModuleLayout';

function fetchElement($name, $value, &$node, $control_name)
{
global $mainframe;
$db =& JFactory::getDBO();

// get current template
$query = 'SELECT template'
.' FROM #__templates_menu'
.' WHERE client_id = 0'
.' AND menuid = 0'
;
$db->setQuery( $query );
$template = $db->loadResult();
$module = $node->attributes('module');

// If a template, extension and view are present build the options.
if ($template && $module) {

// Build the search paths for layouts.
$bPath = JPath::clean(JPATH_SITE.DS.'modules'.DS.$module.DS.'tmpl');
$tPath = JPath::clean(JPATH_SITE.DS.'templates'.DS.$template.DS.'html'.DS.$module);

// Add the default option.
$options[] = JHTML::_('select.option', '', JText::_('Default'));

// Add the layout options from the first path.
if (is_dir($bPath) && ($files = JFolder::files($bPath, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option',  '<OPTGROUP>', JText::_( 'Module' ) );
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
//$options[] = JHTML::_('select.option',  '</OPTGROUP>' );
}

// Add the layout options from the second path.
if (is_dir($tPath) && ($files = JFolder::files($tPath, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option',  '<OPTGROUP>', JText::_( 'Template' ) );
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
//$options[] = JHTML::_('select.option',  '</OPTGROUP>' );
}
return JHTML::_('select.genericlist', $options, $control_name.'['.$name.']', null, 'value', 'text', $value);
}

}
}
[/spoiler]
Мы создали новый тип параметра, который генерирует список найденных layout'ов в папке модуля и шаблона.
4)Меняем в mod_имя_модуля.php вызов layout'а на следующий:
Код: php
require( JModuleHelper::getLayoutPath('mod_имя_модуля', $params->get('layout', 'default')) );


К счастью в Joomla 1.6 тип modulelayout уже содержится в библиотеке, и все стандартные модули имеют этот параметр слава тапочкам.
Ну а пока мы живем с j 1.5 прошу разработчиков проделать эти нехитрые 4 шага чтобы помочь бедным верстальшикам обуздать ваши модули )
« Последнее редактирование: 12.09.2010, 20:16:21 от danik.html »
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Сделал маленькую правку благодаря которой layout'ы в списке разделяются на те что из модуля (родные) и те что из шаблона.
Если в шаблоне layout перекрыт, то не имеет значения какой из них выбрать в списке...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
То ли я туплю, то ли не пойму практического применения, поясните?
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
Практическое применение в основном разработчикам шаблонов - к одному модулю можно создать несколько layout'ов, которые будут доступны для выбора в параметрах модуля.

Неоднократно сталкивался с такой задачей, и очень обрадовался когда ковырялся в Joomla 1.6 beta и увидел решение данной проблемы.

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

К примеру: в планах сделать модуль меню, и наделать layout'ов, скажем аккордион, выпадающий список и тп, что избавит пользователей от установки кучи модулей меню...
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

danik.html

  • Живу я здесь
  • 2650
  • 353 / 4
более близкий пример тебе, beliyadm - mod_virtuemart_universal. Скажем у нас два экземпляра модуля, и оба они должны выглядеть по-разному, причем CSS задачу не решит. Вот тут и приходит на помошь параметр modulelayout )
【Мегапак Virtuemart:
 • метатеги (description,keywords)
 • заголовки (title)
 • красивые алиасы (чпу) без тормозов и дублей!
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Все, понял смысл, чегой то затупил :)
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
*

Roberta

  • Захожу иногда
  • 182
  • 0 / 0
Тема такая что мне часто приходится делать шаблоны под Joomla. К счастью почти все модули написаны по канонам Joomla, и их можно перешаблонизировать в папке html/module_name/layout_name.php

Однако иногда нужно для разных экземпляров модуля иметь разный layout. Такая проблема часто возникает с mod_mainmenu и mod_newsflash.
Решение достаточно простое - добавлять к модулям параметр выбора шаблона. делается это очень просто:

1)добавляем в манифест (xml-файл модуля) новый параметр:
Код: xml
<param name="layout" type="modulelayout" module="mod_имя_модуля" label="Layout" description="Select layout" />
Типа modulelayout Joomla не знает, поэтому мы его создадим сами.
2)добавляем атрибут addpath элементу params:
Код: xml
<params addpath="/modules/mod_имя_модуля/elements">
Таким образом мы указываем что неизвестные типы параметров надо искать в данной папке
3)создаем /modules/mod_имя_модуля/elements/modulelayout.php . Вставляем туда следующий код:
[spoiler title="modulelayout.php"]
Код: php
<?php

// no direct access
defined('_JEXEC') or die('Restricted access');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');

class JElementModuleLayout extends JElement
{
var $_name = 'ModuleLayout';

function fetchElement($name, $value, &$node, $control_name)
{
global $mainframe;
$db =& JFactory::getDBO();

// get current template
$query = 'SELECT template'
.' FROM #__templates_menu'
.' WHERE client_id = 0'
.' AND menuid = 0'
;
$db->setQuery( $query );
$template = $db->loadResult();
$module = $node->attributes('module');

// If a template, extension and view are present build the options.
if ($template && $module) {

// Build the search paths for layouts.
$bPath = JPath::clean(JPATH_SITE.DS.'modules'.DS.$module.DS.'tmpl');
$tPath = JPath::clean(JPATH_SITE.DS.'templates'.DS.$template.DS.'html'.DS.$module);

// Add the default option.
$options[] = JHTML::_('select.option', '', JText::_('Default'));

// Add the layout options from the first path.
if (is_dir($bPath) && ($files = JFolder::files($bPath, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option',  '<OPTGROUP>', JText::_( 'Module' ) );
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
//$options[] = JHTML::_('select.option',  '</OPTGROUP>' );
}

// Add the layout options from the second path.
if (is_dir($tPath) && ($files = JFolder::files($tPath, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option',  '<OPTGROUP>', JText::_( 'Template' ) );
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
//$options[] = JHTML::_('select.option',  '</OPTGROUP>' );
}
return JHTML::_('select.genericlist', $options, $control_name.'['.$name.']', null, 'value', 'text', $value);
}

}
}
[/spoiler]
Мы создали новый тип параметра, который генерирует список найденных layout'ов в папке модуля и шаблона.
4)Меняем в mod_имя_модуля.php вызов layout'а на следующий:
Код: php
require( JModuleHelper::getLayoutPath('mod_имя_модуля', $params->get('layout', 'default')) );


К счастью в Joomla 1.6 тип modulelayout уже содержится в библиотеке, и все стандартные модули имеют этот параметр слава тапочкам.
Ну а пока мы живем с j 1.5 прошу разработчиков проделать эти нехитрые 4 шага чтобы помочь бедным верстальшикам обуздать ваши модули )

сделала все вышесказанное с XML файлом.
но в php файле модуля уже прописан вызов layout'a следующим образом

$layout = $params->get('layout','default');
$layout = JFilterInput::clean($layout, 'word');
$path = JModuleHelper::getLayoutPath('mod_hbooking', $layout);
if (file_exists($path)) {
   require($path);
}

результат: дополнительный layout из админки не виден, только default

что делать??
« Последнее редактирование: 18.12.2010, 23:12:34 от Roberta »
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Случайно набрел на эту тему. Задумка действительно неплохая, тем более, что многие еще на 1.5 сидят. Но посмотрев код возникло 2 вопроса:

1. Почему layout'ы ищутся только в текущем шаблоне? А если у пользователя 5 шаблонов и в них разный набор layout'ов?
2. Почему при формировании списка закомментированы строки </OPTGROUP>

Может быть есть более свежий элемент? Просто я как раз переписывал модули для JComments под 1.7 и 1.5, и в случае с 1.7 выбор layout'а есть, а в 1.5 пока нет. Я готов добавить, но нужно какое-то более универсальное решение.
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
Хм, подумал, подумал и решил чуток улучшить элемент:
[spoiler title=JElementModuleLayout]
Код: php
<?php
 
defined('_JEXEC') or die('Restricted access');

jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
 
class JElementModuleLayout extends JElement
{
var $_name = 'ModuleLayout';
 
function fetchElement($name, $value, &$node, $control_name)
{
$module = $node->attributes('module');
$clientId = ($v = $node->attributes('client_id'))? $v : 0;

global $mainframe;
$db =& JFactory::getDBO();
 
$query = 'SELECT template'
.' FROM #__templates_menu'
.' WHERE client_id = ' . $clientId
;

$db->setQuery( $query );
$templates = $db->loadResultArray();

$options = array();
$options[] = JHTML::_('select.option', '', JText::_('Default'));

if ($module) {
$moduleFolder = JPath::clean(JPATH_SITE . DS . 'modules' . DS . $module . DS . 'tmpl');

if (is_dir($moduleFolder) && ($files = JFolder::files($moduleFolder, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option', '<OPTGROUP>', JText::_('Module'));
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
$options[] = JHTML::_('select.option', '</OPTGROUP>');
}
}

if ($templates) {
foreach ($templates as $template) {
$templateFolder = JPath::clean(JPATH_SITE . DS . 'templates' . DS . $template . DS . 'html' . DS . $module);

if (is_dir($templateFolder) && ($files = JFolder::files($templateFolder, '^[^_]*\.php$'))) {
$options[] = JHTML::_('select.option', '<OPTGROUP>', JText::_('Template'). ' ' . $template);
foreach ($files as $file) {
$options[] = JHTML::_('select.option', JFile::stripExt($file));
}
$options[] = JHTML::_('select.option', '</OPTGROUP>');
}
}
}
 
return JHTML::_('select.genericlist', $options, $control_name.'['.$name.']', null, 'value', 'text', $value);
}
}
[/spoiler]
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вставка кода вызова модуля в тело шаблона другого модуля

Автор Dorfman

Ответов: 15
Просмотров: 3330
Последний ответ 19.11.2018, 21:45:54
от beliyadm
Как создать дополнительный параметр(по типу published) для элемента списка?

Автор borro

Ответов: 4
Просмотров: 1844
Последний ответ 08.02.2018, 17:03:11
от borro
Нужна помощь в доработке модуля под Joomla 3

Автор kik84

Ответов: 5
Просмотров: 3629
Последний ответ 30.01.2018, 22:40:30
от Елeна
Модификация модуля lastet_news вывод времени перед заголовком

Автор Morphiss

Ответов: 9
Просмотров: 3134
Последний ответ 19.04.2016, 12:41:55
от spsyper
Создание платного модуля

Автор fiter

Ответов: 7
Просмотров: 2353
Последний ответ 04.08.2014, 18:27:05
от neo85r