Сегодня обновил Joomla до версии 3.7 и обнаружил в ней очень полезную вещь, которую, очень долго ждал - пользовательские поля, привязанные к материалу. То есть, помимо стандартных полей "дата публикации", "автор", "категория" и т.д. наконец-то появилась возможность создать поля "цена", "жанр", "возрастня категория" и вообще все, что можно придмать.

Не долго думая, решил поэкспериментировать с одним из сайтов, который содержал небольшой каталог продукции с ценами. Цены были указаны непосредственно в теле статьи. Выглядело это примерно так:

price in body

Главное неудобство в том, что если захочется поменять оформление блока с ценой, нужно будет редактировать все страницы каталога. Если товаров немного, это еще можно вытерпеть, но если их сотни и тысячи, то это будет тихий кошмар! Именно поэтому я обрадовался новой возможности и решил вывести цену на продукт в отдельное поле. 

Делается это следующим образом, вот пошаговая инструкция.

1. Создаем группу полей

Прежде чем создавать поля, нужно создать группу, которая впоследствии будет привязываться к той или иной категории материалов (или ко всем категориям). То есть, можно создавать сколько угодно групп полей: для фильмов - "жанр, режиссер, длительность, возрастной рейтинг", для товаров - "цена оптовая, розничная, габариты, вес" и т.д. - и все это в рамках одного сайта.

Идем в менеджер материалов и в правой колонке выбираем пункт Field Group. В ней пока пусто, но есть кнопка "Создать", при помощи которой мы создаем группу. По сути, нужно ввести только ее имя, никакие другие настройки менять нет необходимости. Пусть эта группа будет называться "Цены".

field groups

2. Создаем поля в группе

Идем в раздел Fields и создаем поля. В настройках создаваемого поля нужно указать его название и выбрать тип. По умолчанию это текстовое поле, однако, можно выбрать и другие типы данных. Их набор довольно обширный - начиная от простых целых чисел, заканчивая элементами форм, картинками и целыми галереями. остановимся пока на обычном текстовом поле, так как цена должна быть указана не простом числом, а в формате "от ***** рублей".

field new

 

Не забываем указать привязку данного поля к группе - она на картинке помечена красным. В этом же диалоге можно указать привязку данного поля ко всем категориям контента, либо только к выбранным. Пока оставим привязку ко всем категориям.

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

3. Открываем статью для редактирования

В том же Менеджере материалов переходим в раздел "Материалы" и открываем любую статью для редактирования. При этом в редакторе у нас появится новая вкладка - "Цены". Это как раз та самая группа полей, которую мы создали в п.1 

field in article

Нам остается только проставить цены и сохранить материал.

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

fields no css

 

Чтобы выделить информацию из пользовательского поля, нам нужно задать CSS-свойства для классов .field-label и .field-value. Для этого идем в "Расширения" - "Менеджер шаблонов", находим в списке наш шаблон и кликаем по ссылке в ПРАВОЙ колонке. Открывается редактор файлов шаблона. Нам нужно найти основной CSS-файл. В случае шаблона Protostar (а также других шаблонов, созданных на его основе) этот файл расположен по адресу CSS\template.css

field css

В код справа нужно добавить строки, описывающие стиль элементов, например, эти:

.field-value {font-size: 1.5em; color: #D13D0F;}
.field-label {font-size: 1.5em; color: #000;}

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

fields new css

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

Достоинства и недостатки пользовательских полей

Признаюсь честно, я недостаточно изучил новую опцию, чтобы дать исчерпывающий ответ на этот вопрос, но очевидный плюс пользовательских полей - наконец-то можно организовать каталог товаров на сайте, не прибегая к помощи сторонних расширений, напрмер, K2. Ничего против K2 не имею, но я не сторонник перегружать сайт расширениями, так как хоть немного, но замедляет сайт, потребляя при этом дополнительную память и время ЦП, а также является потенциальным источником уязвимостей.

Недостаток пока обнаружился один - невозможно делать подписи после поля. Например, строку "от 3 000 000 рублей" нельзя разбить на строковую и числовую компоненту, чтобы потом фильтровать товары по цене как по числу, а не как по строке. Можно, конечно указывать цену в виде целого числа, но выглядеть такая надпись будет слишком уж по-машинному - Цена, руб: 3000000. Хочется надеяться, что когда-нибудь появится возможность форматировть представление полей по своему усмотрению.