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

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Несколько лет назад я написала плагин hkm_profile, позволяющий генерировать поля расширенного профиля cms Joomla. Сейчас хочу поделиться с вами его развитием - zygo_profile. Точнее, уже тремя расширениями.



ОПИСАНИЕ И СКРИНШОТЫ:
Более подробное описание со ссылками на скачивание расширений находится здесь:
http://www.psytronica.ru/2015/10/joomla-3x-zygoprofile-hkmprofile.html

В двух словах: пользователь получает возможность заполнить в своем профиле при регистрации/правке профиля дополнительные поля расширенного профиля (например: загрузить аватар, добавить личную подпись, выбрать день рождения, свой пол из выпадающего списка.... Состав полей не является определенным, пользователь создает его сам, как конструктор). Данные поля настраиваются в админ-панели плагина Zygo Profile - определяется их состав, тип, названия, required и прочие свойства. Поля могут быть разных типов: текстовые, списки, радиокнопки, аватар, дата.  Затем при помощи плагина  Zygo Profile Content можно вывести информацию из этих полей в материалы Joomla (отобразить аватар блоггера, вывести его подпись).

Ссылки на GitHub:  

Zygo Profile - Плагин расширенного профиля пользователя:
GitHub: https://github.com/psytronica/zygoprofile

Ветка "Development" : https://github.com/psytronica/zygoprofile/tree/development

Zygo Profile Content - Плагин вывода полей расширенного профиля в материалы Joomla
GitHub: https://github.com/psytronica/plg_content_zygo_profile

Zygo Online - Модуль "кто на сайте" с выводом аватаров пользователей из расширенного профиля
GitHub: https://github.com/psytronica/mod_zygo_online

Zygo Jcomments - Плагин для отображения аватара из Zygo Profile в jComments (автор docenttmp):
GitHub: https://github.com/docenttmp/plg_jcomments_zygo_avatar
docenttmp также сделал возможность отображения online/offline в комментариях. Инструкции в настройках плагина

Zygo Kunena Avatars - Плагин для отображения аватара из Zygo Profile в форуме Kunena
GitHub: https://github.com/psytronica/Zygo-Kunena-Avatars

ДЕМО-ПЕСОЧНИЦА:

http://psytronica.getenjoyment.net/
Весь дополнительный функционал - аватары, любимые цвета, выводится посредством плагина Zygo Profile Content
Место вывода полей, количество, и т.д. настраивается в админ-панели плагина

Плагин Zygo Profile  содержит API, позволяющий выводит информацию расширенных полей пользователей (напр. аватары, дни рождения и т.д.) в произвольном месте и использоваться для интеграций с другими расширениями

На данный момент доступна только русская локализация. В дальнейшем думаю выложить английскую и испанскую. Если кто-то вдруг захочет присоединиться к локализации - буду только рада)

Буду рада вашим вопросам, советам по улучшению приложения и конструктивной критике
*

T34

  • Новичок
  • 9
  • 1 / 0
Чудесная Зья, я опять к Вам с вопросом.

Оказалось, рано я возрадовался, так как вытащить из "user_profiles" нужно несколько значений и вставить их в соответствующие поля, а переменная $fid в замечательном вашем решении только одна. Причем тащить нужно и вставленные расширенным профилем значения, и встроенным в Joomla! тоже. И всё это одновременно, поскольку потом в скрытых полях <input> всё в соответствующем оформлении должно разом по submit улететь в цель. С вылетом проблем нет, а вот собрать пассажиров — это прям вот ад для меня оказался.

Как их всех лучше собрать, не надоумите ли?  ^-^

 
« Последнее редактирование: 21.07.2016, 14:53:26 от T34 »
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
А в чем сложность?

Для нескольких полей zygo_profile вот пример:

Код: php
<?php

$fid1 = 1;
$field1 = ZygoHelper::getFieldData($fid1, $user->id);

$fid2 = 3;
$field2 = ZygoHelper::getFieldData($fid2, $user->id);

echo $fid1;
echo $fid2;
?>

Для нескольких стандартных полей такой пример:

Код: php
<?php

$uinfo = ZygoHelper::getUserInfo($user->id);
 
$fieldname1 = "city";
 
$field_value1 = json_decode($uinfo["profile.".$fieldname1]);

$fieldname2 = "postal";
 
$field_value2 = json_decode($uinfo["profile.".$fieldname2]);
 
echo $field_value1;

echo $field_value2;

?>
*

T34

  • Новичок
  • 9
  • 1 / 0
Конечно, если такая мастерица — то не сложно.
Спасибо огромное Вам! Выручили!

*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Небольшое обновление - теперь можно назначать дополнительные поля одной или нескольким группам пользователей. Так, например, поле, которые Вы назначили пользователям группы manager, будет отображаться в профиле у пользователей, приналежащих этой группе. Так же у них появится возможность редактировать содержимое данного поля.
*

voland

  • Легенда
  • 11026
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

fandjuml

  • Захожу иногда
  • 59
  • 6 / 3
Небольшое обновление - теперь можно назначать дополнительные поля одной или нескольким группам пользователей. Так, например, поле, которые Вы назначили пользователям группы manager, будет отображаться в профиле у пользователей, приналежащих этой группе. Так же у них появится возможность редактировать содержимое данного поля.
Рад что Вы вернулись с новым функционалом! Мне такое как раз нужно - именно поля по группам пользователей.
Меня полностью устраивает zygo_profile, но всё таки задам вопрос:
Есть ли возможность переделать плагин так, чтобы в профиле сначала стоял zigo, а после Joomla. Хотя бы на страничке редактирования профиля. Всё таки приятней когда редактирование начинается с аватара и расширенных полей, а Joomla поля опустить в подвал.
Да если честно - и в самом профиле аватарку поднять бы на самый верх. Меня это не напрягает, но если есть возможность я был бы не против.

*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
fandjuml, я подумала над Вашим предложением, еще раз проанализировала код и поняла, что все-таки в плагине я это пока реализовывать не буду, чтобы избежать несовместимостей с более поздними версиями Joomla, поскольку там получится много завязок на конкретные детали. Но для вас я сделала такую возможность. Файл https://dl.dropboxusercontent.com/u/13153899/psytronica/adds/zygo_profile.php необходимо необходимо положить в plugins/user/zygo_profile/. К тому же, это не решает абсолютно вашу задачу, поскольку в случае просмотра и редактирования профиля в шаблоне (components/com_users/views/profile/tmpl/default.php) прописано четко, что вначале загружаются параметры core, затем params, а уж только потом - custom

вот эти строки:
Код: php
<?php echo $this->loadTemplate('core');?>

<?php echo $this->loadTemplate('params');?>

<?php echo $this->loadTemplate('custom');?>


Гораздо проще это решить иным путем - через файлы шаблона. В директории вашего шаблона сайта создаете папку HTML (если еще не создана), в ней - com_users (если еще нет) и туда кладете файлы шаблона (копируете в поддиректории соответствующие tmpl из компонента com_users). В частности, после копирования components/com_users/views/profile/tmpl/default.php в templates/ваш_шаблон/com_users/profile/default.php, меняете в нем порядок вывода:

Код: php
<?php echo $this->loadTemplate('custom');?>

<?php echo $this->loadTemplate('core');?>

<?php echo $this->loadTemplate('params');?>

Так же копируются файлы из registration. Если необходимо, могу более подробно вам написать, что да как поправить, чтобы получить нужный вам результат.
*

fandjuml

  • Захожу иногда
  • 59
  • 6 / 3
Спасибо! Буду изучать и пробовать, но наверное уже завтра, чтоб вдруг что можно было откатить (просто у меня хостер в три ночи копии делает, а акебу я на этот сайт не ставил).

По вашему сайту (троника) есть замечание. Может помните, когда то коммент делал, а он на следующий день слетел, но Вы здесь в теме дали разъяснение на тот вопрос. Вот вчера на страничке с интеграцией с JComments оставил коммент, а сегодня он слетел. Писал как аноним. Похоже так много комментов у вас улетает.
И ещё. Разместите пожалуйста на странице компонента или где в менюшке ссылку на интеграцию с JComments, а то эту запись можно найти только через поиск и это только потому что я знал, что запись есть.

В остальном всё отлично:
Joomla! - 3.6.4
Версия PHP - 7.0.11
Интеграция со SLogin и JComments.
Как часики!
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
fandjuml, насчёт сайта, спасибо Вам за замечание :) видимо таки-придётся на платный хостинг переходить. Сейчас я на blogspot. Кстати, на почту я Ваш комментарий получила, странно, что у них опять этот глюканат вышел. Поставила disqus, надеюсь, теперь ничего пропадать не будет

Ссылку размещу, тоже хорошо, что напомнили. Я думала сделать на этот счёт вообще отдельный плагин и выложить его среди других

*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
По просьбам пользователей я добавила в плагин 3 новых поля:
 checkbox - одинарный чекбокс
 checkboxes - несколько чекбоксов, по сути поле соответствует полю списка множественного выбора
 html - произвольный html-код

Поля checkbox и checkboxes генерируются на основе стандартных полей Joomla


*

rixter

  • Захожу иногда
  • 95
  • 9 / 0
  • Кто юзал мой писи?
Здравствуйте!
sherza, огромное спасибо за плагин!

Столкнулся вот с такой "проблемой".
Исходные данные:
- J 2.5 (к сожалению)
- ID администратора 1
- ID пользователя 5

Захожу под пользователем, на странице ред.профиля открываю ссылку "изменить аватар" в новом окне, меняю ID в конце ссылки с 5 на 1 и обновляю страницу. Загружаю и сохраняю аватар, в ответ "Error error|ACCESS DENIED success http://сайт/media/plg_zygo_profile/1/tmp_large1110919224.jpg,400,250". В указанной папке действительно появляется файл tmp_large1110919224.jpg. Настораживает меня этот момент, есть основания для беспокойства?
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
rixter, спасибо, что обратили внимание. Я поправила этот момент.
Напортить чужому пользователю ваш пользователь при таком раскладе не мог, но вот намусорить в папке - это верно.
*

rixter

  • Захожу иногда
  • 95
  • 9 / 0
  • Кто юзал мой писи?
Заменил zygo_profile.php и avatar_showform.php новыми (вроде бы только они исправлены если верить гитхабу).
Удалил аватар у пользователя, сохранил профиль, захожу в изменить аватар, вместо кнопки загрузить - ACCESS DENIED. Под админом все норм.
*

rixter

  • Захожу иногда
  • 95
  • 9 / 0
  • Кто юзал мой писи?
sherza, спасибо! Работает как надо.
*

Mick_20

  • Завсегдатай
  • 1030
  • 13 / 0
  • Что тут писать?
Подскажите пожалуйста как хранятся данные полей?
Не могу найти в БД нужную таблицу.
Мой сайт про корабли
*

b2z

  • Глобальный модератор
  • 7288
  • 778 / 0
  • Разраблю понемногу
*

Mick_20

  • Завсегдатай
  • 1030
  • 13 / 0
  • Что тут писать?
Не помешала бы наверное еще возможность объединять поля в группы (филдсеты) и именовать эти группы(задавать legend).

Например:
Домашний адрес (список полей)
Рабочий адрес (список полей)
Социальные сети (список полей)

Хотя может быть это возможно реализовать вручную. Я не знаю как.
Подскажите, если знаете.
Мой сайт про корабли
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Mick_20, я вам подскажу, как сделать вручную, но для этого мне нужно знать, существует ли у вас файлы
templates/_ваш_шаблон_сайта_/html/com_users/registration/default.php и 
templates/_ваш_шаблон_сайта_/html/com_users/profile/default_custom.php?
Если хотя бы один из данных файлов лежит по указанному пути, приведите его содержимое
*

Mick_20

  • Завсегдатай
  • 1030
  • 13 / 0
  • Что тут писать?
Mick_20, я вам подскажу, как сделать вручную, но для этого мне нужно знать, существует ли у вас файлы
templates/_ваш_шаблон_сайта_/html/com_users/registration/default.php и 
templates/_ваш_шаблон_сайта_/html/com_users/profile/default_custom.php?
Если хотя бы один из данных файлов лежит по указанному пути, приведите его содержимое

Мне бы на странице редактирования в профиле )
Но файл страницы регистрации в шаблоне переопределен (.../com_users/registration/default.php)
Спойлер
[свернуть]
Мой сайт про корабли
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Mick_20, в вашем случае проще всего сделать так (Необходимо заполнить массив $zygo_data по-своему):

Код: php
<?php
// uniqueID2, uniqueID6 - поля расширенного профиля, ПЕРЕД которыми
// должен начинаться новый fieldset
// Значения id (2, 6) можно увидеть в админ-панели плагина при редактировании
// дополнительных полей

// Заголовок 1, Заголовок 2 - текст legend в fieldset

$zygo_data = array(
"uniqueID2" => "Заголовок 1",
"uniqueID6" => "Заголовок 2"
);
$zygo_count = 0;

?>
<div class="registration<?php echo $this->pageclass_sfx?>">
<?php if ($this->params->get('show_page_heading')) : ?>
<div class="page-header">
<h1><?php echo $this->escape($this->params->get('page_heading')); ?></h1>
</div>
<?php endif; ?>
 
<form id="member-registration" action="<?php echo JRoute::_('index.php?option=com_users&task=registration.register'); ?>" method="post" class="form-validate form-horizontal well" enctype="multipart/form-data">
<?php // Iterate through the form fieldsets and display each one. ?>
<?php foreach ($this->form->getFieldsets() as $fieldset): ?>
<?php $fields = $this->form->getFieldset($fieldset->name);?>
<?php if (count($fields)):?>

<?php if ($fieldset->name != "zygo_profile"): ?>

<fieldset>
<?php // If the fieldset has a label set, display it as the legend. ?>
<?php if (isset($fieldset->label)): ?>
<legend><?php echo JText::_($fieldset->label);?></legend>
<?php endif;?>

<?php endif; ?>


<?php // Iterate through the fields in the set and display them. ?>
<?php foreach ($fields as $field) : ?>

<?php if ($fieldset->name == "zygo_profile" &&
isset($zygo_data[$field->getAttribute("name")])):

if ($zygo_count > 0) echo "</fieldset>";

$zygo_count++; ?>

<fieldset>
<legend>
<?php echo $zygo_data[$field->getAttribute("name")]; ?>
</legend>

<?php endif; ?>

<?php // If the field is hidden, just display the input. ?>
<?php if ($field->hidden): ?>
<?php echo $field->input;?>
<?php else:?>
<div class="control-group">
<div class="control-label">
<?php echo $field->label; ?>
<?php if (!$field->required && $field->type != 'Spacer') : ?>
<span class="optional"><?php echo JText::_('COM_USERS_OPTIONAL');?></span>
<?php endif; ?>
</div>
<div class="controls">
<?php echo $field->input;?>
</div>
</div>
<?php endif;?>
<?php endforeach;?>
</fieldset>
<?php endif;?>
<?php endforeach;?>
<div class="control-group">
<div class="controls">
<!--button type="submit" class="btn btn-primary validate"><?php //echo JText::_('JREGISTER');?></button-->
<span class="btn btn-primary">Регистрация</span>
<a class="btn" href="<?php echo JRoute::_('');?>" title="<?php echo JText::_('JCANCEL');?>"><?php echo JText::_('JCANCEL');?></a>
<input type="hidden" name="option" value="com_users" />
<input type="hidden" name="task" value="registration.register" />
</div>
</div>
<?php echo JHtml::_('form.token');?>
</form>
</div>
*

Mick_20

  • Завсегдатай
  • 1030
  • 13 / 0
  • Что тут писать?
Mick_20, в вашем случае проще всего сделать так (Необходимо заполнить массив $zygo_data по-своему):

Спасибо вам большое, Зья, если не ошибся ))

А можно еще вопрос. Реально ли сделать такую валидацию:

Чтобы пользователь надо было обязательно заполнить либо все поля в домашнем адресе, либо все поля в адресе работы?

Т.е. мне не надо чтобы все эти поля были обязательны, но если уж начал заполнять, то все поля в адресе укажи.
Мой сайт про корабли
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Mick_20, я бы вам подсказала, какой javascript добавить, но для этого нужно знать, как минимум, какой у вас механизм валидации.
Что у вас обрабатывает событие click по элементу
Код: html4strict
<span class="btn btn-primary">Регистрация</span>
?
*

Mick_20

  • Завсегдатай
  • 1030
  • 13 / 0
  • Что тут писать?
Mick_20, я бы вам подсказала, какой javascript добавить, но для этого нужно знать, как минимум, какой у вас механизм валидации.
Что у вас обрабатывает событие click по элементу
Код: html4strict
<span class="btn btn-primary">Регистрация</span>
?

Я ничего не добавлял еще.
Шаблон стандартный protostar.
« Последнее редактирование: 12.12.2016, 18:49:46 от Mick_20 »
Мой сайт про корабли
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
Mick_20, фрагмент кода темплейта .../com_users/registration/default.php, который вы выше предоставили,
Код: php
<!--button type="submit" class="btn btn-primary validate"><?php //echo JText::_('JREGISTER');?></button-->
<span class="btn btn-primary">Регистрация</span>
указывает на то, что с шаблоном после установки поработали :)
*

Mick_20

  • Завсегдатай
  • 1030
  • 13 / 0
  • Что тут писать?
Mick_20, фрагмент кода темплейта .../com_users/registration/default.php, который вы выше предоставили,
Код: php
<!--button type="submit" class="btn btn-primary validate"><?php //echo JText::_('JREGISTER');?></button-->
<span class="btn btn-primary">Регистрация</span>
указывает на то, что с шаблоном после установки поработали :)
А, да это я просто кнопку так отключил, чтобы не могли регистрироваться на время разработки.
Но валидацию конечно на стандартную кнопку надо  ^-^
Мой сайт про корабли
*

sherza

  • Захожу иногда
  • 226
  • 90 / 1
В вашем случае (стандартный шаблон, заполнение группы  текстовых полей) можно было бы сделать следующее:
(я временно вернула стандартный submit)

Код: php
<?php

// uniqueID2, uniqueID6 - поля расширенного профиля, ПЕРЕД которыми
// должен начинаться новый fieldset
// Значения id (2, 6) можно увидеть в админ-панели плагина при редактировании
// дополнительных полей

// Заголовок 1, Заголовок 2 - текст legend в fieldset

$zygo_data = array(
"uniqueID2" => "Заголовок 1",
"uniqueID6" => "Заголовок 2"
);
$zygo_count = 0;


$document = JFactory::getDocument();
$document->addScriptDeclaration(
' jQuery(document).ready(function($) {

$(".zygo_fieldset .controls>input").click(function(){
   zygo_validate(this);
}).keypress(function(){
   zygo_validate(this);
}).keyup(function(){
   zygo_validate(this);
});

function zygo_validate(self){

var zygo_fset = $(self).closest(".zygo_fieldset");
var zygo_inputs = zygo_fset.find(".controls>input[type=\'text\']");
var zygo_labels = zygo_fset.find(".control-label label");


if(self.value){
zygo_inputs.addClass("required").attr(
{"aria-required": true, "required" : "" });

zygo_labels.addClass("required");

if(!zygo_labels.find(".star")[0]){
zygo_labels.append("<span class=\'star\'> *</span>");
}

zygo_fset.find(".control-label .optional").hide();

}else{
var other_inputs_clean = true;

zygo_inputs.each(function(index, el){
if(el.value){
other_inputs_clean = false;
return;
}
});

if(other_inputs_clean){

zygo_inputs.removeClass("required").removeClass("invalid").removeAttr( "aria-required" )
.removeAttr( "required" );

zygo_labels.removeClass("required").removeClass("invalid");
zygo_labels.find(".star").remove();

zygo_fset.find(".control-label .optional").show();


}
}
}

});

'
);

?>
<div class="registration<?php echo $this->pageclass_sfx?>">
<?php if ($this->params->get('show_page_heading')) : ?>
<div class="page-header">
<h1><?php echo $this->escape($this->params->get('page_heading')); ?></h1>
</div>
<?php endif; ?>
 
<form id="member-registration" action="<?php echo JRoute::_('index.php?option=com_users&task=registration.register'); ?>" method="post" class="form-validate form-horizontal well" enctype="multipart/form-data">
<?php // Iterate through the form fieldsets and display each one. ?>
<?php foreach ($this->form->getFieldsets() as $fieldset): ?>
<?php $fields = $this->form->getFieldset($fieldset->name);?>
<?php if (count($fields)):?>

<?php if ($fieldset->name != "zygo_profile"): ?>

<fieldset>
<?php // If the fieldset has a label set, display it as the legend. ?>
<?php if (isset($fieldset->label)): ?>
<legend><?php echo JText::_($fieldset->label);?></legend>
<?php endif;?>

<?php endif; ?>


<?php // Iterate through the fields in the set and display them. ?>
<?php foreach ($fields as $field) : ?>

<?php if ($fieldset->name == "zygo_profile" &&
isset($zygo_data[$field->getAttribute("name")])):

if ($zygo_count > 0) echo "</fieldset>";

$zygo_count++; ?>

<fieldset class="zygo_fieldset">
<legend>
<?php echo $zygo_data[$field->getAttribute("name")]; ?>
</legend>

<?php endif; ?>

<?php // If the field is hidden, just display the input. ?>
<?php if ($field->hidden): ?>
<?php echo $field->input;?>
<?php else:?>
<div class="control-group">
<div class="control-label">
<?php echo $field->label; ?>
<?php if (!$field->required && $field->type != 'Spacer') : ?>
<span class="optional"><?php echo JText::_('COM_USERS_OPTIONAL');?></span>
<?php endif; ?>
</div>
<div class="controls">
<?php echo $field->input;?>
</div>
</div>
<?php endif;?>
<?php endforeach;?>
</fieldset>
<?php endif;?>
<?php endforeach;?>
<div class="control-group">
<div class="controls">
<button type="submit" class="btn btn-primary validate"><?php echo JText::_('JREGISTER');?></button>
<!--span class="btn btn-primary">Регистрация</span-->
<a class="btn" href="<?php echo JRoute::_('');?>" title="<?php echo JText::_('JCANCEL');?>"><?php echo JText::_('JCANCEL');?></a>
<input type="hidden" name="option" value="com_users" />
<input type="hidden" name="task" value="registration.register" />
</div>
</div>
<?php echo JHtml::_('form.token');?>
</form>
</div>
*

Mick_20

  • Завсегдатай
  • 1030
  • 13 / 0
  • Что тут писать?
В вашем случае (стандартный шаблон, заполнение группы  текстовых полей) можно было бы сделать следующее:
(я временно вернула стандартный submit)

Спойлер
[свернуть]

Добавил данный код и не сработало.
Код: php
$document = JFactory::getDocument();
$document->addScriptDeclaration(
...
);

А поля изначально должны быть обязательны для заполнения? Или без разницы?
Мой сайт про корабли
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

WT cdek library для Joomla. PHP библиотека для разработчиков расширений

Автор sergeytolkachyov

Ответов: 1
Просмотров: 2541
Последний ответ 18.03.2026, 17:25:18
от sergeytolkachyov
SW JProjects - Менеджер цифровых проектов для Joomla! CMS™

Автор Septdir

Ответов: 63
Просмотров: 21116
Последний ответ 18.03.2026, 17:20:24
от sergeytolkachyov
WT Multicategories плагин мультикатегорий Joomla 5+

Автор sergeytolkachyov

Ответов: 0
Просмотров: 350
Последний ответ 14.03.2026, 08:11:52
от sergeytolkachyov
WT Simple price table - модуль прайслиста для Joomla

Автор sergeytolkachyov

Ответов: 0
Просмотров: 471
Последний ответ 16.02.2026, 14:25:56
от sergeytolkachyov
Бесплатный плагин импорта экспорта данных в поля материалов Joomla - CFI

Автор zikkuratvk

Ответов: 11
Просмотров: 8822
Последний ответ 27.01.2026, 08:37:19
от sergeytolkachyov