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

eamat

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Кнопка печати!!!
« : 07.08.2007, 09:30:28 »
 !!!???!!!Помогите,пожалуйста,кто знает как прилепить кнопку печати,очень надо. >:(
*

Timon_Crazy

  • Захожу иногда
  • 364
  • 31 / 4
  • Лицензнаци
Re: Кнопка печати!!!
« Ответ #1 : 07.08.2007, 10:00:06 »
т.е. вместо стандартной чтото другое?
ЧаВо - FAQ - Вопросы
--
Сщастливый безумец -- не говори спасибо: + поставь не ставь минус - поругай.
*

eamat

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Кнопка печати!!!
« Ответ #2 : 07.08.2007, 12:53:21 »
но в AdsManager воабще нет возможности распечатывать таблицы с обьявлениями,покрайней мере я такого не нашел. >:(.Хотелось бы аналогично стандартной кнопки joomla для печати,чтоб иметь возможность распечатывать таблицу с обьявлениями из какой либо категории или все.
*

eamat

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Кнопка печати!!!
« Ответ #3 : 08.08.2007, 19:20:07 »
Хэлп! Не могу разобраться. Помогите с печатью. Вознаграждение 10 wmz!
*

eamat

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Кнопка печати!!!
« Ответ #4 : 09.08.2007, 11:52:43 »
УРААА!!! РАЗОБРАЛСЯ!!!!
Тема закрыта!!!
*

Timon_Crazy

  • Захожу иногда
  • 364
  • 31 / 4
  • Лицензнаци
Re: Кнопка печати!!!
« Ответ #5 : 16.08.2007, 15:22:26 »
и как разобрались? может скажите для будущих поколений
ЧаВо - FAQ - Вопросы
--
Сщастливый безумец -- не говори спасибо: + поставь не ставь минус - поругай.
*

Ruiner

  • Осваиваюсь на форуме
  • 11
  • 0 / 0
Re: Кнопка печати!!!
« Ответ #6 : 04.09.2007, 14:17:02 »
Поделитесь плиз
*

morph

  • Давно я тут
  • 924
  • 105 / 0
Re: Кнопка печати!!!
« Ответ #7 : 04.09.2007, 14:26:37 »
Сделал по тупому(или наоборот слишком умно... ^-^)
Создал шаблон(print),где удалил все ненужное,оставив в body тока
Цитировать
<body>
<div class="div_content" >
    <?php mosMainBody(); ?>
</div>
</body>
Зделал дубликат index.php(printindex.php),назначив там явно созданный шаблон
Цитировать
$cur_template = 'print';

в файле adsmanager.html.php после
Цитировать
<div class="adsmanager_inner_box">
         <?php echo '<div align="left">'.$pagenav->writePagesCounter().'</div>'; ?>
         <form action="index.php" method="get">
         <input type="hidden" name="option" value="<?php echo $option; ?>" />
         <input type="hidden" name="page" value="<?php echo $page;?>" />
         <?php

         switch($page)
         {
            case "show_user":
               echo '<input type="hidden" name="userid" value="'.$userid.'" />';
               break;
            case "show_category":
               echo '<input type="hidden" name="catid" value="'.$catid.'" />';
               break;
         }

         ?>
добавил ссылку на печать
Цитировать
<?php

$link2= $mosConfig_live_site."/".
"printindex.php?option=com_adsmanager&page=show_categoryP&catid={$catid}&text_search=&order=0&expand=0&Itemid={$Itemid}";
?>
<a

href="<?php echo $link2 ?>" target="_blank"

onclick="window.open('<?php echo $link2 ?>','win2','status=no,toolbar=no,scrollbars=no,titlebar=no,menubar=no,resizable=yes,width=920,height=400,directories=no,location=no'); return false;" title="Печать">Печать
<img src="http://www.lsestate.ru/images/M_images/printButton.png"  alt="Версия для печати" name="Версия для печати" align="middle" border="0" /></a>
затем продублировал везьде в файле adsmanager.php функцию show_category,заменив ее на show_categoryP
изменив ее так:
Цитировать
function show_categoryP($catid)
{
   global $database,$mosConfig_absolute_path,$mosConfig_live_site,$my,$mainframe;
   
   
   $database->setQuery( "SELECT c.id, c.name,c.parent ".
               " FROM #__adsmanager_categories as c ".
                   "WHERE c.published = 1 ORDER BY c.parent,c.ordering");
                  
   $listcats = $database->loadObjectList();
   
   
   $list[] = $catid;
   recurseSearch($listcats,$list,$catid);
   $listids = implode(',', $list);
   $database->setQuery("SELECT count(*) FROM #__adsmanager_ads WHERE category IN ($listids)");   
   $search = "category IN ($listids)";
   $url ="index.php?option=$option&amp;page=show_category&amp;catid=".$catid."&amp;text_search=".$text_search."&amp;order=".$order;
   adsListP($cat_name,$cat_description,$url,"show_category",$search,$text_search,$expand,$order,$catid,$option,$limitstart);
продублировал функцию adsList,назвав ее adsListP и заменив там
Цитировать
adsmanager_html::show_listP($catid,$description,$text,$url,$page,$ads,$pageNav,$nav_link,
                        $show_contact,$expand,$order,$text_search,
                        $itemid,$option,$my->id,$update_possible,
                        $searchs,
                        $columns,$fColumn,$positions,$fDisplay,$field_values,
                        $conf,
                        $fields_searchable);
и в файле adsmanager.html.php продублировал функцию show_list,изменив ее так:


Цитировать
function show_list1($catid,$cat_description,$name,$url,$page,$rows,$pagenav,$navlink,
                  $show_contact,$expand ,$order,$text_search,
                  $itemid,$option,$userid,$update_possible,
                  $searchs,
                  $columns,$fColumn,$positions,$fDisplay,$field_values,
                  $conf,
                  $fields_searchable)
   {
      global $mosConfig_live_site,$mosConfig_absolute_path,$mosConfig_live_site,$my;
      
      if ($text_search=="")
         $text_search= ADSMANAGER_SEARCH_TEXT;
         
      /* Display Title */
      ?>
      <br />
      <h1 class="contentheading">
      <?php
         if (($catid == 0)||(!file_exists($mosConfig_absolute_path.'/images/'.$option.'/categories/'.$catid.'cat_t.jpg')))
            echo '';
         else
            echo '<img  class="imgheading" src="'.$mosConfig_live_site.'/images/'.$option.'/categories/'.$catid.'cat_t.jpg" alt="'.$name.'" />';
         echo $name;
      ?>
      </h1>
      <div class="adsmanager_description">
      <?php echo $cat_description; ?>
      </div>
      <?php if ($conf->display_expand == 1) { ?>
      <div class="adsmanager_subtitle">
      <?php
      /* Display SubTitle */
         $target = sefRelToAbs($url."&amp;limit=".$pagenav->limit."&amp;limitstart=".$pagenav->limitstart."&amp;expand=0&amp;Itemid=".$itemid);
        //  echo '<a href="'. $target.'">'.ADSMANAGER_MODE_TEXT.ADSMANAGER_SHORT_TEXT.'</a>';
        //  echo " / ";
          $target = sefRelToAbs($url."&amp;limit=".$pagenav->limit."&amp;limitstart=".$pagenav->limitstart."&amp;expand=1&amp;Itemid=".$itemid);
         // echo '<a href="'.$target.'">'.ADSMANAGER_EXPAND_TEXT.'</a>';
      ?>
      </div>
      <?php }
      ?>
      <script language="JavaScript" type="text/JavaScript">
      <!--
      function jumpmenu(target,obj){
        eval(target+".location='"+obj.options[obj.selectedIndex].value+"'");   
        obj.options[obj.selectedIndex].innerHTML="<?php echo ADSMANAGER_WAIT;?>";         
      }      
      //-->
      </script>
      
      
      <?php adsmanager_html::showGeneralLink1($option,$itemid,$catid,$conf->comprofiler); ?>
      <br />
      <?php
      if ($pagenav->total != 0 )
      {
         if ($expand == 0)
         {
         ?>
            <table class="adsmanager_table">
            <tr>
              <th><?php echo ADSMANAGER_AD;?></th>
              <?php if (isset($columns)) {
              foreach($columns as $col)
              {
               echo "<th>".adsmanager_html::getLangDefinition($col->name)."</th>";
              }
              }
              ?>
              <th><?php echo ADSMANAGER_DATE;?></th>
            </tr>
         <?php
         }
         else
         {
            adsmanager_html::loadScriptImage($conf->image_display,$option);
         }
         
         if (isset($rows)) {
         foreach($rows as $row) {
            if ($expand == 1)
            {
               adsmanager_html::show_html_ad($row,$show_contact,$option,$itemid,$positions,$fDisplay,$field_values,$conf,0,$update_possible);
            }
            else
            {
            $linkTarget = sefRelToAbs( "index.php?option=$option&amp;page=show_ad&amp;adid=".$row->id."&amp;catid=".$row->category."&amp;Itemid=".$itemid);
            ?>
            <tr>
               <td class="adsmanager_table_description">
                  <?php
                  $ok = 0;$i=1;
                  while(!$ok)
                  {
                     if ($i < $conf->nb_images + 1)
                     {
                        $ext_name = chr(ord('a')+$i-1);
                        $pic = $mosConfig_absolute_path."/images/$option/ads/".$row->id.$ext_name."_t.jpg";
                        if (file_exists( $pic))
                        {
                           echo "<a href='".$linkTarget."'><img src='".$mosConfig_live_site."/images/$option/ads/".$row->id.$ext_name."_t.jpg' alt='".htmlspecialchars(stripslashes(adsmanager_html::cutLongWord($row->ad_headline)),ENT_QUOTES)."' /></a>";
                           $ok = 1;
                        }
                     }
                     else if ($conf->nb_images != 0)
                     {
                        if ((ADSMANAGER_NOPIC != "")&&(file_exists($mosConfig_absolute_path."/components/$option/images/".ADSMANAGER_NOPIC)))
                           echo "<a href='".$linkTarget."'><img src='".$mosConfig_live_site."/components/$option/images/".ADSMANAGER_NOPIC."' alt='nopic' /></a>";
                        else
                           echo "<a href='".$linkTarget."'><img src='".$mosConfig_live_site."/components/$option/images/nopic.gif' alt='nopic' /></a>";
                        $ok = 1;
                     }   
                     else
                     {
                        $ok = 1;
                     }
                     $i++;      
                  }
                  ?>
                 <div>
                  <h2>
                     <?php /*?><?php echo '<a href="'.$linkTarget.'">'.stripslashes(adsmanager_html::cutLongWord($row->ad_headline)).'</a>'; ?><?php */?>
                     <span class="adsmanager_cat">
                     <?php /*?><?php
                     $row->ad_text = str_replace ('<br />'," ",stripslashes(adsmanager_html::cutLongWord($row->ad_text)));
                     $af_text = substr($row->ad_text, 0, 100)."...";
                     echo $af_text;
                  ?><?php */?>
                     <?php echo "(".$row->parent." / ".$row->cat.")"; ?></span>                  </h2>
                  </div>
                  
                  <?php
                  if (($my->id == $row->userid)&&($update_possible == 1))   {
                  ?>
                  <div>
                  <?php
                     $target = sefRelToAbs("$mosConfig_live_site/index.php?option=$option&amp;Itemid=$itemid&amp;page=write_ad&amp;adid=$row->id"."&amp;Itemid=".$itemid);
                     echo "<a href='".$target."'>".ADSMANAGER_AD_EDIT."</a>";
                     echo "&nbsp;";
                     $target = sefRelToAbs("$mosConfig_live_site/index.php?option=$option&amp;Itemid=$itemid&amp;page=delete_ad&amp;adid=$row->id"."&amp;Itemid=".$itemid);
                     echo "<a href='".$target."'>".ADSMANAGER_AD_DELETE."</a>";
                  ?>
                  </div>
                  <?php
                  }
                  ?>               </td>
               <?php if (isset($columns))
                  {
                    foreach($columns as $col) {
                     echo '<td class="center">';
                     if(isset($fColumn[$col->id]))
                     {
                        foreach($fColumn[$col->id] as $field)
                        {
                           adsmanager_html::showFieldValue($row,$field,$field_values,$conf->email_display,$option,$itemid,2); /* 2 = List */
                        }
                     }
                     echo "</td>";
                   }
                  }
               ?>
               <td class="center">
                  <?php echo adsmanager_html::reorderDate($row->date_created); ?>
                  <br />
                  <?php
                  if ($row->userid != 0)
                  {
                     echo ADSMANAGER_FROM;

                     if ($conf->comprofiler == 2)
                     {
                     $target = sefRelToAbs("index.php?option=com_comprofiler&amp;task=userProfile&amp;tab=AdsManagerTab&amp;user=".$row->userid."&amp;Itemid=".$itemid);
                     }
                     else
                     {
                     $target = sefRelToAbs("index.php?option=$option&amp;page=show_user&amp;userid=".$row->userid."&amp;Itemid=".$itemid);
                     }
                     
                     echo "<a href='".$target."'>".$row->user."</a><br/>";
                  }
                  ?>
                  <?php echo sprintf(ADSMANAGER_VIEWS,$row->views); ?>               </td>
            </tr>
         <?php   
            }
         }
         }
         
         if ($expand == 1) {
            ?>
            <div class="back_button">
            <a href='javascript:history.go(-1)'>
            <?php echo ADSMANAGER_BACK_TEXT; ?>            </a>            </div>
            <br />
            <br />
            <?php
         }
         else {
            ?>
            </table>
            <?php
         }
         echo '<p align="center">'.$pagenav->writePagesLinks($navlink).'</p>';
      }
      else
      {
         echo ADSMANAGER_NOENTRIES;
      }
   }
   

вышло коряво,но времени на большую оптимизацию небыло,если что не так-обращайтесь ;)
 
*

eX

  • Захожу иногда
  • 256
  • 72 / 0
Re: Кнопка печати!!!
« Ответ #8 : 05.09.2007, 06:11:14 »
И то сойдет, мне тоже нужно было реализовать функцию печати объявления. Спасибо!
*

Mitriy-Bug

  • Захожу иногда
  • 90
  • 1 / 0
  • Верстка сайтов на Joomla
Re: Кнопка печати!
« Ответ #9 : 25.06.2014, 10:44:14 »
А может знаете как вынести стандартную кнопку печати в модуль? У меня есть рад кнопок-ссылок: Главная - Отправить письмо - Печать - Карта сайта.
Я поставил на кнопку печати ссылку - href="<?php
echo "http://".$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI'];
?>?tmpl=component&amp;print=1&amp;page="
Замудренно и не всегда печатает, а на странице каталога JoomShopping вообще не печатает
*

mr.shusty

  • Захожу иногда
  • 167
  • 1 / 0
Re: Кнопка печати!
« Ответ #10 : 25.06.2014, 13:07:34 »
ого! А не проще нажать на клавиатуре CTRL+P, чем в коде ковыряться?)))
*

Mitriy-Bug

  • Захожу иногда
  • 90
  • 1 / 0
  • Верстка сайтов на Joomla
Re: Кнопка печати!
« Ответ #11 : 25.06.2014, 13:17:39 »
Ну так придумал Заказчик. Ему надо именно в шапке кнопку сделать, а не в самом компоненте
сайт
*

mr.shusty

  • Захожу иногда
  • 167
  • 1 / 0
Re: Кнопка печати!
« Ответ #12 : 25.06.2014, 13:23:41 »
Ну так придумал Заказчик. Ему надо именно в шапке кнопку сделать, а не в самом компоненте
сайт

хм.. кнопка то, кстати, не отображается...и по нажатию на ярлык просто страница открывается с каталогом))
*

Mitriy-Bug

  • Захожу иногда
  • 90
  • 1 / 0
  • Верстка сайтов на Joomla
Re: Кнопка печати!
« Ответ #13 : 25.06.2014, 13:28:32 »
а попробуйте на странице контакты допустим, там работает
Осмталось как то пристроить кнопку печати на шаблон JoomShopping, но чтобы она отображалась только при печати
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Нужна кнопка для добавления объявлений в модуле

Автор kushiy

Ответов: 0
Просмотров: 1252
Последний ответ 18.10.2016, 13:11:17
от kushiy
AdsManager пропала кнопка добавить изображение

Автор aleks0412

Ответов: 7
Просмотров: 2700
Последний ответ 07.04.2016, 04:31:16
от ArtCh
Кнопка "Добавить объявление"

Автор meiram077

Ответов: 4
Просмотров: 3009
Последний ответ 16.06.2015, 13:15:39
от biper
Кнопка "Поднять объявление"

Автор girlwolf

Ответов: 7
Просмотров: 4143
Последний ответ 14.12.2013, 23:38:12
от max_1985
Кнопка заказать товар AdsManager 2.7

Автор Esbuyy

Ответов: 1
Просмотров: 1442
Последний ответ 04.05.2013, 12:21:26
от grinat