Новости Joomla

Process Forge — фреймворк для создания AI-процессов.

Process Forge — фреймворк для создания AI-процессов.

На новогодних каникулах 2026 в одном из чатов Joomla-сообщества коллега по цеху поделился промптом для ИИ-агента и результатом этого промпта. За неделю до этого он впервые попробовал Gemini CLI. Я до этого ИИ пользовался только в веб версиях и в целом меня это устраивало. Увидев простыню текста, запрос в CLI и простыню ответа первое, что меня охватило: "Я НЕ ХОЧУ вот это всё изучать! Опять что-то новое, надоело...".

Потом были стадии проб и ошибок, попыток использовать готовые пакеты community skills с гитхаба с ролевым внушением "ты супер-пупер мега-бэкенд-Joomla разработчик с 40-летним опытом, сделай мне красиво". Где-то в середине этого полугодия я стал формализовать свои процессы (а это не только разработка, но и SEO, аналитика, бизнес-аналитика, проработка и выстраивание процессов и т.д., но в итоге это, как правило, или связано с или ведёт к сайту на Joomla). Формализация привела к моему пониманию некоторых базисов, которые общие для всех процессов. Об этом чуть ниже.

Теперь я хочу представить на суд уважаемой публике свои наработки по фреймворку для создания формализованных процессов работы для ИИ-агентов - Process Forge.

- Читать статью на Хабре
- Process Forge (GitHub)

@joomlafeed

Компонент 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

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

024roman

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Как настроить в  AdsManager 2.6.5 компонент sh404SEF ?
*

sattan

  • Осваиваюсь на форуме
  • 29
  • 1 / 0
*

024roman

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Для AdsManager 2.6.5 ничего из этого не подходит
*

sattan

  • Осваиваюсь на форуме
  • 29
  • 1 / 0
Тогда попробуйте установить плагин для sh404SEF непосредственно для AdsManager. Можно посмотреть здесьhttp://joomlaforum.ru/index.php?topic=84894.0. Хотя для какой версии adsmanagerа - неизвестно.
Я когда-то настраивал Joomla 1.5 и  AdsManager 2.6.5 на Artio - все работало отлично, но и для него я скачивал плагин.
Так что искать Вам нужно плагин для AdsManager.
*

024roman

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Конечно плагин, куда же без него, только где его взять, на форуме последний от 09 года, я пробовал не подходит. Первый раз не могу найти решения вопроса сам..
*

sattan

  • Осваиваюсь на форуме
  • 29
  • 1 / 0
Попробуйте вставить этот код в /components/com_sef/sef_ext/  в файл com_adsmanager.php
Код
defined( '_VALID_MOS' ) or die( 'Direct Access to this location is not allowed.' );

// ------------------  standard plugin initialize function - don't change ---------------------------
global $sh_LANG, $sefConfig;  
$shLangName = '';
$shLangIso = '';
$title = array();
$shItemidString = '';
$dosef = shInitializePlugin( $lang, $shLangName, $shLangIso, $option);
// ------------------  standard plugin initialize function - don't change ---------------------------

// ------------------  load language file - adjust as needed ----------------------------------------
$shLangIso = shLoadPluginLanguage( 'com_adsmanager', $shLangIso, '_COM_ADSMANAGER_SEF_ADS');
// ------------------  load language file - adjust as needed ----------------------------------------

// remove common URL from GET vars list, so that they don't show up as query string in the URL
shRemoveFromGETVarsList('option');
shRemoveFromGETVarsList('lang');
if (!empty($Itemid)) shRemoveFromGETVarsList('Itemid');
if (!empty($limit))  shRemoveFromGETVarsList('limit');
if (isset($limitstart)) shRemoveFromGETVarsList('limitstart'); // limitstart can be zero

// start by inserting the menu element title (just an idea, this is not required at all)

$page = isset($page)? @$page : null;
$Itemid = isset($Itemid)? @$Itemid : null;
$text_search = isset($text_search)? @$text_search : null;
$order = isset($order)? @$order : null;
$expand = isset($expand)? @$expand : null;

$shAdsManagerName = shGetComponentPrefix($option);
$shAdsManagerName = empty($shAdsManagerName)? getMenuTitle($option, $task, $Itemid, null, $shLangName) : $shAdsManagerName;

if (!$expand) shRemoveFromGETVarsList('expand');
if (!$order) shRemoveFromGETVarsList('order');
//if ($text_search==0) shRemoveFromGETVarsList('text_search');

$title[] = $shAdsManagerName;
switch ($page) {
  case 'show_profile': {
$title[] = $userid;
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_EDIT'];
shRemoveFromGETVarsList('page');
shRemoveFromGETVarsList('userid');
    break;
  }
  
  case 'save_profile': {
$title[] = $userid;
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_PROFILE'];
shRemoveFromGETVarsList('page');
shRemoveFromGETVarsList('userid');
    break;
  }
  
  case 'show_user': {
if (isset($userid)){
$title[] = $userid;
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_USER'];
shRemoveFromGETVarsList('userid');
}
else
{
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_MY_ADS'];
}
shRemoveFromGETVarsList('page');
    break;
  }
  
  case 'show_category': {

if ($catid != 0)
{
$database->setQuery( "SELECT c.* FROM #__adsmanager_categories as c ".
"WHERE c.published = 1 ORDER BY c.parent,c.ordering");

$rows = $database->loadObjectList();
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}

// establish the hierarchy of the menu
$orderlist = array();
$current_list = array();
// first pass - collect children
foreach ($rows as $v ) {
$orderlist[$v->id] = $v;
}

$current = $catid;
while($orderlist[$current]->id != 0)
{
$current_list[] = $orderlist[$current]->name;
$current = $orderlist[$current]->parent;
}
}

$size = count($current_list);
for($i = $size -1;$i>0;$i--)
{
$title[] = $current_list[$i];
}
$title[]=$current_list[0];
shRemoveFromGETVarsList('page');
shRemoveFromGETVarsList('catid');
    break;
  }

  case 'show_rules': {
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_RULES'];
shRemoveFromGETVarsList('page');
    break;
  }

  case 'show_ad': {

$database->setQuery("SELECT category, ad_headline FROM #__adsmanager_ads WHERE id=$adid");
$rows = $database->loadObjectList();
$text = $rows[0]->ad_headline;
$catid = $rows[0]->category;

$database->setQuery( "SELECT c.* FROM #__adsmanager_categories as c ".
"WHERE c.published = 1 ORDER BY c.parent,c.ordering");

$rows = $database->loadObjectList();
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}

// establish the hierarchy of the menu
$orderlist = array();
// first pass - collect children
foreach ($rows as $v ) {
$orderlist[$v->id] = $v;
}

$current = $catid;
if (count($orderlist) > 0)
{
while($orderlist[$current]->id != 0)
{
$current_list[] = $orderlist[$current]->name;
$current = $orderlist[$current]->parent;
}
}

$size = count($current_list);
for($i = $size -1;$i>0;$i--)
{
$title[] = $current_list[$i];
}
if (count($current_list) > 0)
$title[]= $current_list[0];

$text = substr($text,0,40);

$title[] = $adid;
$title[] = $text;
shRemoveFromGETVarsList('page');
shRemoveFromGETVarsList('adid');
shRemoveFromGETVarsList('catid');
    break;
  }

  case 'write_ad': {
  
if (!isset($adid)) {

if (!isset($catid)) {
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_WRITE_AD'];
}
else
{
$database->setQuery( "SELECT c.* FROM #__adsmanager_categories as c ".
"WHERE c.published = 1 ORDER BY c.parent,c.ordering");

$rows = $database->loadObjectList();
if ($database -> getErrorNum()) {
echo $database -> stderr();
return false;
}

// establish the hierarchy of the menu
$orderlist = array();
$current_list = array();
// first pass - collect children
foreach ($rows as $v ) {
$orderlist[$v->id] = $v;
}

$current = $catid;
while($orderlist[$current]->id != 0)
{
$current_list[] = $orderlist[$current]->name;
$current = $orderlist[$current]->parent;
}

$size = count($current_list);
for($i = $size -1;$i>0;$i--)
{
$title[] = $current_list[$i];
}
$title[]=$current_list[0];

$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_WRITE_AD'];
shRemoveFromGETVarsList('catid');
}
}
else
{
$database->setQuery("SELECT category, ad_headline FROM #__adsmanager_ads WHERE id=$adid");
$rows = $database->loadObjectList();
$text = $rows[0]->ad_headline;
$catid = $rows[0]->category;

$database->setQuery("SELECT name, parent FROM #__adsmanager_categories WHERE published='1' AND id=$catid");

$rows_categories = $database->loadObjectList();
$cat_name = $rows_categories[0]->name;
$parentid = $rows_categories[0]->parent;

if ($parentid != 0)
{
$parent = $rows_categories[0]->parent;
$database->setQuery("SELECT name FROM #__adsmanager_categories WHERE published='1' AND id=$parent");

$rows_categories = $database->loadObjectList();
$parent_name = $rows_categories[0]->name;
$title[] = $parent_name;
}

$title[] = $cat_name;

$text = substr($text,0,40);

$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_UPDATE'];
$title[] = $adid;
$title[] = $text;
shRemoveFromGETVarsList('adid');
shRemoveFromGETVarsList('catid');
}
shRemoveFromGETVarsList('page');
    break;
  }
  
  case 'save_ad': {
if (!isset($adid)) {
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_SAVE_AD'];
}
else
{
$database->setQuery("SELECT category, ad_headline FROM #__adsmanager_ads WHERE id=$adid");
$rows = $database->loadObjectList();
$text = $rows[0]->ad_headline;
$catid = $rows[0]->category;

$database->setQuery("SELECT name, parent FROM #__adsmanager_categories WHERE published='1' AND id=$catid");

$rows_categories = $database->loadObjectList();
$cat_name = $rows_categories[0]->name;
$parentid = $rows_categories[0]->parent;

if ($parentid != 0)
{
$parent = $rows_categories[0]->parent;
$database->setQuery("SELECT name FROM #__adsmanager_categories WHERE published='1' AND id=$parent");

$rows_categories = $database->loadObjectList();
$parent_name = $rows_categories[0]->name;
$title[] = $parent_name;
}

$title[] = $cat_name;

$text = substr($text,0,40);

$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_SAVE'];
$title[] =$adid;
$title[] = $text;

shRemoveFromGETVarsList('adid');
shRemoveFromGETVarsList('catid');
}
shRemoveFromGETVarsList('page');
    break;
  }

  case 'delete_ad': {
    if (!isset($adid)) {
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_DELETE_AD'];
}
else
{
$database->setQuery("SELECT category, ad_headline FROM #__adsmanager_ads WHERE id=$adid");
$rows = $database->loadObjectList();
$text = $rows[0]->ad_headline;
$catid = $rows[0]->category;

$database->setQuery("SELECT name, parent FROM #__adsmanager_categories WHERE published='1' AND id=$catid");

$rows_categories = $database->loadObjectList();
$cat_name = $rows_categories[0]->name;
$parentid = $rows_categories[0]->parent;

if ($parentid != 0)
{
$parent = $rows_categories[0]->parent;
$database->setQuery("SELECT name FROM #__adsmanager_categories WHERE published='1' AND id=$parent");

$rows_categories = $database->loadObjectList();
$parent_name = $rows_categories[0]->name;
$title[] = $parent_name;
}

$title[] = $cat_name;
$text = substr($text,0,40);

$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_DELETE'];
$title[] = $adid;
$title[] = $text;
shRemoveFromGETVarsList('catid');
shRemoveFromGETVarsList('adid');
shRemoveFromGETVarsList('page');  
}
shRemoveFromGETVarsList('page');
    break;
  }
  
  case 'show_all': {
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_ALL_ADS'];
shRemoveFromGETVarsList('page');
break;
  }
  
  case 'show_search': {
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_SHOW_SEARCH'];
shRemoveFromGETVarsList('page');
break;
  }
  
  case 'show_result': {
$title[] = $sh_LANG[$shLangIso]['_COM_ADSMANAGER_SEF_SHOW_RESULT'];
shRemoveFromGETVarsList('page');
break;
  }

  default: {
     //$title[] = "indice";
    break;
  }
}
  
// ------------------  standard plugin finalize function - don't change ---------------------------  
if ($dosef){
   $string = shFinalizePlugin( $string, $title, $shAppendString, $shItemidString,
      (isset($limit)? @$limit : null), (isset($limitstart)? @$limitstart : null),
      (isset($shLangName)? @$shLangName : null));
}      
// ------------------  standard plugin finalize function - don't change ---------------------------
*

024roman

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
Непомогло
*

024roman

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
вставить в  /components/com_sh404sef/sef_ext/  в файл com_adsmanager.php
*

Usman48

  • Захожу иногда
  • 177
  • 7 / 0
Всё перепробовал что здесь на форуме писали - ничего не помогает, оставил как есть. Может не ЧПУ, а хотя бы ссылки вида
http://joomlaforum.ru/cat321423/4325454.html
возможно сделать?

А то у меня сейчас вот такая ссылка:
http://мой-сайт.ru/index.php?option=com_adsmanager&view=details&id=21&catid=5&Itemid=14
*

Grendy

  • Захожу иногда
  • 247
  • 26 / 0
Всё перепробовал что здесь на форуме писали - ничего не помогает, оставил как есть. Может не ЧПУ, а хотя бы ссылки вида
http://joomlaforum.ru/cat321423/4325454.html
возможно сделать?

А то у меня сейчас вот такая ссылка:
http://мой-сайт.ru/index.php?option=com_adsmanager&view=details&id=21&catid=5&Itemid=14


Можно. Читайте FAQ Joomla!.
Плюс в репутацию больше говорит о благодарности, чем слово "Спасибо" в теме, которую повторно, возможно, никогда уже не посетишь.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено]Дублирования ссылки "объвления" в breadcrumb, в компоненте AdsManager

Автор nicklas

Ответов: 4
Просмотров: 9720
Последний ответ 25.04.2024, 23:13:18
от Rinat abzyi
AdsManager вывод нужных полей по отдельности

Автор klekovkinandrey

Ответов: 2
Просмотров: 20444
Последний ответ 06.04.2024, 09:54:15
от Rinat abzyi
Компонент комментарий для Ads?

Автор FlexNL

Ответов: 0
Просмотров: 3591
Последний ответ 06.11.2021, 12:30:11
от FlexNL
AdsManager загрузка файлов

Автор FlexNL

Ответов: 1
Просмотров: 8737
Последний ответ 21.10.2021, 17:20:09
от khan-alex
AdsManager 2.9.13 Есть ли возможность добавить функцию снять с публикации по мимо редактировать и уд

Автор murovoz

Ответов: 11
Просмотров: 19338
Последний ответ 27.03.2020, 22:39:23
от Pavel