В материале Добавление дополнительных параметров для материалов Joomla мы рассмотрели как добавить дополнительные поля для материала Joomla с помощью файла administrator\components\com_content\models\forms\article.xml.

Недостатком этого способа является то, что после обновления, изменения, сделанные в xml файле скорее всего будут затерты.

Поэтому лучше воспользоваться другим способом -

Добавление пользовательских полей с помощью плагина

Что будет делать плагин..

Плагин загрузит форму с нужными нам полями и добавит в форму редактирования материала. Значения полей формы будут сохраняться в json формате в поле attrib таблицы #__content.

Чтобы при обновлении плагина сохранять пользовательские поля, добавим возможность указывать в настройках плагина путь к формам.

Добавление пользовательских полей для материалов Joomla

Создаем контент плагин 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

Вот так выглядит форма редактирования материала с добавленными полями:

Добавление пользовательских полей для материалов Joomla

Для добавление полей в профиль пользователя нужно использовать плагин типа 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

Плагин для примера, то есть он рабочий, но не для установки на сайт. Для установки на сайт еще не готов)

Продолжение следует...

Комментарии   

#4 Виктор 10.01.2017 02:41
Спасибо! Отличное решение!
#3 Анатолий 30.07.2016 16:55
Проверил на joomla 3.5.1
Работает.
Автору большой респект. Целый день искал такую информацию в сети и наконец то нашёл.
Однако при выводе на фронтенде есть ошибка Notice: Undefined property: stdClass::$pric e in
Как же можно её исправить?
#2 Николай 15.11.2015 17:28
Добавлять столбец в таблицу материалов, это уже хак будет) Тогда и другие файлы придется править, модель, например..
#1 вадим 14.11.2015 02:39
спс за туториал. Подскажите, а как добавить данные не в колонку attribs а в пользовательски й столбец ?

Чтобы сделать комментарий, нужно авторизоваться на сайте!