В материале Добавление дополнительных параметров для материалов Joomla мы рассмотрели как добавить дополнительные поля для материала Joomla с помощью файла administrator\components\com_content\models\forms\article.xml.
Недостатком этого способа является то, что после обновления, изменения, сделанные в xml файле скорее всего будут затерты.
Поэтому лучше воспользоваться другим способом -
Добавление пользовательских полей с помощью плагина
Что будет делать плагин..
Плагин загрузит форму с нужными нам полями и добавит в форму редактирования материала. Значения полей формы будут сохраняться в json формате в поле attrib таблицы #__content.
Чтобы при обновлении плагина сохранять пользовательские поля, добавим возможность указывать в настройках плагина путь к формам.

Создаем контент плагин Joomla.
О создании плагинов Joomla можно почитать здесь >> docs.joomla.org/Plugin
Для загрузки формы используем событие onContentPrepareForm
Вот код плагина:
<?php
// no direct access
defined ( '_JEXEC' ) or die ( 'Restricted access' );
class plgContentJdvcustomfields extends JPlugin {
/**
* Load the language file on instantiation.
* Note this is only available in Joomla 3.1 and higher.
* If you want to support 3.0 series you must override the constructor
*
* @var boolean
* @since 3.1
*/
protected $autoloadLanguage = true;
/**
* Constructor
*
* @param object &$subject The object to observe
* @param array $config An array that holds the plugin configuration
*
* @since 1.5
*/
public function __construct(& $subject, $config)
{
parent::__construct($subject, $config);
//JFormHelper::addFieldPath(__DIR__ . '/fields');
}
public function onContentPrepareForm($form, $data) {
$app = JFactory::getApplication();
$option = $app->input->get('option');
$formFolder = __DIR__ . '/forms';
if (!empty($this->params->get('formpath'))){
$formFolder = JPATH_ROOT . '/' . $this->params->get('formpath');
}
if ($app->isAdmin()) {
JForm::addFormPath($formFolder);
$form->loadFile($option, false);
}
return true;
}
}
?>
- В папку форм добавляем файл с полями для материалов Joomla - com_content.xml
- Также можно добавить для компонента контактов файл - com_contact.xml
- И для пунктов меню - com_menus.xml
Вот так выглядит форма редактирования материала с добавленными полями:

Для добавление полей в профиль пользователя нужно использовать плагин типа user. Добавить поля для модуля mod_custom у меня не получилось, если у кого-то получилось - просьба отписаться)
Еще один момент... Добавим возможность выбора - выводить пользовательские поля в форме редактирования на сайте или нет.
Для редактирования полей со стороны сайта теперь выбираем в свойствах плагина - Да, а в раскладке формы редактирования - components\com_content\views\form\tmpl\edit.php - делаем соответствующие изменения, саму форму редактирования, конечно, лучше переместить в html папку шаблона.
Правки к форме редактирования материала со стороны сайта:
Добавляем вкладку:
<li><a href="#customfields" data-toggle="tab"><?php echo JText::_('PLG_CONTENT_JDVCUSTOMFIELDS_LABEL') ?></a></li>
И добавляем контейнер для полей вкладки:
<div class="tab-pane" id="customfields">
<?php
$this->item->attribs = json_decode($this->item->attribs);
$tmp = new stdClass;
$tmp->attribs = $this->item->attribs;
$this->form->bind($tmp);
echo $this->form->renderField('price', 'attribs');
?>
</div>
Скачать плагин >> plg_jdvcontentcustomfields_v1.0.zip
Идея для плагина почерпнута из статьи Adding custom fields to core components using a plugin
Плагин для примера, то есть он рабочий, но не для установки на сайт. Для установки на сайт еще не готов)
Продолжение следует...