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

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Как сделать, подскажите пожалуйста.
Google не помогает.
 >:(
Все вопросы и предложения на почту.
*

Максим Пишняк

  • Давно я тут
  • 837
  • 35 / 0
Способен ли JS экспортировать что-либо о заказах в каком-либо виде?
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Да, так и сделал =)
Просто хотелось экспортировать в нормальном виде.
Вот вам парсер, правда на выходе небольшой бардак.

Код
var i = 2166;
var dataInf = '';
var parse = setInterval(function() {
    if(i > 2160) {
        getData(i);
        i--;
    } else {
        clearInterval(parse);
console.log(dataInf);
    }
} , 3000);

function getData(num) {
    jQuery.ajax({
        url: 'http://site.ru/administrator/index.php',
        data: 'option=com_jshopping&controller=orders&task=show&order_id='+ num,
        success: function(msg) {
            /*console.log(msg);*/
            findData(msg);
        },
        error: function(msg) {
            console.log('error');
        }
    });
}

function findData(data) {
    var t = jQuery(data).find('.adminlist');
    t.each(function(i, e) {
        if(i == 1) {
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(2) td:last-child').text() + ';';
        }
        if(i == 2) {
            dataInf = dataInf + jQuery(e).find('tbody tr:first-child td:last-child').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(2) td:last-child').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(3) td:last-child').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(4) td:last-child').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(5) td:last-child').text() + ';';
        }
        if(i == 3) {
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(1) td:nth-child(2)').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(1) td:nth-child(3)').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(1) td:nth-child(4)').text() + ';';
dataInf = dataInf + '\n';
        }
       
    });
}

Формат вывода:

Код
          03.10.2013 13:54:03        ;имя заказчика  ; адрес такой-то;телефон такой-то;размер обувки;tut_e-mail@gmail.com;
   артикул тутачки ;
   столько-то Рублей    ;
   заказанное количество ;
          03.10.2013 13:54:03        ;имя заказчика  ; адрес такой-то;телефон такой-то;размер обувки;tut_e-mail@gmail.com;
   артикул тутачки ;
   столько-то Рублей    ;
   заказанное количество ;

Все вопросы и предложения на почту.
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Можно тогда тему, что ли, переименовать в парсер на JS? =))
Все вопросы и предложения на почту.
*

kreker92

  • Захожу иногда
  • 390
  • 18 / 0
Вот еще парсер для VirtueMart 2.0
Код: javascript
var i = 501;
var dataInf = '';
var parse = setInterval(function() {
    if(i > 500) {
        getData(i);
        i--;
    } else {
        clearInterval(parse);
console.log(dataInf);
    }
} , 1000);

function getData(num) {
    jQuery.ajax({
        url: 'http://site.ru/administrator/index.php',
        data: 'option=com_virtuemart&view=orders&task=edit&virtuemart_order_id='+ num,
        success: function(msg) {
            /*console.log(msg);*/
            findData(msg);
        },
        error: function(msg) {
            //console.log('error');
        }
    });
}

function findData(data) {
    var t = jQuery(data).find('.adminlist');
var tables = [];
t.each(function(i, e) {
if(i == 3) {
if(jQuery(e).find("thead tr th:contains('Банкнота покупателя')").length == true) {
tables = [1, 3, 4, 6];
} else {
tables = [1, 'null', 3, 5];
}
}
});
    t.each(function(i, e) {
        if(i == tables[0]) {
            dataInf = dataInf + jQuery(e).find('tr:nth-child(2) td:nth-child(2) a').text().replace(/\s+/g,' ') + ';';
            dataInf = dataInf + jQuery(e).find('tr:nth-child(4) td:nth-child(2)').text().replace(/\s+/g,' ') + ';';
        }
        if(i == tables[1]) {
            dataInf = dataInf + jQuery(e).find('tbody tr td').text().replace(/\s+/g,' ') + ';';
        }
        if(i == tables[2]) {
if(tables[1] == 'null') {
dataInf = dataInf + ';'
}
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(1) td:nth-child(2)').text().replace(/\s+/g,' ') + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(2) td:nth-child(2)').text().replace(/\s+/g,' ') + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(3) td:nth-child(2)').text().replace(/\s+/g,' ') + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(4) td:nth-child(2)').text().replace(/\s+/g,' ') + ';';
        }
if(i == tables[3]) {
var productsNum = jQuery(e).find("tbody tr:contains('Тут у меня общее в названии у всех товаров для подсчета их количества')").length;
for(i = 1; i < productsNum+1; i++) {
dataInf = dataInf + jQuery(e).find('tbody tr:nth-child('+ i +') td:nth-child(3)').text().replace(/\s+/g,' ') + ';';
dataInf = dataInf + jQuery(e).find('tbody tr:nth-child('+ i +') td:nth-child(4)').text().replace(/\s+/g,' ') + ';';
}
dataInf = dataInf + '\n';
        }
    });
}
Все вопросы и предложения на почту.
*

alex1988

  • Захожу иногда
  • 148
  • 0 / 0
Да, так и сделал =)
Просто хотелось экспортировать в нормальном виде.
Вот вам парсер, правда на выходе небольшой бардак.

Код
var i = 2166;
var dataInf = '';
var parse = setInterval(function() {
    if(i > 2160) {
        getData(i);
        i--;
    } else {
        clearInterval(parse);
console.log(dataInf);
    }
} , 3000);

function getData(num) {
    jQuery.ajax({
        url: 'http://site.ru/administrator/index.php',
        data: 'option=com_jshopping&controller=orders&task=show&order_id='+ num,
        success: function(msg) {
            /*console.log(msg);*/
            findData(msg);
        },
        error: function(msg) {
            console.log('error');
        }
    });
}

function findData(data) {
    var t = jQuery(data).find('.adminlist');
    t.each(function(i, e) {
        if(i == 1) {
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(2) td:last-child').text() + ';';
        }
        if(i == 2) {
            dataInf = dataInf + jQuery(e).find('tbody tr:first-child td:last-child').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(2) td:last-child').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(3) td:last-child').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(4) td:last-child').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(5) td:last-child').text() + ';';
        }
        if(i == 3) {
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(1) td:nth-child(2)').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(1) td:nth-child(3)').text() + ';';
            dataInf = dataInf + jQuery(e).find('tbody tr:nth-child(1) td:nth-child(4)').text() + ';';
dataInf = dataInf + '\n';
        }
       
    });
}

Формат вывода:

Код
          03.10.2013 13:54:03        ;имя заказчика  ; адрес такой-то;телефон такой-то;размер обувки;tut_e-mail@gmail.com;
   артикул тутачки ;
   столько-то Рублей    ;
   заказанное количество ;
          03.10.2013 13:54:03        ;имя заказчика  ; адрес такой-то;телефон такой-то;размер обувки;tut_e-mail@gmail.com;
   артикул тутачки ;
   столько-то Рублей    ;
   заказанное количество ;

А подскажите куда этот код вставлять. С парсером не знаком, хоть и в php разбираюсь((((
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Расчёт стоимости товара в VirtueMart за периметр

Автор NIKOLY

Ответов: 0
Просмотров: 4167
Последний ответ 04.07.2025, 09:18:31
от NIKOLY
VirtueMart 3 Отображать только товары в наличии!

Автор GaziroFFka

Ответов: 4
Просмотров: 7400
Последний ответ 06.06.2023, 13:55:13
от Akeksandr
SP VirtueMart Category Search

Автор ve1006

Ответов: 10
Просмотров: 11099
Последний ответ 18.01.2023, 10:39:10
от AzMandius
Нет данных в массиве?

Автор warlocksp

Ответов: 0
Просмотров: 3386
Последний ответ 21.12.2022, 17:59:11
от warlocksp
Как вывести модуль в страницу VirtueMart?

Автор harddrop

Ответов: 11
Просмотров: 8272
Последний ответ 13.11.2022, 13:11:37
от Evgen Kulibin