Новости Joomla

👩‍💻 ИИ-админ для Joomla ближе, чем вы думаете: Joomla MCP.

👩‍💻 ИИ-админ для Joomla ближе, чем вы думаете: Joomla MCP.

В февральском номере Joomla Community Magazine в статье Evolving Joomla - Joomla CMS MCP Server: Opening the Door to AI-Powered Administration рассказывается о работе команды разработчиков над внедрением в ядро Joomla MCP-сервера.

Что такое MCP-сервер?
Последние годы всех захватывает бум ИИ-технологий. Появились ИИ-агенты - программы, устанавливаемые на сервер или компьютер, которые получают от вас запрос или задачу в человеческом виде и могут выполнять действия с файлами, ходить по сайтам, создавать сайты, программировать и т.д. Люди используют ИИ-агентов в самых разных ситуациях: от написания и проверки кода (даже там, где язык программирования не знаете совсем) до планирования путешествий и бронирования гостиницы.

ИИ-агенты могут использовать различные программные инструменты по протоколу Model Context Protocol (MCP). Для этого разработчик программы должен внедрить MCP в свой продукт или сервис. Так, например, ваш ИИ-агент может ходить по сайтам через браузер и собирать нужную информацию, управляя браузером через MCP-сервер. Или использовать функционал IDE PHP Storm для написания кода, сбора и отладки ошибок, использовать поиск PHP Storm по кодовой базе, а не простой текстовый поиск по файлам. MCP предоставляет набор функций для полноценного управления программным обеспечением.

В случае с Joomla, сервер MCP может предоставить администраторам следующие возможности:
- Автоматическое создание категорий, материалов и меню на основе карты сайта или PDF-файла.
- Создавайть SEO-оптимизированные заголовки и метаописания в пакетном режиме.
- Обновлять расширения на нескольких сайтах одновременно
- Создание посадочные страницы.

Важно отметить, что сервер MCP не задумывался как функция, доступная только «супер-администраторам». Цель инициативы — создать решение, которое будет простым в настройке, маломощным и доступным для широкого круга пользователей.

В процессе разработки точка входа Joomla (аналогично Site, Administrator, Api, Cli), которая будет работать с Streamable HTTP, необходимым для MCP. Аутентификация пока что предполагается на токенах, но затем планируется создание универсального OAuth-сервера для Joomla.
Фактические возможности MCP — инструменты, ресурсы и подсказки — реализованы в виде плагинов для обеспечения расширяемости. Таким образом ожидаем, что и сторонние разработчики смогут создавать MCP-плагины для внедрения поддержки своих расширений Joomla для работы с ИИ.

@joomlafeed

Вышли релизы безопасности Joomla 6.0.4 и Joomla 5.4.4

Релиз безопасности Joomla 6.0.4 и Joomla 5.4.4

Проект Joomla! рад сообщить о выходе Joomla 6.0.4 и Joomla 5.4.4. Это релизы безопасности и исправления ошибок для серий 5.x и 6.x.

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

andrewsis

  • Новичок
  • 2
  • 0 / 0
Добрый день. На моем сайте установлен модуль новостей junewsultra, немного изменен. Выводит на главной странице 12 новостей.
Хочется чтобы был постраничный вывод новостей ( а не переход по разделам и каталогам). Как говорится все в одном :)


Красным помечено как хочется чтобы было.

Вот что нашел:
Цитировать
PHP: простая постраничная разбивка (315 байт)

Сразу приведу пример реализации:

1 2 3 4 5 6 7 8 9 10 11 12 13 ...30

и исходный код функции на PHP в минимизированном виде, 315 байт:

    <?php function PageToArray($pc=1,$pa=10,$pp=15){$r=array();if($pa<=$pp){for($i=1;$i<=$pa;$i++)$r[$i]=$i;}else{$b=$pc-floor($pp/2);if($pp%2==0)$b++;if($b<1)$b=1;if($b+$pp>$pa)$b=$pa-$pp+1;for($i=1;$i<=$pp;$i++)$r[$i]=$b++;if($r[1]!=1){$r[1]=1;$r[2]='...';}if($r[$pp]!=$pa){$r[$pp]=$pa;$r[$pp-1]='...';}}return $r;}?>

А теперь, по порядку
Использование функции


    //$iPage - текущая страница
    //$iAllPage - всего страница
    //30 - выводить за раз 20 страниц, если не указано, то выводиться по 15 страниц.
    $aPage = PageToArray($iPage,$iAllPage,20);

Исходный код функции на PHP


    function PageToArray($pc=1,$pa=10,$pp=15)
        {
        $r = array();
        if ($pa<=$pp)
            {
            for ($i=1;$i<=$pa;$i++)
            $r[$i] = $i;

            } else {

            $b = $pc-floor($pp/2);
            if ( $pp%2==0)
                $b++;
            if ( $b<1 )
                $b = 1;

            if ( $b+$pp > $pa)
                $b = $pa-$pp+1;

            for ($i=1;$i<=$pp;$i++)
                $r[$i] = $b++;

            if ( $r[1]!=1 )
                {
                $r[1] = 1;
                $r[2] = '...';
                }

            if ( $r[$pp]!=$pa )
                {
                $r[$pp] = $pa;
                $r[$pp-1] = '...';
                }
            }

        return $r;
        }

PHP + HTML код

    echo '<p class="page" align="center">';
    foreach ($aPage as $one)
        if ( $one == '...' )
            {
            echo '<span>...</span>';
            } else {
            echo '<a href="?page='.$one.'"'.
                ($one==$iPage?'class="active"':'').'>'.$one.'</a>';
            }
    echo '</p>';

CSS код

    .page a
        {
        padding: 2px 5px;
        font-size: 9pt;
        background: #f7f7f7;
        border: 1px solid #c7c7c7;
        color: #000000;
        text-decoration: none;
        margin: 0px 1px;
        font-weight: bold;
        }

    .page a:hover
        {
        background: #cccccc;
        border: 1px solid #666666;
        text-decoration: none;
        }

    .page a.active
        {
        background: #666666;
        border: 1px solid #666666;
        color: #ffffff;
        font-weight: bold;
        }

    .page a.active:hover
        {
        background: #666666;
        }

    .page span
        {
        font-weight:bold;
        padding:0 5px;
        }

Готовый пример

Сохраняем например в файл pager.php и пробуем.

    <?php

    ###########################
    # Author: www.DimaRF.ru #
    ###########################

    $iAllPage = 30;

    $iPage = (int)$_GET['page'];
    if ( $iPage < 1 or $iPage > $iAllPage )
        $iPage = 1;

    $aPage = PageToArray($iPage,$iAllPage,20);

    function PageToArray($pc=1,$pa=10,$pp=15)
        {
        $r = array();
        if ($pa<=$pp)
            {
            for ($i=1;$i<=$pa;$i++)
            $r[$i] = $i;

            } else {

            $b = $pc-floor($pp/2);
            if ( $pp%2==0)
                $b++;
            if ( $b<1 )
                $b = 1;

            if ( $b+$pp > $pa)
                $b = $pa-$pp+1;

            for ($i=1;$i<=$pp;$i++)
                $r[$i] = $b++;

            if ( $r[1]!=1 )
                {
                $r[1] = 1;
                $r[2] = '...';
                }

            if ( $r[$pp]!=$pa )
                {
                $r[$pp] = $pa;
                $r[$pp-1] = '...';
                }
            }

        return $r;
        }

    ?>
    <html>
    <head>
        <title>Pager</title>
        <style type="text/css">
    <!--
    body
        {
        margin: 20px;
        padding: 20px;
        }

    .page a
        {
        padding: 2px 5px;
        font-size: 9pt;
        background: #f7f7f7;
        border: 1px solid #c7c7c7;
        color: #000000;
        text-decoration: none;
        margin: 0px 1px;
        font-weight: bold;
        }

    .page a:hover
        {
        background: #cccccc;
        border: 1px solid #666666;
        text-decoration: none;
        }

    .page a.active
        {
        background: #666666;
        border: 1px solid #666666;
        color: #ffffff;
        font-weight: bold;
        }

    .page a.active:hover
        {
        background: #666666;
        }

    .page span
        {
        font-weight:bold;
        padding:0 5px;
        }
    -->
        </style>
    </head>
    <body>
    <p class="page" align="center">
    <?php
    foreach ($aPage as $one)
        if ( $one == '...' )
            {
            echo '<span>...</span>';
            } else {
            echo '<a href="?page='.$one.'"'.
                ($one==$iPage?'class="active"':'').'>'.$one.'</a>';
            }
    ?>
    </p>
    </body>
    </html>
взято с http://www.dimarf.ru/useful/pager.html

вот мои файлы:
mod_junewsultra.php
Цитировать
<?php
/**
* @package Joomla! 1.5.x
* @author 2008 (c)  Denys Nosov (aka Dutch)
* @author web-site: www.joomla-ua.org
* @copyright This module is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License.
**/

// no direct access
defined('_JEXEC') or die('Restricted access');

// Include the syndicate functions only once
require_once (dirname(__FILE__).DS.'helper.php');

$list = modJUNewsUltraHelper::getList($params);

if (!count($list)) {
   return;
}

$template = $params->def('template', 'default.php');
$template = str_replace('.php', '', $template);

//READ FULL
$all_in = $params->def('all_in', '0') ;
$link_all_in = trim( $params->get( 'link_all_in', '' ) );
$text_all_in = trim( $params->get( 'text_all_in', 'All in section/category...' ) );
$class_all_in = trim( $params->get( 'class_all_in', 'small' ) );

$layoutpath = JModuleHelper::getLayoutPath('mod_junewsultra', $template );
if( file_exists($layoutpath) ) {
    require($layoutpath);
} else {
    echo JText::_("<strong>Template <span style=\"color: green;\">$template</span> do is not found!</strong><br />Please, upload new template to <em>modules/mod_breakingnews/tmpl</em> folder or select other template from back-end!");
}
if ($all_in==1) {
    echo '<a class="'.$class_all_in.'" href="'.$link_all_in.'">'.$text_all_in.'</a>';
}

?>


image_and_title_in_2column.php
Цитировать
<?php
/**
* @package Joomla! 1.5.x
* @author 2008 (c)  Denys Nosov (aka Dutch)
* @author web-site: www.joomla-ua.org
* @copyright This module is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 License.
**/

// no direct access
defined('_JEXEC') or die('Restricted access');

?>
    <img src="images/line_news.jpg" width="594px" height="4px"/>
<div class="junewsultra<?php echo $params->get('moduleclass_sfx'); ?>">
<?php foreach ($list as $item) :  ?>
   <div class="junews<?php echo $params->get('moduleclass_sfx'); ?>">
        <table width="100%">
            <tr valign="top">
                <td width="450px"><div class="jutitle"><?php echo '<i>'. $item->created . '</i><br />'; ?><span><a href="<?php echo $item->link; ?>"><?php echo $item->text; ?></a></span><br /><div class="jutitle_2"><?php echo $item->introtext; ?></div></div></td>
                <td  align="right"><div class="juimage"><?php echo $item->image; ?></div></td>
            </tr>
        </table>
   </div>
    <img src="images/line_news.jpg" width="594px" height="4px"/>
<?php endforeach; ?>
</div>

Подскажите как соединить код верхнего примера с моими файлами?
« Последнее редактирование: 24.10.2010, 18:34:48 от andrewsis »
*

andrewsis

  • Новичок
  • 2
  • 0 / 0
Буду благодарен любому ответу!  ::)
« Последнее редактирование: 24.10.2010, 18:35:27 от andrewsis »
*

Daniil Solosyatov

  • Осваиваюсь на форуме
  • 37
  • 0 / 0
ответить не смогу, но имею другой вопрос: как новости на главной странице выводить?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод модуля средствами php с привязкой к пунтам меню

Автор Divn

Ответов: 4
Просмотров: 3426
Последний ответ 29.08.2021, 17:02:04
от Divn
Вывод нумерации слайдера Flexslider

Автор timofe

Ответов: 3
Просмотров: 1433
Последний ответ 25.04.2021, 12:07:13
от timofe
Цикличный вывод материалов

Автор loop69

Ответов: 7
Просмотров: 1674
Последний ответ 07.12.2019, 19:00:57
от loop69
Модальное окно вывод в product, косяк

Автор Zlusya

Ответов: 6
Просмотров: 1459
Последний ответ 21.11.2019, 09:24:02
от Zlusya
Как в компоненте JEvents настроить вывод многодневных событий?

Автор sergspb

Ответов: 0
Просмотров: 1144
Последний ответ 18.11.2019, 13:26:37
от sergspb