Начиная с версии Joomla 3.7, в CMS добавлен функционал настраиваемых полей (Custom Fields). Это означает, что теперь вы можете добавить к материалам, категориям, пользователям (профилям пользователей) и контактам Joomla дополнительные поля разных типов. Эти поля можно будет заполнять при создании контента, и их значения будут отображаться как его часть.
В этой статье мы рассмотрим все типы настраиваемых полей, доступных в Joomla, а также примеры их использования на сайте.
Содержание
- Введение в управление настраиваемыми полями Joomla
- Группы полей и их использование
- Типы полей и их отображение на сайте
- Поле «Календарь (calendar)»
- Поле «Флажки (Checkboxes)»
- Поле «Цвет (Color)»
- Поле «Редактор (Editor)»
- Поле «Целое (Integer)»
- Поле «Список (List)»
- Поле «Список изображений»
- Поле «Медиа (Media)»
- Поле «Переключатель (Radio)»
- Поле «SQL»
- Поле «Текст (Text)»
- Поле «Текстовое поле (Textarea)»
- Поле «URL (Url)»
- Поле «Пользователь (User)»
- Поле «Группы пользователей (Usergrouplist)»
- Варианты вывода полей в разных местах страницы сайта
- Дополнительные типы настраиваемых полей для Joomla
- Фильтрация материалов по настраиваемым полям
- Заключение
Введение в управление настраиваемыми полями Joomla
В Joomla нам доступно два новых менеджера, связанных с управлением настраиваемыми полями. Это Поля (Fields) и Группы полей (Field Groups). Данные менеджеры для материалов, пользователей и контактов является разными. Это означает, что для материалов есть свои менеджер полей и групп полей, для пользователей свои, и для контактов также свои. Между собой они не пересекаются.
В данной статье мы будем рассматривать все поля на примере материалов Joomla. Для пользователей и контактов все будет аналогично, с той лишь разницей, что вам нужно будет использовать другой соответствующий менеджер.
Рассмотрим доступы к различным менеджерам:
- Поля/Группы полей для материалов: Материалы -> Менеджер материалов -> Поля/ Группы полей в левом сайтбаре.
- Поля/Группы полей для категорий: Категории -> Менеджер Категорий -> Поля/ Группы полей в левом сайтбаре.
- Поля/Группы полей для пользователей: Пользователи -> Менеджер Пользователей -> Поля/ Группы полей в левом сайтбаре.
- Поля/Группы полей для контактов: Компоненты -> Контакты -> Поля/ Группы полей в левом сайтбаре –> Выбран фильтр Контакт
- Поля/Группы полей для формы обратной связи: Компоненты -> Контакты -> Поля/ Группы полей в левом сайтбаре –> Выбран фильтр Почта
- Поля/Группы полей для формы категорий контактов: Компоненты -> Контакты -> Поля/ Группы полей в левом сайтбаре –> Выбран фильтр Категория
Для менеджера контактов разделение на поля контакта, формы обратной связи и категории контактов выполнены не слишком очевидно. Переключаться между этими типами контента вы можете с помощью фильтра в менеджере полей компонента контактов. Думаю, рисунок покажет это лучше:
И еще пара дополнительных замечаний:
- На дополнительные поля не распространяется система контроля версий (во всяком случае, пока)
- Если вы создали дополнительные поля для материалов, но не видите их в форме добавления материала, перейдите в Система –> Общие настройки –> Материалы –> Вкладка «Форма редактирования». Опция «Показывать параметры материала» должна быть включена.
Группы полей и их использование
Ничего особенно интересного в группах полей нет. Это что-то аналогичное категориям материалов для материалов, только проще. Группы позволяют более удобно разделять поля на группы, уж простите за тавтологию. Каждая группа полей, при создании материала, будет показываться отдельной вкладкой. Это может быть удобно, если полей много и нужно их как-то классифицировать:
Типы полей и их отображение на сайте
В настоящее время нам доступно 15 различных типов дополнительных полей. Это:
- Календарь (calendar)
- Флажки (Checkboxes)
- Цвет (Color)
- Редактор (Editor)
- Целое (Integer)
- Список (List)
- Список изображений
- Медиа (Media)
- Переключатель (Radio)
- SQL
- Текст (Text)
- Текстовое поле (Textarea)
- URL (Url)
- Пользователь (User)
- Группы пользователей (Usergrouplist)
Каждый тип поля имеет как общие опции, так и свои уникальные.
Для начала рассмотрим общие опции, которые повторяются для всех типов полей:
- Заголовок – заголовок поля. Показывается в менеджере поле, но не на сайте. Не путайте с названием поля (которое Label).
- Тип – позволяет выбрать тип поля (текст, чекбокс, изображение и т.д.)
- Имя – имя используется для идентификации поля. Это что-то вроде алиасов для материалов, но только для дополнительных полей. Если не заполнить эту опцию, Joomla создаст имя автоматически, также, как это происходит с алиасом.
- Название (Label) – Заголовок, который будет показываться рядом с полем. Именно эта опция является, фактически, лейблом поля на сайте. Если ваш сайт многоязычный, то в этом поле вы должны задавать не значение на определенном языке, а языковую константу, которой, в дальнейшем, можно будет задать различные значения для различных языков. Если язык на сайте у вас только один и других добавлять не планируется, можно заполнять эту опцию простым текстом. Если оставить ее пустой, текст будет взят из поля Заголовок.
- Описание – Всплывающая подсказка, которая появляется при наведении курсора на название поля. Это работает только для поля в виде формы, т.е. еще не заполненного поля. Работает по аналогии с тем, как вы видите подсказки в самой Joomla. Здесь требуется соблюдать те же правила для многоязычности, что и в опции Название (Label).
- Обязательно для заполнения – Опция устанавливает, является ли поле обязательным для заполнения.
- Значение по умолчанию – Опция устанавливает значение поля по умолчанию. На него распространяются правила для многоязычности, описанные в опции Название (Label). В зависимости от типа поля значение по умолчанию может быть как текстом, так и индексом.
- Группа поля – Здесь вы можете указать принадлежность данного поля к ранее созданной группе полей.
- Категория – Здесь вы можете привязать поле к определенной категории материалов. Это удобно, если для материалов разных категорий требуется разные наборы полей.
- Уровень доступа – Здесь, по аналогии с модулями, вы можете задать уровень доступа групп пользователей, которые смогут видеть данное поле. С помощью этой опции вы можете, например, показывать поле только зарегистрированным пользователям или только администратору.
- Placeholder – Здесь можно задать подсказку для ввода, которая будет отображаться внутри поля.
- CSS-класс для показа – HTML-атрибут «class» для выведенного значения поля. Может быть задано несколько классов, перечисленных через пробел.
- Редактировать класс – HTML-атрибут «class» для поля ввода значения. Может быть задано несколько классов, перечисленных через пробел.
- Показывать заголовок поля – Эта опция устанавливает показывать или скрывать заголовок поля (Label) на сайте.
- Показать в – Эта опция позволяет указать область отображения поля (фронтенд/бэкэнд/везде).
- Автоматическое отображение – позволяет указать место, где по умолчанию будет отображаться значение поля в материале: перед заголовком материала / Перед текстом материала / После текста материала / Не показывать по умолчанию (актуально для переопределенных макетов, в которых вы сами вставляете место вывода поля).
Остальные опции, не приведенные в списке выше, являются уникальными для отдельных типов полей. Они становятся доступными для заполнения, когда выбран тот или иной тип поля в одноименной опции. Уникальные опции рассмотрены ниже, отдельно для каждого поля.
Поле «Календарь (calendar)»
Позволяет задавать дату и время через удобный всплывающий календарь.
- Показывать время – Позволяет показывать только дату, либо дату и время
Поле «Флажки (Checkboxes)»
Позволяет добавить один или несколько чекбоксов, задав их названия и значения.
- Значения Checkbox – Позволяет создать несколько чекбоксов, их названия и значения
Поле «Цвет (Color)»
Позволяет указать код цвета, либо выбрать цвет из палитры.
Нет
Поле «Редактор (Editor)»
Позволяет вводить текст через WYSIWYG-редактор.
- Показать кнопки – показывать ли дополнительные кнопки-плагины под редактором
- Скрыть кнопки – если кнопки показываются, какие из них требуется отключить
- Ширина – ширина редактора. По умолчанию 100%.
- Высота – высота редактора. По умолчанию 100%.
- Фильтр – позволяет выбрать один из вариантов фильтрации данных от отсутствия фильтрации, до превращения данных в плоский текст.
Поле «Целое (Integer)»
Позволяет выбрать одно или несколько значений из выпадающего списка целых чисел.
- Мультивыбор – одно или несколько значений можно выбирать.
- Первый – первое значение списка.
- Последний – последнее значение списка.
- Шаг – шаг значений списка.
Поле «Список (List)»
Позволяет выбрать из списка одно или несколько значений.
- Мультивыбор – Одно или несколько значений можно выбирать.
- Значения списка – Названия значений списка и сами значения.
Поле «Список изображений»
Позволяет выбрать из списка одно или несколько изображений.
- Директория – Путь к каталогу, из которого выбираются изображения
- Мультивыбор – Одно или несколько значений можно выбирать.
- Класс изображения – CSS-класс, который будет добавлен к изображению
Поле «Медиа (Media)»
Позволяет выбрать или загрузить изображение с помощью медиа-менеджера.
- Директория – путь к каталогу, из которого выбираются изображения
- Предварительный просмотр – будет ли при выборе изображения показываться его миниатюра и если да, то каким образом.
- Класс изображения – CSS-класс, который будет добавлен к изображению
Поле «Переключатель (Radio)»
Позволяет выбрать значение с помощью радиокнопки.
- Значения переключателя – Предопределенные значения, из которых можно делать выбор.
Поле «SQL»
Позволяет выбрать значение из предопределенного списка значений, полученных с помощью пользовательского SQL-запроса. Запрос должен быть сформирован таким образом, чтобы он возвращал название предопределенного значения, как text и значение предопределенного значения, как value. Пример:
SELECT id as value, title as text
FROM #__usergroups
- Запрос – SQL-запрос к базе данных
- Мультивыбор – одно или несколько значений можно выбирать
Поле «Текст (Text)»
Обычное поле для ввода текста
- Фильтр – Позволяет выбрать один из вариантов фильтрации данных от отсутствия фильтрации, до превращения данных в плоский текст
- Максимальная длина – Максимальное количество символов, которое может быть введено
Поле «Текстовое поле (Textarea)»
Поля для ввода текста размеров в несколько строк.
- Строки – Высота области текста в строках
- Колонки – Ширина области текста в символах
- Максимальная длина – Максимальное количество символов, которое может быть введено
- Фильтр – Позволяет выбрать один из вариантов фильтрации данных от отсутствия фильтрации, до превращения данных в плоский текст
Поле «URL (Url)»
Текстовое поле для ввода URL.
- Схемы – Допустимые схемы URL
- Относительно – абсолютный или относительный URL
Поле «Пользователь (User)»
Выбор одного из зарегистрированных пользователей из всплывающего окна. Сохраняться будет его ID
Нет
Поле «Группы пользователей (Usergrouplist)»
Позволяет выбрать одну или несколько групп пользователей из выпадающего списка.
- Мультивыбор – одно или несколько значений можно выбирать
Варианты вывода полей в разных местах страницы сайта
Наибольший интерес настраиваемые поля Joomla будут представлять для вас, если вы можете самостоятельно переопределить и отредактировать макет. Выводить поля так, как показано в примерах выше, скучно и некрасиво. Мы все понимаем, что если выводится дата, то она должна быть оформлена, например, с иконкой календаря, если это изображение, то оно тоже должно выглядеть соответствующе. Иными словами, разным поля присуща разная верстка и разное оформление.
Добиться этого просто, если вы немножко знаете PHP. Первым делом, переопределяем макет (в нашем примере – материала) в используемый шаблон Joomla. Для этого копируем файл:
components/com_content/views/article/tmpl/default.php
в директорию:
templates/ВАШ_ШАБЛОН/html/com_content/article/
и вносим дальнейшие изменения в уже переопределенных макет.
Важно знать, что все данные настраиваемых полей хранятся в:
- $item->jcfields – для материала в списке материалов категории (на странице материалов категории)
- $this->item->jcfields – для материала на странице материала
Подставив конструкцию в переопределенный макет (в нашем примере – материала):
<pre><?php print_r($this->item->jcfields); ?></pre>
Мы увидим все данные по настраиваемым полям, которые этот материал содержит. Дальше уже, как говориться, дело техники. Верстайте себе макет, подставляя отдельные поля в его различные места. Всё просто до безобразия.
Дополнительные типы настраиваемых полей для Joomla
Помимо встроенных настраиваемых полей, сегодня существует стороннее расширение, позволяющее добавить новые дополнительные типы, такие, как видео/аудио плеер, карту Google, QR-код, аватар и многое другое. Подробнее об этом читайте в отдельной статье: Advanced Custom Fields – расширенные настраиваемые поля в Joomla
Фильтрация материалов по настраиваемым полям
В вопросе фильтрации материалов, пользователей и др., Joomla пока, к сожалению, ничего не предлагает. Но есть и хорошие новости: когда есть спрос, быстро появляются сторонние расширения. Так уже есть сторонний фильтр, умеющий производить фильтрацию по настраиваемым полям Joomla. Посмотреть можно здесь. Думаю, в ближайшее время появятся и другие расширения фильтрации по настраиваемым полям Joomla, т.к. тема крайне актуальная.
Заключение
Подводя итоги, хочется сказать следующее:
- Настраиваемые поля в Joomla, которые, помимо всего прочего, довольно легко интегрируются и в сторонние расширения, это, однозначно, очень хорошая и полезная функция. Теперь вы можете использовать ее на своем сайте, и при том совершенно бесплатно.
- В сложных проектах настраиваемые поля Joomla не заменят вам полноценную CCK (конструктор контента), вроде SEBLOD. Это нужно понимать. Не стоит надеяться решить сложные задачи с помощью настраиваемых полей Joomla. Лучше сразу использовать CCK, созданные специально для сложных задач.
- Если вы имеете некоторый опыт в разработке сайтов, знаете HTML, CSS и немного PHP, то настраиваемые поля Joomla станут вам хорошим подспорьем, позволяющим существенно расширить функционал сайта.
Попробую привести вам простой общий пример:
Видите после этой статье, перед комментариями, есть три блока: Социальные кнопки, рейтинг и другие статьи серии? Предположим, вы хотите сделать нечто подобное у себя на сайте, но вам нужно, чтобы эти блоки выводились не у всех статей, а только у тех, которые вы укажите. Раньше это было сделать довольно сложно. Теперь же очень просто:
1) Создаете 3 дополнительных поля типа "Переключатель". В каждом добавляете по 2 опции: Да и Нет.
2) Вносите в макет материала после текста статьи 3 дополнительных условия: "Если опция 1 (2 или 3) равна Да, то показываем блок 1 (2 или 3)".
После этих действий, при создании статьи, у вас появятся три дополнительные опции, которыми вы легко сможете регулировать вывод соответствующих блоков. Разве это не прекрасно?
1) Отсутствие возможности создавать произвольные типы контента
2) Отсутствие поиска/фильтрации по дополнительным полям
Из этого нужно исходить при выборе инструмента.
Если вам нужно просто добавить несколько полей к статьям. Например, ярлыки, цены, дополнительные изображения и всё в этом духе, и вы не нуждаетесь в фильтрации статей по этим полям, то можете смело использовать Joomla Custom Fields. Если же вы хотите создать полноценный тип контента, к примеру каталог книг с возможностью фильтрации по автору, году, и др. параметрам, то вам нужно использовать CCK, например, SEBLOD.
А как сделать несколько значений в одном поле?
Допустим если я хочу добавить сайты к статье, но сайтов может быть от 1 до 5 и не известно сколько
Интереснее дело обстоит, когда вводимые значения заранее неизвестны. Здесь, по умолчанию, Joomla пока не может предложить готового решения. В SEBLOD такое поле называется FieldX - поле, в котором вы можете добавлять и удалять опции. Нечто подобное виду при создании поля List, но только такой вид там при заполнении.
Здесь же, в Joomla, мы можем применить такую хитрость: используем поле Textarea. В нем будем вводить URL-лы, по одному в каждой строке. Далее, в макете статьи получим значение этого поля в виде текста и разобьем его на массив условно считая, что каждый элемент массива - это запись в новой строке. Ну а далее выводите элементы массива списком.
Правда в этом способе есть минус - так будут показаны только URL, но не полноценные анкорные ссылки.
Если же вы хотите вывести поля прямо в статье, смотрите выше раздел "Варианты вывода полей в разных местах страницы сайта".
Не в любом месте)) Например мне нужно внутри материала (в середине текста).
Можно. Кнопка в материале "Поле".
Мне вот в этом файле default_articles.php нужно их как то вывести для каждой из списка стать (категория списком), как получить данные из статей в этот файл?
В цикле перебора материалов нужно добавить:
а затем вывести нужные поля:
Это я понял, тут же вроде вывод без title, а как с title Вывести!
https://forum.joomla.org/viewtopic.php?t=961306
https://groups.google.com/forum/#!topic/joomla-dev-general/nEjCk4broOY
Еще вариант - найти модуль, где они уже выводятся, и посмотреть его код, то, как это сделано.
https://docs.joomla.org/J3.x:Adding_custom_fields/Implement_into_your_component
Для списка категорий?
Напомню, ещё об одном поле из Joomla Custom Fields - subfields (подполя)! Используя это поле можно создавать группы данных, заполняемые и выводимые на сайте, как полноценные таблицы. Для этого в настройках полей входящих в Subfields нужно добавить классы: d-table, d-table-row, d-table-cell из Bootstrap 4 Utilities Display property.
Ещё одно интересное и перспективное свойство в настройках Joomla Custom Fields - это «Layout», предназначенное для переопределения макета вывода поля. К сожалению, этим инструментом значительно повлиять на оформление вывод полей не получиться.
С уважением.
Альтернативный макет настраиваемого поля использовал всего один раз. Обычно я создаю альтернативные макеты типов контента, например, материалов, и уже в них формирую вывод настраиваемых полей как мне нужно.
С помощью поля custom fields type: Subfields создал полноценные «Отзывы» прикрепив их к материалам в соответствии с принадлежностью категориям по персонам. В материал «Специалист» добавил АЖ 14 custom fields. Фактически информация для публикации вносится только в custom fields, а сама вкладка Материал содержит только HTML-разметку и вызовы модулей и custom fields. Впечатление такое, будто бы Joomla 4 становится настоящим CCK!
Тестируйте Joomla 4 Beta она вполне рабочая. )
Subfields штука, конечно, полезная, но до полноценного CCK не дотягивает. Хотя признаюсь, нынче я и сам стал сторонником использования стандартного компонента материалов Joomla для построения разных типов контента. Настраиваемые поля позволяют существенно расширить возможности компонента материалов. Но проблема остается в том, что все равно все типы контента сваливаются в единую таблицу материалов. Да, можно легко фильтровать их по категориям или тегам, но для очень больших сайтов это всё равно будет плохо. Для таких задач я бы взял полноценный CCK, вроде SEBLOD или же написал свой простой компонент (за основу можно взять готовый простейший компонент для Joomla, который предлагается в документации как тестовый, и переделать под себя, либо использовать для создания скелета расширение Component Builder).
Уже всё по нескольку раз перерыл...
А так - самый универсальный вариант, хоть и не самый лучший - просто скрыть заголовок через CSS, используя display:none.