Дополнительные поля и способы их отображения в Joomla 3

Приветствую Вас на сайте Joom4all, тема сегодняшней статьи будет связана с дополнительными полями Joomla 3.
Что такое дополнительные поля и как с ними работать думаю, знает каждый веб-разработчик знакомый с системой управления контентом Joomla 3. Однако хочу заметить, что не каждый знает, каким образом они выводятся на страницах сайта и как выводить дополнительные поля в ручном режиме.
Для вывода дополнительных полей на страницах сайта предусмотрено четыре стандартных способа, три из которых выводят поля в автоматическом режиме и только один подразумевает ручной вывод дополнительных полей (вкладка «Параметры» в редакторе поля):

Способы отображения дополнительных полей
Давайте рассмотрим каждый метод подробнее, а Вы уже сами для себя определитесь какой подходит именно для Вашего сайта.
After Title
Данный метод подразумевает автоматическое отображение поля при помощи события onContentAfterTitle. Что это значит? А значит это то, что все дополнительные поля, у которых в качестве метода отображения установлено значение «After Title» будут выведены после заголовка материала, но перед информационным блоком (метками, датой создания, автором и т.п.).
Если посмотреть в код файла шаблона статьи, или например блога категории то можно заметить там строки, отвечающие за вывод информации при помощи события onContentAfterTitle:
Before Display
Данный метод отображения дополнительных полей подразумевает их вывод перед основным текстом материала (в том числе перед изображением полного текста), но после блока с информацией (если таковой присутствует) при помощи события onContentBeforeDisplay:
After Display
Последний из автоматических режимов отображения дополнительных полей Joomla 3. Данный метод как Вы наверно уже догадались, подразумевает вывод полей после основного текста материала в самом конце документа, при помощи плагина onContentAfterDisplay:
Вывод дополнительных полей в ручном режиме
Последний и, на мой взгляд, более правильный режим отображения дополнительных полей это ручной режим («Не показывать автоматически» в параметрах отображения). Именно в ручном режиме мы не привязаны к конкретной области документа и можем сами решать, где и когда вывести, то или иное дополнительное поле. Но есть в этом методе и определенная сложность – внесение в файлы определенного кода.
Код не слишком сложный, можно даже сказать достаточно простой. Все что нам требуется это создать пустой массив и записать в него все имеющиеся значения полей для текущего материала. После этого можно выдергивать из уже заполненного массива значения того или иного поля и выводить их в любом месте страницы.
Кроме того используя ручной режим отображения дополнительных полей можно оформлять поля по своему усмотрению, в автоматическом режиме такой тонкой настройки каждого конкретного поля добиться увы не удастся.
Теперь давайте перейдем от слов к делу и выведем некоторые дополнительные поля вручную. Для этого как я уже и говорил, создаем пустой массив и заполняем его значениями:
item->jcfields as $field)*Пробегаемся циклом по всем полям текущего материала*/ $additionalFields[$field-> name] = $field->value; /*И добавляем их значения в наш ранее созданный массив*/ > // Теперь можно использовать значения массива для вывода пользовательских полей в указанных местах?>
Как видите, нет ничего сложного, массив заполнен значениями дополнительных полей и теперь можно использовать эти значения для вывода полей в нужных местах страницы. Все что от нас потребуется это значение имени поля для его идентификации и функция echo(). В качестве примера давайте выведем поле с именем price в нужном нам месте:
Что тут происходит? Сначала мы запускаем обычное условие, где проверяем, установлена ли наше поле (isset($additionalFields[‘price’])), а так же есть ли в нем данные (!empty($additionalFields[‘price’])). Если результат проверки истина (то есть поле существует и не пустое), тогда выводим его значение при помощи функции echo (echo $additionalFields[‘price’];).
Вот таким не хитрым образом мы вывели значение дополнительного поля в Joomla 3. Чтобы было понятно, откуда я взял имя поля со значением «price» посмотрите на скриншот ниже:

Аналогичным образом выводим оставшиеся дополнительные поля. Причем хочу отметить, что повторно создавать массив и заполнять его значениями не нужно, ибо зачем, ведь он у нас уже заполнен. В качестве примера посмотрите на кусок кода, с помощью которого выводятся дополнительные поля:

На этом, пожалуй, все. Теперь Вы знаете, каким образом можно выводить дополнительные поля на страницах сайта. До скорых встреч.
Добавление пользовательских полей 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 и более поздних версий.
*/ 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-файлу из вашего плагина (которые мы создадим дальше).
item->id) : ?> item->attribs); ?> form->setValue('field_name', 'attribs', $attribs->field_name); ?> form->renderField('field_name', 'attribs'); ?>
После этого ваши поля теперь появятся и будут сохранены с помощью редактирования интерфейса фронтенда.
Пользовательские поля загружаются из файла forms/contact.xml в каталоге плагинов. Важно, чтобы эти поля находились в элементе fields со свойством name , установленным в » params «. Если вы не зададите это имя свойства, поля появятся на сайте администратора, но значения не будут сохранены.
Примечание: В com_content ваше поле должно быть названо » «, в противном случае поля появятся на сайте администратора, но значения не будут сохранены.
В этом случае мы добавляем поле для имени адресата contact_emaillabel2 , описывающей поле электронной почты для отображения на сайте, и второе поле для значения адреса электронной почты contact_email2 .
Наконец, нам нужен языковой файл, чтобы параметры были красиво представлены в админке 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. Дополнительные сведения о переопределениях шаблонов см. в разделе Общие сведения о переопределениях вывода.
Скопируйте файл /components/com_contact/views/contact/tmpl/default.php в /html/com_contact/contact/default.php , создавая папки в вашем шаблоне по мере необходимости. Мы собираемся отредактировать этот файл, чтобы включить в него дополнительную информацию. Компонент com_contact автоматически загрузит для нас дополнительные поля и загрузит их в переменную с именем $this->params . Все, что нам нужно сделать, это проверить, загружены ли данные, и, если да, отобразить их.
Чтобы отобразить поле, найдите местоположение в /html/com_contact/contact/default.php это соответствует тому, где вы хотите, чтобы отображался дополнительный адрес электронной почты, и добавьте следующий код:
Если вы добавите этот код и установите свой шаблон, теперь на вашем сайте будут отображаться пользовательские поля.
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! 😉
Joomla 3.7 обзор настраиваемых полей
Уже окончательно решено, что в Joomla 3.7 появятся настраиваемые поля (Custom Fields). Пока достоверных данных о, том когда выйдет точно выйдет 3.7 нет, но уже доступна ночная сборка, в которой добавлены новые функции.
Скачать ночную сборку можно с официального сайта Joomla.
Если заглянуть в глубь истории, то в далеком 2012 году, настраиваемые поля были первыми в списке запросов для Joomla 3 и вот кажется это стало реальностью.
В данной статье мы постараемся рассказать, как работают поля в Joomla.
Как использовать поля на статьях Joomla
На вкладке «Content», выпадающее меню теперь есть две новые опции, «Fields» и «Field Groups»:

В разделе «Fields», вы сможете нажать кнопку «New» и создать поля из предложенного набора данных. Вот в верхней части списка, который включает в себя: CAPTCHA, Calendar, Checkbox, Colour, Editor, Email, Gallery, Image и List options.

Выделите дальше вниз по списку типов полей и вы увидите поля: Media, Radio, SQL, Telephone, Text, Textarea, Timezone, URL, User and Usergroup.

Каждое поле может быть назначено к определенной группе или той или иной категории. Вы можете иметь поля, которое появляются только на статьях в определенной категории:

Каждое поле будет иметь свой собственный набор разрешений. Поля также имеют опции, такие как: лейбл, иконка, или класс CSS:

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

Можно определить, где будут отображаться группы полей при редактировании статьи. Каждая группа будет иметь вкладку, как вы можете видеть на изображении ниже вкладку «My Test Fields»:

На этой вкладке вы сможете ввести данные для вашей статьи:

По умолчанию, когда вы публикуете статью с полями, эти поля будут отображаться под основным содержанием:

Многие из этих полей действительно полезные и функциональные. Например, в поле «Галерея» выводит настоящую галерею фотографий. Все что необходимо сделать пользователю, это выбрать папку из медиа-библиотеки, а поле будет автоматически создавать галерею.

Как использовать поля для контактов и пользователей Joomla
Многие люди будут использовать поля для статей, но поля также доступны для пользователей и контактов. Я подозреваю, что многие разработчики компонентов также начнут интегрировать поля. На рисунке ниже показано поле ссылки для пользователей:

Любые пользовательские поля, которые вы создаете будут доступны, когда пользователи зарегистрируются на вашем сайте, а также, когда они изменять свои профили, как показано на рисунке ниже:

Как настраивать параметры полей Joomla
Поля вы можете включать и выключать для каждого компонента. Например, если вы хотите поля профилей пользователей, вы можете включить их под перейдя в «Опции» ссылка для пользователей, и перейдите на вкладку «Интеграция»:

Так же некоторые опции доступны в системном плагине полей Расширения => Плагины => редактировать «Система — поля». Вы можете контролировать, где отображаются поля на статьях: After Title, Before Display, After Display или скрыть отображение. Эти параметры также могут быть настроены индивидуально для каждого поля.

Критика кастомных полей Joomla
Пока идет разработка и сложно будет сказать, как будут они выглядит в конечном виде, однако существующее решение имеет несколько недостатков, которые отмечают почти все тестирующие ночную сборку Joomla 3.7.
- Все значения полей складываются в одну таблицу, для небольших проектов и проектов с небольшим количеством полей, это вполне оправдано, но при росте количества значений в базе это может стать серьезной архитектурной проблемой.
- В базе нет фильтров поиска и сортировки, то есть по сути пока это лишь набор значений, которые вы можете вывести в контенте, а механизмов, которые присущи полноценным CCK нет. В целом это можно будет решить сторонними разработками, но хотелось бы, чтоб все было встроено изначально.
Подводя итоги
Поля безусловно интересная функция Joomla, кто работал с K2 увидит некоторое сходство с решением, которое включили в ядро Joomla. Скорей всего разработчики активно будут включать поля в свои расширения, тем самым значительно расширив функционал компонентов.
Лично я очень надеюсь, что функционал полей будет расширятся и появятся много новых возможностей, которые позволят создавать сложные сайты используя только базовый движок Joomla.
Статья написана по мотивам статьи Steve Burge
Статьи по теме.
- Обновление локализации для Joomla 3.9.22
- Релизы Joomla 4 RC 6 и Joomla 3.10 RC 2
- Релизы Joomla 4 RC 4 и Joomla 3.10 Alpha 9
- Вышел релиз безопасности Joomla 3.9.19
- Обновление локализации для Joomla 3.9
Вадим Куницын Россия , Калининград , 38 лет
Руководитель JoomLine. Занимаюсь планированием и стратегией разработки программных продуктов JoomLine. Активный участник сообщества Joomla! Россия с 2007 года.
Дополнительные поля в Joomla 3.7.+

Доброго времени суток всем! В данном посте хочу рассмотреть некоторую особенность, которая появилась в Joomla, начиная с версии 3.7 — это дополнительные поля в материалах. Считаю это полезным дополнением к стандартному компоненту материалов com_content. Ранее приходилось из-за нескольких полей устанавливать тяжеловесные конструкторы контента (CCK) и все для того, чтобы пользователю было легче работать в админке. В данной статье как раз рассмотрим как создать дополнительные поля в материалах и как вывести их во внешнем сайте. Также, как и материалы поля объединяются в группы, это своего рода категории. Для того,чтобы создать группу полей идем в админке Материалы -> Группы полей. Создаем группу. Далее, создаем сами поля. Здесь уже по более опций, пройдемся по основным.
Вкладка «Основное»
Заголовок — сюда вводим заголовок поля, вписываем такой, чтобы вам было удобно ориентироваться по созданным полям в админке, а их может быть много.
Тип — выбираем тип поля: Текст (text), Текстовое поле (textarea), Url, Календарь и т.д. Не буду здесь разбирать в подробностях, т.к. ничего сложного в них нет и настраиваются все по одному принципу. Имя — вводим алиас поля латиницей. Это своего рода индефикатор поля и он должен быть уникальным. Название — сюда вводим то название поля, которое мы хотим видеть на сайте. Вообще по умолчанию, когда заполняете заголовок данное поле заполняется автоматически, но вы можете его переопределить. Описание — вводим описание поля. Обязательно — если данное поле будет обязательным при создании материала, то ставим переключатель «Да». Значение по умолчанию — можете ввести то значение, которое должно быть подставлено по умолчанию в данное поле. Фильтр — здесь выбираем параметр фильтрации вводимых данных, например, вы хотите, чтобы данное поле принимало только целые числа. Данную фильтрацию можно определить и глобально в настройках плагина данного типа поля.
Читайте также: Адаптивные изображения материалов Joomla 3 (4) встроенными средствами
Максимальная длина — можете ограничить длину вводимых символов.

Категория — в правой части экрана выбираем категорию, для которых должно быть доступно создаваемое поле.
Вкладка «Параметры»
- After Title — показать поле после заголовка;
- Before Display — показать перед текстом;
- After Display — показать после текста;
- Do not automatically display — не показывать автоматически поле. Данная опция предусматривает вывод поля в шаблоне сайта посредством кода. Об этом поговорим ниже.

Все, сохраняем поле и идем создавать материалы. В материалах той категории что вы присвоили полям появится новая вкладка с именем группы полей. У меня она называется «Поля«.

А вот как данное поле выглядит на сайте.

Название поля я сделал жирным через стили CSS. Сразу скажу, что через автоматический вывод у нас нет возможности кастомизировать шаблон вывода полей. Это возможно сделать без автоматического вывода.
Вывод дополнительных полей материалов в шаблоне Joomla — ручной режим
Итак, если вам не подходит предустановленные настройки вывода полей или вы хотите просто править html-шаблон полей, то есть возможность вывести поля в любом месте шаблона материала и обрамить их какими угодно тегами. Для вывода поля в ручном режиме необходимо сначала отключить автоматический показ поля в параметрах. Если этого не сделать, то поля у вас будут просто дублироваться.
Читайте также: Правильное подключение стилей и JS плагинов в Joomla

Далее создаем переопределение шаблона вывода материала для типа «Article«. Если у вас еще нет переопределения шаблона материалов com_content, то идем в админке Расширения -> Шаблоны — > В правой колонке «Шаблон» выбираем ваш шаблон -> Создать переопределение -> com_content -> article.

После этих действий в папке вашего шаблона должна появиться следующая директория с файлом Ваш шаблон -> html -> com_content -> article — default.php. Вот с данным файлом и будем работать. Открываем файл шаблона материала и в нужном месте вставляем код для вывода поля. Я вставил до кода вывода текста:
item->text; ?>
Код вывода поля
item->jcfields as $field) < $myCustomFields[$field->name] = $field->value; > // RECOVER CUSTOM FILED NAME if (isset($myCustomFields['field-1']) and !empty($myCustomFields['field-1'])) : ?>Название поля:Вместо field-1 подставляете ваш псевдоним поля (первый скриншот настроек, поле «Имя»). Вот как это выглядит на примере — демо.
Если вы хотите вывести более одного поля, то нет необходимости заново копировать цикл «foreach». Данный цикл необходимо объявить выше вывода полей. А второе поле вывести, например, так:
Название поля:Вместо field-2 — название вашего поля.
На этом завершу. Всем удачи, всем пока!