Joomla-магия. Дополнительные поля для материалов без хаков ядра.

0
48

Хотите немного Joomla-магии, господа? ;-) В этой статье я расскажу о том, как добавить любые дополнительные поля к материалам Joomla не касаясь базы данных и не ломая ядро(ну почти :-)).

Joomla-магия.

Начиная с Joomla 3.7, дополнительные поля для материалов стали частью ядра Joomla. Если вы используете последнюю версию Joomla, данная статья для вас не актуальна.

Всё началось с того, что в комментариях к статье «Новые функции Joomla 2.5» один из пользователей написал, что есть способ добавить дополнительные поля к материалам Joomla не касаясь базы данных и ядра.  Суть его заключается в следующем (все действия описываются для Joomla 1.7):

1) Открываем файл administrator\components\com_content\models\forms\article.xml
2) В самый конец группы полей attribs (примерно 335 строка) добавляем собственное поле:

<field name="article_additional" type="inputbox" label="Дополнительное поле" description="Это дополнительное поле, которое мы создали" class="inputbox" size="25" />  

3) В макете материала templates\ваш_шаблон\html\com_content\article\default.phpдобавляем вывод данных из нашего поля. В нужном месте пишем следующий код:

<?php if ($params->get('article_additional') !== '') : ?> <!-- Проверяем не является ли параметр пустым-->
<?php echo JText::_($params->get('article_additional')); ?> <!--Выводим значение параметра-->
<?php endif; ?> <!--Конец проверки-->  

На этом всё. Добавляем новую статью. В параметрах отображения материала видим наше поле:

Вводим в поле информацию. Сохраняем статью. Идем на сайт. Смотрим эту статью. Видим информацию введенную в новое поле:

Ну разве не волшебство? :-)

Тайна фокуса.

Но давайте всё-таки разберемся, как такое возможно. Данная фишка, как оказалось, довольно известна. Но лично я о ней не знал и решил, что ее описание здесь будет не лишним. 

Как же получилось сохранить информацию, не создавая дополнительных полей в базе данных? Оказывается, всё просто. Если мы заглянем в базу, то увидим, что в таблице материалов Joomla есть столбец attribs, в котором сохраняются все параметры отображения статьи. Все те, которые мы видим справа, когда добавляем материал в админке. 

Все эти параметры считываются как раз из файла administrator\components\com_content\models\forms\article.xml.

Таким образом, добавив в этот файл всего несколько строчек, мы получаем дополнительное поле любого типа, которое хранится в поле attribs таблицы _content базы данных Joomla.

Ну а дальше проверяем наличие в нашем поле данных и если таковые имеются, выводим их в макете статьи.

Дополнительная информация.

Параметры добавляемого поля:

  • Name – название поля. Придумываем сами.
  • Type – тип поля. Т.к. я создаю текствовое, то использовал inputbox. Другие типы можно посмотреть выше в этом же файле.
  • Label – текст, который написан перед полем. Придумываем сами.
  • Description – описание, появляющееся во всплывающей подсказке. Придумываем сами.
  • Class – CSS-класс для оформления поля. Указываем такой же, как и для других полей этого типа.
  • Size – размер поля. Указываем такой же, как и для других полей этого типа.

В примере я заменил языковые константы на обычный текст. Так делать не нужно. Это сделано лишь для упрощения примера.

Заключение.

К сожалению, данный фокус обладает рядом недостатков:

  • При переходе на следующую версию Joomla, файл article.xml скорее всего обновится и изменения пропадут. Т.е., фактически,  мы всё же применили один мини-хак;
  • Расположение дополнительных полей в админке стандартное. Его можно изменить, но это потребует дополнительных хаков;
  • Информацию из дополнительных полей можно показывать в контенте, но по ним нельзя производить фильтрацию материалов. Сей факт является наиболее печальным, т.к. фильтрация крайне важна. Я не говорю, что фильтрацию нельзя сделать в принципе. Можно создать дополнительный компонент, который будет фильтровать материалы по атрибутам, но вряд ли кто-то займется этим в ближайшее время. Тем более, что есть SEBLOD, позволяющий выполнять те же самые функции, но гораздо более гибко.

В результате мы имеем небольшой фокус, который может быть полезен только в некоторых случаях. Но это всё равно лучше, чем ничего :-).

Похожие записи

19.06.2019
0
2

Joomlashack Community v4.2.17 - социальный шаблон для Joomla

Joomlashack Community - это отличный вариант создания общественной сети для обмена полезной информаци...
18.06.2019
0
3

Какие сайты создают на Joomla

Аббревиатура CMS обозначает понятие Content Management Software, или по-русски Система Управления Содержи...
17.06.2019
0
10

Панель управления Joomla — управление backend

Вступление У сайта Joomla есть две части, одна часть для посетителей, называемая Frontend (фронтэнд)...

Комментарии

Ваш комментарий будет отправлен на модерацию.
  • Комментарии не найдены