- Добавление пользовательских полей в основные компоненты Joomla с помощью плагина
- Добавление пользовательского поля Joomla
- Отображение пользовательского поля Joomla
Добавление пользовательских полей в основные компоненты Joomla с помощью плагина.
Вы когда-нибудь хотели, чтобы в com_contact
было дополнительное поле номера телефона или вам требовалось дополнительное поле для статей в com_content
в CMS Joomla?
И это предусмотрено! Joomla предоставляет простой способ интеграции новых полей с основными компонентами, такими как указанные выше и им подобными. Все, что требуется для достижения этой цели, - это простой плагин контента и переопределение макета в вашем шаблоне.
В этой статье показано, как добавить дополнительное поле в основной компонент на примере добавления дополнительного адреса электронной почты в контакты в com_contact
. Если вам нужно добавить пользовательские поля в com_content
для ваших статей Joomla, просто измените любые ссылки с "contact
" на "content
" в приведенном ниже коде. И обратите внимание, что com_content
использует "attribs
", а не "params
" для значений полей, а также для переопределения.
Добавление пользовательского поля Joomla.
Рекомендуется сначала прочитать Создание плагина для Joomla для получения подробной информации о том, как создать и установить плагин, который здесь не рассматривается.
Чтобы добавить поле в системный компонент, вам необходимо создать плагин контента, который подхватывает событие onContentPrepareForm
и вставляет свои собственные поля в данную JForm
. Следующий код предназначен для Joomla 3.1 и более поздних версий.
<?php
// нет прямого доступа
defined ('_JEXEC') or die;
class plgContentExample extends JPlugin
{
/**
* Загрузите языковой файл при создании экземпляра.
* Обратите внимание, что это доступно только в Joomla 3.1 и выше.
* Если нужна поддержка версии 3.0, нужно переопределить конструктор
*
* @var boolean
* @since <ваша версия>
*/
protected $autoloadLanguage = true;
/**
* Подготовьте форму и добавьте своё поле.
*
* @param JForm $form Форма, подлежащая изменению.
* @param mixed $data Связанные данные для формы.
*
* @return boolean
*
* @since <ваша версия>
*/
function onContentPrepareForm($form, $data)
{
$app = JFactory::getApplication();
$option = $app->input->get('option');
switch($option)
{
case 'com_contact' :
if ($app->isClient('administrator'))
{
JForm::addFormPath(__DIR__ . '/forms');
$form->loadFile('contact', false);
}
return true;
}
return true;
}
}
?>
Включение редактирования пользовательских полей в интерфейсе пользователя Joomla.
Включить редактирование в интерфейсе фронтенда сайта для ваших новых настраиваемых полей довольно просто. Чтобы добавить поля в форму редактирования содержимого интерфейса, просто добавьте этот блок кода:
case 'com_contact':
if ($app->isClient('site'))
{
JForm::addFormPath(__DIR__ . '/forms');
$form->loadFile('contact', false);
}
return true;
Добавьте этот код непосредственно под существующим экземпляром.
Как только вы это сделаете, создайте переопределение шаблона для формы содержимого в файле edit.php
. Если вы создаете набор настраиваемых полей для com_contact
, вы должны скопировать /components/com_contact/views/form/tmpl/edit.php
чтобы создать переопределение в /templates/your-template-name/html/com_contact/form/edit.php
Внутри переопределения макета добавьте новые поля в форму, в которой вы хотите, чтобы они отображались (например, под заголовком, под описанием), убедившись, что имена полей соответствуют XML-файлу из вашего плагина (которые мы создадим дальше).
<?php // Проверка, является ли это существующим item или нет ?>
<?php if ($this->item->id) : ?>
<?php // Если это существующий item, получите часть атрибутов существующей записи ?>
<?php $attribs = json_decode($this->item->attribs); ?>
<?php // Установка значения пользовательского поля с сохранёнными данными. ?>
<?php // Дублируйте необходимое количество полей, изменяя имя поля по мере необходимости. ?>
<?php echo $this->form->setValue('field_name', 'attribs', $attribs->field_name); ?>
<?php endif; ?>
<?php // Эту строку необходимо добавить в файл прямо там, где вы хотите ее отобразить. Итак, если вы хотите, чтобы оно отображалось сразу после поля описания, найдите поле описания и поместите его сразу после него. Дублируйте необходимое количество полей, изменяя имя поля по мере необходимости. ?>
<?php // Теперь мы отобразим поле. Если мы редактируем существующий item, ранее сохраненные данные уже будут заполнены ?>
<?php echo $this->form->renderField('field_name', 'attribs'); ?>
После этого ваши поля теперь появятся и будут сохранены с помощью редактирования интерфейса фронтенда.
Пользовательские поля загружаются из файла forms/contact.xml
в каталоге плагинов. Важно, чтобы эти поля находились в элементе fields
со свойством name
, установленным в "params
". Если вы не зададите это имя свойства, поля появятся на сайте администратора, но значения не будут сохранены.
Примечание: В com_content
ваше поле должно быть названо "<fields name="attribs">
", в противном случае поля появятся на сайте администратора, но значения не будут сохранены.
В этом случае мы добавляем поле для имени адресата contact_emaillabel2
, описывающей поле электронной почты для отображения на сайте, и второе поле для значения адреса электронной почты contact_email2
.
<?xml version="1.0" encoding="UTF-8"?>
<form>
<fields name="params">
<fieldset name="params" label="PLG_CONTENT_EXAMPLE_FIELDSET_LABEL">
<field
name="contact_emaillabel2"
type="text"
label="PLG_CONTENT_EXAMPLE_CONTACT_EMAILLABEL2"
/>
<field
name="contact_email2"
type="text"
label="PLG_CONTENT_EXAMPLE_CONTACT_EMAIL2"
filter="email"
/>
</fieldset>
</fields>
</form>
Наконец, нам нужен языковой файл, чтобы параметры были красиво представлены в админке Joomla и могли быть переведены на разные языки. Этот файл должен называться как-то вроде en-GB.plg_content_example.ini
.
PLG_CONTENT_EXAMPLE_FIELDSET_LABEL="Additional Information"
PLG_CONTENT_EXAMPLE_CONTACT_EMAIL2="Additional email address"
PLG_CONTENT_EXAMPLE_CONTACT_EMAILLABEL2="Additional email label"
Вот и все для добавления поля в com_contact
. Если вы установите этот плагин, у вас появится дополнительная вкладка в форме редактирования контактов под названием "Дополнительная информация" (Additional Information) с включенными новыми полями. Если вы заполните поля "Новая метка" (Additional email label) и "Адрес электронной почты" (Additional email address) для контакта, вы увидите, что com_contact
сохранит и извлечет информацию для вас.
Один и тот же плагин можно использовать для добавления дополнительных полей в различные компоненты; просто добавьте соответствующий код в функцию onContentPrepareForm
и создайте соответствующие файлы XML-форм.
Отображение пользовательского поля Joomla.
Чтобы отобразить пользовательское поле, вам необходимо создать переопределение макета для соответствующего компонента в вашем шаблоне. Для получения более подробной информации о создании шаблонов см. раздел Создание базового шаблона Joomla. Дополнительные сведения о переопределениях шаблонов см. в разделе Общие сведения о переопределениях вывода.
Скопируйте файл <Joomla>/components/com_contact/views/contact/tmpl/default.php
в <template>/html/com_contact/contact/default.php
, создавая папки в вашем шаблоне по мере необходимости. Мы собираемся отредактировать этот файл, чтобы включить в него дополнительную информацию. Компонент com_contact
автоматически загрузит для нас дополнительные поля и загрузит их в переменную с именем $this->params
. Все, что нам нужно сделать, это проверить, загружены ли данные, и, если да, отобразить их.
Чтобы отобразить поле, найдите местоположение в <template>/html/com_contact/contact/default.php
это соответствует тому, где вы хотите, чтобы отображался дополнительный адрес электронной почты, и добавьте следующий код:
<?php if ($this->params->get('contact_emaillabel2', false)) : ?>
<div>
<span class="contact-additionalemail"><?php echo $this->params->get('contact_emaillabel2'); ?>: <a href="mailto:<?php echo $this->params->get('contact_email2'); ?>"><?php echo $this->params->get('contact_email2'); ?></a><br/></span>
</div>
<?php endif; ?>
Если вы добавите этот код и установите свой шаблон, теперь на вашем сайте будут отображаться пользовательские поля.
Перевод с английского официальной документации Joomla:
https://docs.joomla.org/Adding_custom_fields_to_core_components_using_a_plugin
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! ;)