На этот раз добавим полноценное поле в базу и во все соответствующие инстанции, будто так оно и было. Для примера будем ковырять имеющийся тип материала - статью.
Содержимое материалов хранится в таблице 'content'. При установке Joomla по умолчанию предлагает задать для своих таблиц префикс, поэтому следует поискать таблицу вида 'xxxxx_content'. Добавим в нее поле города:
ALTER TABLE 'content' ADD city VARCHAR (255) NOT NULL
Опишем необходимое поле в модели формы редактирования (/administrator/components/com_content/models/forms/article.xml). Поместим его внутрь основного набора полей (fieldset), располагающегося в основной части окна редактирования материала.
<fieldset addfieldpath="/administrator/components/com_categories/models/fields" >
...
<field name="city" type="text" label="Город"
description="Город" class="inputbox" size="45" />
...
</fieldset>
//Использование произвольных значений и, особенно, кириллицы в полях 'label' и 'description' иначе как вкорячиванием не назовешь, т.к. лучше указывать здесь понятные константы заглавными буквами, которые парсятся и заменяются значениями для текущего языка из файлов в каталоге /language/.
Теперь, чтобы увидеть поле в административной панели, добавим его в шаблон редактирования материала (/administrator/components/com_content/views/article/tmpl/edit.php):
<fieldset class="adminform">
...
<li><?php echo $this->form->getLabel('city'); ?>
<?php echo $this->form->getInput('city'); ?></li>
...
</fieldset>
Можно прямо сейчас бежать в админку и заполнять данное поле у всех материалов. Потом бежать в базу и видеть, что значения и в самом деле записываются. Но Joomla пока так не думает.
Запрос в базу для выборки полей материала производится в его модели (/components/com_content/models/article.php). Для добавления нашего поля требуется отредактировать запрос следующим образом:
$query->select($this->getState(...,a.city,...)
//Префикс '.a' возникает оттого, что далее в запросе таблице 'content' назначается данный псевдоним: '$query->from('#__content AS a');'.
Теперь можно смело выводить созданное поле в шаблоне материала (/conponents/com_content/views/article/tmpl/default.php), например, перед основным текстом:
<?php echo $this->item->city; ?>
<?php echo $this->item->text; ?>
Если хочется отделаться меньшей кровью
Типы полей формы в Joomla