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

Хотите немного Joomla-магии, господа? ;-) В этой статье я расскажу о том, как добавить любые дополнительные поля к материалам 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, позволяющий выполнять те же самые функции, но гораздо более гибко.

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

Понравилась статья? Сохраните себе на стену:

Ваша оценка материала очень важна для нас. Просим вас оценить статью или оставить отзыв в комментариях ниже.

4.4285714285714 1 1 1 1 1 4.43

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

Для отправки комментария введите код с картинки:
Защитный код
Обновить

Комментарии  

0 # RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.Dimon 09.11.2015 18:46
Ништяк! Спасибо, ща опробую))) :D
Ответить | Ответить с цитатой | Цитировать
0 # Joomla 3Игорь12 04.06.2015 16:58
Подскажите такой-же хак, для третьей джумлы
Ответить | Ответить с цитатой | Цитировать
+2 # MagiaFEO 05.03.2013 21:52
Цитирую lutsk:
А как в списке категории возле анонсов статей вывести этот параметр? Добавляю в файле templates\шаблон\html\com_content\category\blog_item.php - не выводит.

Нужно сделать так:
В blog_item.php в начале файла после $canEdit
добавить строчки
$para = $this->item->attribs;
$attribs = new JRegistry($para);
$show_pole = $attribs->get('article_pole');
echo $show_pole;
Ответить | Ответить с цитатой | Цитировать
0 # поточнееЕвгений_zif 09.11.2014 16:28
в джумле 2.5.6 можете поточнее по этому поводу написать? хочу доп поля вывести в анонсе материалов при просмотре категории
жуткие ошибки и кракозябли выдает
Ответить | Ответить с цитатой | Цитировать
0 # RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.lutsk 06.12.2012 14:42
А как в списке категории возле анонсов статей вывести этот параметр? Добавляю в файле templates\шаблон\html\com_content\category\blog_item.php - не выводит.
Ответить | Ответить с цитатой | Цитировать
0 # RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.Сергей 16.06.2012 16:56
Данный способ не работает на Joomla 2.5.4
Ответить | Ответить с цитатой | Цитировать
0 # Отдельное поле в БДНиколай 25.02.2012 08:57
Как создать для поля отдельное поле в БД?
Чтобы избежать будущих проблем, + добиться сортировки, хотелось бы добавить все таки еще и поле в БД.

пробывал аналогично - http://joomlaforum.ru/index.php/topic,40455.0.html

не получилось. подскажите пож-та.
Ответить | Ответить с цитатой | Цитировать
0 # RE: Отдельное поле в БДWedal 27.02.2012 02:46
Николай, лучше используйте конструкторы контента, типа Seblod. Они позволят добавить поля без хаков.
Ответить | Ответить с цитатой | Цитировать
0 # RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.Andrey 14.02.2012 08:55
Спасибо Автору авансом за оперативность - буду читать позже попробую. Просто поставил Нюсграббер и нужно указать ссылки на источник массово и чтоб источник был под статей.
Ещё раз спасибо- буду смотреть и при входе на Ваш сайт буду нажимать на баннеры :-)
Ответить | Ответить с цитатой | Цитировать
0 # RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.Andrey 13.02.2012 22:38
Было бы очень хорошо- если бы Вы описали как поменять позицию автора и поставить его в конец материала. Уже 3 день гуглю и всё никак.
Ответить | Ответить с цитатой | Цитировать
0 # RE: RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.Wedal 14.02.2012 01:34
Andrey, http://wedal.ru/uroki-joomla/joomla-17-layouts.html
Ответить | Ответить с цитатой | Цитировать
0 # RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.vyatka 20.01.2012 14:27
Они как раз и применили видимо подобную фишку в Joomla 2.5, где картинка для вводного текста и остального + 3 ссылки в конце статьи задаются именно при помощи этих самых полей - ФОТО
Ответить | Ответить с цитатой | Цитировать
0 # RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.rete 15.01.2012 08:38
Вот вопрос а зачем это поле вообще нужно? смысл от него? Тупо написать пару слов? Так это можно сделать и не создавая нового поля а просто дописать в статье и все
Ответить | Ответить с цитатой | Цитировать
+1 # RE: RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.Wedal 15.01.2012 09:00
rete, смысл в удобстве и аккуратности оформления. Если вы используете дополнительное поле, то вам достаточно один раз оформить его в макете. Если же вы будете выводить информацию этого поля каждый раз в редакторе, то:
1) вам каждый раз придется ее оформлять
2) если только вы не сверхаккуратный человек, то в разных материалах оформление хоть немного, но будет отличаться.
Ответить | Ответить с цитатой | Цитировать
+1 # RE: RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.joniks 21.01.2012 15:39
rete, ну смотрите я вам приведу конкретный пример. Допустим заводим мы таким образом доп. текстовое поле для вставки видео с youtobe. В это поле будем вставлять только Id(напр. oHg5SJYRHA0) от видеоролика и больше нечего.

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

Что получилось смотрим здесь __http://xmama.ru/index.php?option=com_content&view=section&layout=blog&id=5


Таким образом потратив на проблему пол часы, мы в будущем можем избавить себя от проблем со вставкой видео, ведь будет достаточно вставить лишь id видеоролика, а не весь код. И если в будущем мы решим изменить способ отображения ролика(размеры, расположение и т.д.), нам будет необходимо лишь сделать несколько правок в шаблонах, а не проходится по всем статьям.
Ответить | Ответить с цитатой | Цитировать
0 # ПревьюшкаАлександр_Prime 10.07.2015 09:13
Цитирую joniks:


Что получилось смотрим здесь __http://xmama.ru/index.php?option=com_content&view=section&layout=blog&id=5

Таким образом потратив на проблему пол часы, мы в будущем можем избавить себя от проблем со вставкой видео, ведь будет достаточно вставить лишь id видеоролика, а не весь код. И если в будущем мы решим изменить способ отображения ролика(размеры, расположение и т.д.), нам будет необходимо лишь сделать несколько правок в шаблонах, а не проходится по всем статьям.


Скажите пожалуйста, а как у Вас вывод превьшного изображения происходит к списке новостей?!
Хорошо сделано в целом все) Просто и приятно!
Ответить | Ответить с цитатой | Цитировать
0 # RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.slovoblud 12.01.2012 12:40
Не плохо. Я так понимаю что для 1.5 это тоже должно работать?
Ответить | Ответить с цитатой | Цитировать
0 # RE: RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.Wedal 13.01.2012 02:38
slovoblud, да, работает,. Только в Joomla 1.5 файл article.xml находится немного по другому адресу.
Ответить | Ответить с цитатой | Цитировать
0 # RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.joniks 12.01.2012 12:00
Рад, что помог кому то советом которым давно уже сам пользовался. Все никак руки не доходили написать соответствующий статью.

Данный возможность(не знаю по чему ее не довели joomla разработчики, думаю в ближайшее время это произойдет) избавит многих пользователей устанавливать CCK со слабыми возможностями. Тот же K2 для доп. полей использует подобную модель в виде метаданных, но они там хранятся не в виде ini-формата как в нашем случае, а в JSON форматате.

Варианты использования на самом деле весьма широки и в основном для полей по которым не нужно фильтровать или сортировать. Например унификация вставки видео материалов(напр. в блоге картинка youtobe, а в статье само видео) вставка аудио, доп. картинки(на сколько я понял в J!2.5 уже не понадобится) и другие варианты которые можно реализовать стандартными элементами(http://docs.joomla.org/Standard_parameter_types), но даже если этих элементов не хватает всегда можно расширить класс JElement добавив свое собственное поле со своим функционалом.
Ответить | Ответить с цитатой | Цитировать
0 # RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.athree 11.01.2012 09:46
К сожалению, раз вносится изменение в системный файл, это все-таки хак, а хаки - зло. Нужно осваивать SEBLOD, вот в чем сила! Там любые дополнительные поля прикручиваются на раз.
PS. Но решение и вправду - чистое волшебство :-)
Ответить | Ответить с цитатой | Цитировать
0 # RE: RE: Joomla-магия. Дополнительные поля для материалов без хаков ядра.Wedal 12.01.2012 02:55
athree, ну всё же изменения вносятся в xml файл, а не php. Файл article.xml отвечает только за набор полей статьи. Это значит, что при обновлениях текущих версий он не будет затронут. Почти наверняка он обновится при выходе новой версии Joomla. Например, Joomla 2.5. Но это происходит раз в пол года. Восстанавливать файл всего 2 раза в год - не такая уж большая плата за дополнительные поля. А если вы не собираетесь обновляться до новых версий(например, сидите на длительном релизе), то восстанавливать файл не потребуется вообще.
Ответить | Ответить с цитатой | Цитировать

Вверх