Как сделать свое поле joomla 3
Перейти к содержимому

Как сделать свое поле joomla 3

  • автор:

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

Как вывести дополнительные поля в 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) 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»:

Меню настраиваемых полей Joomla

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

Список полей Joomla

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

Список полей Joomla

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

Категория настраиваемых полей

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

опции полей Joomla

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

группы полей Joomla

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

вывод группы полей при редактировании статьи Joomla

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

Вкладка группы полей Joomla

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

Фронтальная часть настраиваемых полей Joomla

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

Поле галереи Joomla

Как использовать поля для контактов и пользователей Joomla

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

Меню полей для пользователей Joomla

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

Дополнительные поля в профиле пользователя Joomla

Как настраивать параметры полей Joomla

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

Опции полей пользователя Joomla

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

Системный плагин полей Joomla

Критика кастомных полей Joomla

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

  1. Все значения полей складываются в одну таблицу, для небольших проектов и проектов с небольшим количеством полей, это вполне оправдано, но при росте количества значений в базе это может стать серьезной архитектурной проблемой.
  2. В базе нет фильтров поиска и сортировки, то есть по сути пока это лишь набор значений, которые вы можете вывести в контенте, а механизмов, которые присущи полноценным 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) встроенными средствами
Максимальная длина — можете ограничить длину вводимых символов.

Настройка поля дополнительных полей Joomla

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

Вкладка «Параметры»

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

Настройка параметров дополнительных полей Joomla

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

заполнение доп. полей в админке Joomla

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

вывод доп. поля Joomla на сайте

Название поля я сделал жирным через стили CSS. Сразу скажу, что через автоматический вывод у нас нет возможности кастомизировать шаблон вывода полей. Это возможно сделать без автоматического вывода.

Вывод дополнительных полей материалов в шаблоне Joomla — ручной режим

Итак, если вам не подходит предустановленные настройки вывода полей или вы хотите просто править html-шаблон полей, то есть возможность вывести поля в любом месте шаблона материала и обрамить их какими угодно тегами. Для вывода поля в ручном режиме необходимо сначала отключить автоматический показ поля в параметрах. Если этого не сделать, то поля у вас будут просто дублироваться.

Читайте также: Правильное подключение стилей и JS плагинов в Joomla

запрет автоматического показа поля joomla

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

переопределение com-content joomla

После этих действий в папке вашего шаблона должна появиться следующая директория с файлом Ваш шаблон -> 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 — название вашего поля.

На этом завершу. Всем удачи, всем пока!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *