Новости 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 Ответов
  • 3022 Просмотров
*

kisBoss

  • Захожу иногда
  • 449
  • 36 / 0
  • ник Tobol
Поиск по фразе целиком
« : 02.02.2013, 10:57:41 »
Подскажите как можно следующий код привести к тому, чтобы поиск осуществлялся по фразе целиком.
Например, есть запрос "Петров Иван". Нужно чтобы искал именно "Петров Иван", а не выдавал результаты "Петров", "Иван". Просто со словом "Иван", выводятся такие люди, как "Сидоров Иван".
Цитировать
$sql .= " AGAINST ({$text} IN BOOLEAN MODE)";
Вообще то вопрос относится к компоненту k2, но в данном разделе ответа не дождешься.
Если помог - поставте "плюс". Вам ничего не стоит, а мне приятно.
*

SmiP

  • Захожу иногда
  • 265
  • 35 / 0
Re: Поиск по фразе целиком
« Ответ #1 : 02.02.2013, 15:07:54 »
Чтобы не ждать тык
*

kisBoss

  • Захожу иногда
  • 449
  • 36 / 0
  • ник Tobol
Re: Поиск по фразе целиком
« Ответ #2 : 02.02.2013, 18:16:11 »
Я уже перелазил куча сайтов, где описывается подобная тема. Однако не получается.
Если помог - поставте "плюс". Вам ничего не стоит, а мне приятно.
*

kisBoss

  • Захожу иногда
  • 449
  • 36 / 0
  • ник Tobol
Re: Поиск по фразе целиком
« Ответ #3 : 03.02.2013, 10:07:01 »
Разве никто в этом не разбирается?
Если помог - поставте "плюс". Вам ничего не стоит, а мне приятно.
*

kisBoss

  • Захожу иногда
  • 449
  • 36 / 0
  • ник Tobol
Re: Поиск по фразе целиком
« Ответ #4 : 05.02.2013, 14:14:21 »
Может за денежку кто сделает?
Вот часть кода из файла ...\components\com_k2\models\itemlist.php, который, как я думаю, отвечает за этот поиск
Цитировать
function prepareSearch($search)
    {

        jimport('joomla.filesystem.file');
        $db = JFactory::getDBO();
        $language = JFactory::getLanguage();
        $defaultLang = $language->getDefault();
        $currentLang = $language->getTag();
        $length = JString::strlen($search);
        $sql = '';

        if (JRequest::getVar('categories'))
        {
            $categories = @explode(',', JRequest::getVar('categories'));
            JArrayHelper::toInteger($categories);
            $sql .= " AND i.catid IN (".@implode(',', $categories).") ";
        }

        if (empty($search))
        {
            return $sql;
        }

        if (JString::substr($search, 0, 1) == '"' && JString::substr($search, $length - 1, 1) == '"')
        {
            $type = 'exact';
        }
        else
        {
            $type = 'any';
        }

        if (JFile::exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomfish'.DS.'joomfish.php') && $currentLang != $defaultLang)
        {

            $conditions = array();
            $search_ignore = array();

            $ignoreFile = $language->getLanguagePath().DS.$currentLang.DS.$currentLang.'.ignore.php';

            if (JFile::exists($ignoreFile))
            {
                include $ignoreFile;
            }

            if ($type == 'exact')
            {

                $word = JString::substr($search, 1, $length - 2);

                if (JString::strlen($word) > 3 && !in_array($word, $search_ignore))
                {
                    $escaped = K2_JVERSION == '15' ? $db->getEscaped($word, true) : $db->escape($word, true);
                    $word = $db->Quote('%'.$escaped.'%', false);

                    $jfQuery = " SELECT reference_id FROM #__jf_content as jfc LEFT JOIN #__languages as jfl ON jfc.language_id = jfl.".K2_JF_ID;
                    $jfQuery .= " WHERE jfc.reference_table = 'k2_items'";
                    $jfQuery .= " AND jfl.code=".$db->Quote($currentLang);
                    $jfQuery .= " AND jfc.published=1";
                    $jfQuery .= " AND jfc.value LIKE ".$word;
                    $jfQuery .= " AND (jfc.reference_field = 'extra_fields_search'
               )";
                    $db->setQuery($jfQuery);
                    $result = K2_JVERSION == '30' ? $db->loadColumn() : $db->loadResultArray();
                    $result = @array_unique($result);
                    JArrayHelper::toInteger($result);
                    if (count($result))
                    {
                        $conditions[] = "i.id IN(".implode(',', $result).")";
                    }

                }

            }
            else
            {
                $search = explode(' ', JString::strtolower($search));
                foreach ($search as $searchword)
                {

                    if (JString::strlen($searchword) > 3 && !in_array($searchword, $search_ignore))
                    {

                        $escaped = K2_JVERSION == '15' ? $db->getEscaped($searchword, true) : $db->escape($searchword, true);
                        $word = $db->Quote('%'.$escaped.'%', false);

                        $jfQuery = " SELECT reference_id FROM #__jf_content as jfc LEFT JOIN #__languages as jfl ON jfc.language_id = jfl.".K2_JF_ID;
                        $jfQuery .= " WHERE jfc.reference_table = 'k2_items'";
                        $jfQuery .= " AND jfl.code=".$db->Quote($currentLang);
                        $jfQuery .= " AND jfc.published=1";
                        $jfQuery .= " AND jfc.value LIKE ".$word;
                        $jfQuery .= " AND (jfc.reference_field = 'extra_fields_search'                           
                  )";
                        $db->setQuery($jfQuery);
                        $result = K2_JVERSION == '30' ? $db->loadColumn() : $db->loadResultArray();
                        $result = @array_unique($result);
                        foreach ($result as $id)
                        {
                            $allIDs[] = $id;
                        }

                        if (JFile::exists(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_joomfish'.DS.'joomfish.php') && $currentLang != $defaultLang)
                        {

                            if (isset($allIDs) && count($allIDs))
                            {
                                JArrayHelper::toInteger($allIDs);
                                $conditions[] = "i.id IN(".implode(',', $allIDs).")";
                            }

                        }

                    }

                }

            }

            if (count($conditions))
            {
                $sql .= " AND (".implode(" OR ", $conditions).")";
            }

        }
        else
        {

            $sql .= " AND MATCH(i.extra_fields_search) ";
            if ($type == 'exact')
            {
                $text = JString::trim($search, '"');
                $escaped = K2_JVERSION == '15' ? $db->getEscaped($text, true) : $db->escape($text, true);
                $text = $db->Quote('"'.$db->getEscaped($text, true).'"', false);
            }
            else
            {
                $search = JString::str_ireplace('*', '', $search);
                $words = explode(' ', $search);
                for ($i = 0; $i < count($words); $i++)
                {
                    $words[$i] .= '*';
                }
                $search = implode(' ', $words);
                $escaped = K2_JVERSION == '15' ? $db->getEscaped($search, true) : $db->escape($search, true);
                $text = $db->Quote($escaped, false);
            }
            $sql .= " AGAINST ({$text} IN BOOLEAN MODE)";

        }

        return $sql;
    }
« Последнее редактирование: 05.02.2013, 14:17:34 от kisBoss »
Если помог - поставте "плюс". Вам ничего не стоит, а мне приятно.
*

kisBoss

  • Захожу иногда
  • 449
  • 36 / 0
  • ник Tobol
Re: Поиск по фразе целиком
« Ответ #5 : 06.02.2013, 11:39:47 »
Вопрос решен при помощи уважаемого Dron79 в разделе коммерчиских вопросов.
Если помог - поставте "плюс". Вам ничего не стоит, а мне приятно.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Поиск по выборке

Автор Axelkz

Ответов: 3
Просмотров: 1822
Последний ответ 11.12.2019, 12:43:40
от beliyadm
Стандартный поиск если 0 результатов

Автор vladsklyar

Ответов: 1
Просмотров: 1343
Последний ответ 23.11.2016, 21:35:05
от vladsklyar
поиск как его включить?

Автор hels

Ответов: 2
Просмотров: 1275
Последний ответ 28.12.2015, 12:02:38
от hels
Поиск по отдельно-взятой категории

Автор Igoritaly

Ответов: 0
Просмотров: 1080
Последний ответ 02.11.2015, 08:28:09
от Igoritaly
Опять про поиск на сайте

Автор Stasweb

Ответов: 2
Просмотров: 1499
Последний ответ 03.10.2015, 17:46:08
от voland