Произвольное независимое поле материала в Joomla (28.11.2012)
На этот раз добавим полноценное поле в базу и во все соответствующие инстанции, будто так оно и было. Для примера будем ковырять имеющийся тип материала - статью.
Содержимое материалов хранится в таблице '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
Joomla
comments powered by Disqus
JavaScript (13)
PHP (11)
Brainfuck (8)
adm (8)
Joomla (4)
Canvas (3)
answers (2)
API (2)
CMS (2)
Modx (2)
jQuery (1)
Ajax (1)
SQL (1)
Shell (1)
batch (1)
10-6