Приветствую Вас на сайте Joom4all, тема сегодняшней статьи будет связана с дополнительными полями Joomla 3.
Что такое дополнительные поля и как с ними работать думаю, знает каждый веб-разработчик знакомый с системой управления контентом Joomla 3. Однако хочу заметить, что не каждый знает, каким образом они выводятся на страницах сайта и как выводить дополнительные поля в ручном режиме.
Для вывода дополнительных полей на страницах сайта предусмотрено четыре стандартных способа, три из которых выводят поля в автоматическом режиме и только один подразумевает ручной вывод дополнительных полей (вкладка «Параметры» в редакторе поля):
Способы отображения дополнительных полей
Давайте рассмотрим каждый метод подробнее, а Вы уже сами для себя определитесь какой подходит именно для Вашего сайта.
After Title
Данный метод подразумевает автоматическое отображение поля при помощи события onContentAfterTitle. Что это значит? А значит это то, что все дополнительные поля, у которых в качестве метода отображения установлено значение «After Title» будут выведены после заголовка материала, но перед информационным блоком (метками, датой создания, автором и т.п.).
Если посмотреть в код файла шаблона статьи, или например блога категории то можно заметить там строки, отвечающие за вывод информации при помощи события onContentAfterTitle:
Before Display
Данный метод отображения дополнительных полей подразумевает их вывод перед основным текстом материала (в том числе перед изображением полного текста), но после блока с информацией (если таковой присутствует) при помощи события onContentBeforeDisplay:
After Display
Последний из автоматических режимов отображения дополнительных полей Joomla 3. Данный метод как Вы наверно уже догадались, подразумевает вывод полей после основного текста материала в самом конце документа, при помощи плагина onContentAfterDisplay:
Вывод дополнительных полей в ручном режиме
Последний и, на мой взгляд, более правильный режим отображения дополнительных полей это ручной режим («Не показывать автоматически» в параметрах отображения). Именно в ручном режиме мы не привязаны к конкретной области документа и можем сами решать, где и когда вывести, то или иное дополнительное поле. Но есть в этом методе и определенная сложность – внесение в файлы определенного кода.
Код не слишком сложный, можно даже сказать достаточно простой. Все что нам требуется это создать пустой массив и записать в него все имеющиеся значения полей для текущего материала. После этого можно выдергивать из уже заполненного массива значения того или иного поля и выводить их в любом месте страницы.
Кроме того используя ручной режим отображения дополнительных полей можно оформлять поля по своему усмотрению, в автоматическом режиме такой тонкой настройки каждого конкретного поля добиться увы не удастся.
Теперь давайте перейдем от слов к делу и выведем некоторые дополнительные поля вручную. Для этого как я уже и говорил, создаем пустой массив и заполняем его значениями:
<?php // Вывод дополнительных полей $additionalFields = array(); //Создаем пустой массив, имя переменной выставляем по своему усмотрению foreach($this->item->jcfields as $field) {/*Пробегаемся циклом по всем полям текущего материала*/ $additionalFields[$field->name] = $field->value; /*И добавляем их значения в наш ранее созданный массив*/ } // Теперь можно использовать значения массива для вывода пользовательских полей в указанных местах?>
Как видите, нет ничего сложного, массив заполнен значениями дополнительных полей и теперь можно использовать эти значения для вывода полей в нужных местах страницы. Все что от нас потребуется это значение имени поля для его идентификации и функция echo(). В качестве примера давайте выведем поле с именем price в нужном нам месте:
<? if (isset($additionalFields['price']) and !empty($additionalFields['price'])) :?> <div class="price"> <span>Распространение: </span><p><?php echo $additionalFields['price']; ?></p> </div> <?php endif; ?>
Что тут происходит? Сначала мы запускаем обычное условие, где проверяем, установлена ли наше поле (isset($additionalFields['price'])), а так же есть ли в нем данные (!empty($additionalFields['price'])). Если результат проверки истина (то есть поле существует и не пустое), тогда выводим его значение при помощи функции echo (echo $additionalFields['price'];).
Вот таким не хитрым образом мы вывели значение дополнительного поля в Joomla 3. Чтобы было понятно, откуда я взял имя поля со значением «price» посмотрите на скриншот ниже:
Аналогичным образом выводим оставшиеся дополнительные поля. Причем хочу отметить, что повторно создавать массив и заполнять его значениями не нужно, ибо зачем, ведь он у нас уже заполнен. В качестве примера посмотрите на кусок кода, с помощью которого выводятся дополнительные поля:
На этом, пожалуй, все. Теперь Вы знаете, каким образом можно выводить дополнительные поля на страницах сайта. До скорых встреч.