В шаблоне списка статей или полного вида статьи Вы увидите объект $item
, который содержит в себе Запись (record).
Объект $item
содержит как основные свойства Записи, например ctime (время создания), rating (рейтинг), hits (просмотры), user_id (id пользователя), так и поля. Доступ к основным свойствам Записи можно получить, как показано ниже:
Hits: <?php echo $item->hits; ?>
Для просмотра всех свойств объекта $item
можно просто добавить в нужных местах шаблона следующее выражение
var_dump(get_object_vars($item));
Если вы хотите получить URL текущей записи. Для URL объекта $item
это работает так
<?php echo JRoute::_($item->url);?>
Если Вам необходим URL другой записи и Вы имеете только ID
<?php echo JRoute::_(Url::record($record_id));?>
Теперь объект $item
содержит несколько массивов полей, организованных различными способами.
$item->fields_by_id
- массив полей записи, где ID поля является ключом массива.$item->fields_by_key
- массив полей записи, где ключ (key) поля является ключом массива. Пожалуйста, прочитайте что это такое в FAQ в конце этого раздела статьи.$item->fields_by_group
- многоуровневый массив полей записи, где первый уровень является группой полей, а на втором уровне расположены сами поля. Поля не сгруппированые в группы находятся в индексе 0
.Существует два варианта показать результаты Ваших полей. И очень просто принять решение, какой из них использовать. Если Вы создаете шаблон который предположительно будет отображать разные типы контента, необходимо использовать доступ к полю через fields_by_key
. Если Вы создаете шаблон для одного типа контента, можно использовать метод fields_by_id
.
<?php if(isset($item->fields_by_id[12])): ?>
<span class="field-year">
<?php echo $item->fields_by_id[12]->result; ?>
</span>
<?php endif; ?>
Если Вы хотите вызвать поле по ключу, сначала необходимо получить ключ по ID поля а потом уже вызвать поле по ключу.
<?php $key = $this->fields_keys_by_id[12];?>
<?php if(isset($item->fields_by_key[$key])): ?>
<span class="field-year">
<?php echo $item->fields_by_key[$key]->result; ?>
</span>
<?php endif; ?>
Пример выше поддерживает шаблон с несколькими типами контента. Предположим это список статей нескольких типов и в каждом типе есть поле цена. В одном типе это ID 12 в другом 25. Этот пример покажет как то поле так и другое. Так как $this->fields_keys_by_id[12]
и $this->fields_keys_by_id[25]
вернут совершенно одиноковый ключ.
Вы можете найти идентификатор поля в списке полей (2)
Ключ поля теперь есть часть поддержки нескольких типов контента в шаблонах. Вам не нужно создавать этот ключ, я просто хочу объяснить нашу концепцию. Ключ поля образуется как результат MD5 типа поля и его метки.
$field_key = 'k'.md5($field->label.'-'.$field->field_type);
Пусть метка поля будет Year и тип поля будет digits. Тогда
$field_key = 'k'.md5('Year-digits');
Тогда при вызове поля по ключу (field by key), независимо от его типа, если это было поле Year типа digits, оно будет показано в Вашем шаблоне.
Вы можете найти ключ поля в столбце key
списка полей jos_js_res_fields
(3).
Самый просто способ получить текст без HTML кода.
echo strip_tags($item->fields_by_id[12]->result);
Предположим есть поле которое нельзя показывать в списке но вы хотите получить данные этого поля. У объекта $item
есть свойство fields
. Оно является массивом данных с индексом данных полей по айди поля. Вот такой код покажет вам читсные данные поля не обработаные и не преобразованые в HTML.
var_dump($item->fields[12]);
Вы можете использовать этот метод для получения списка свойств объекта.
var_dump(get_object_vars($item->fields_by_id[12]));
Каждый $item->fields_by_key[$key]
или $item->fields_by_id[12]
является объектом Поле (field) и содержит значительно больше параметров, чем ->result
.
Некоторые из них очень полезны. Например, в таблице Вы хотите все поля типа digits выровнять по правому краю.
<td<?php echo ($field->type == 'digits' ? ' align="right" ' : NULL ) ?>>
<?php echo $field->result;?>
</td>
Или $item->fields_by_id[12]->params
содержит в себе все параметры, которые Вы установили при создании поля. Например класс, установленный в параметрах поля.
<span class="my-class <?php echo $item->fields_by_id[12]->params->get('core.field_class')?>">
<?php echo $item->fields_by_id[12]->result;?>
</span>
Или $field->value
содержить не обработанные данные поля.
Вы можете найти тип поля в списке полей (1)
Это отличная технология для управления, стилизации или позиционирования полей. Например, есть поле Price. И Вы хотите показать его в определенном месте в особом стиле.
Добавьте параметр
<fields name="tmpl_params">
<fieldset name="name1" label="Position Fields" key="id"
description="Set fields to be positioned">
<field name="field_price" type="meresourcesfields" label="Where is the price?" />
</fieldset>
</fields>
Если Вы хотите, чтобы в списке были показаны поля только некоторого типа, используйте атрибут filters="'text', ' textarea', 'html'"
. Этим Вы ограничите типы показываемых полей.
Чтобы поле имело множественный выбор, добавьте size="15"
и multiple="true"
В шаблоне используйте что-нибудь типа этого
<?php $key = $this->fields_keys_by_id[$params->get('tmpl_params.field_price')];?>
<?php if(isset($item->fields_by_key[$key])): ?>
<span class="field-price">
<?php echo $item->fields_by_key[$key]->result; ?>
</span>
<?php endif; ?>
Читайте подробнее о работе с параметрами в шаблонах
После того, как Вы вывели это поле, Вы можете исключить его из массива полей.
<?php $key = $this->fields_keys_by_id[$params->get('tmpl_params.field_price')];?>
<?php if(isset($item->fields_by_key[$key])): ?>
<span class="field-price">
<?php echo $item->fields_by_key[$key]->result; ?>
<?php unset($item->fields_by_key[$key]) ?>
</span>
<?php endif; ?>
Теперь поля field_price не будет в массиве.