Joomla - Доп поля в любом месте

Joomla - Доп поля в любом месте

Новые доп. поля в joomla сделаны весьма неплохо, а некоторых аспектах даже превосходят поля k2, но вот их вывод сделан совсем не гибко. А люблю, когда могу выводить все, так как мне нужно.
Данный хак, практически идентичен хаку по выводу доп. полей в k2, поэтому в этот раз обойдемся без долгих прелюдий.

Использование

Приложенный ниже код я вновь разбил на два варианта.
  1. Просто пере собираем массив чтобы можно было выводить поля по ключу
  2. Собираем еще дополнительным массив с группами полей чтобы можно было выдоить группу полей циклом.
Собираем новый массив
$this->item->extrafields = array();
if (isset($this->item->jcfields) && is_array($this->item->jcfields))
{
	foreach ($this->item->jcfields as $field)
	{
		if (!empty($field->rawvalue))
		{

			$this->item->extrafields[$field->name] = $field;
		}
	}
}
Выводим поле
Для примера создадим поле с заголовка Поле1 и именем (то которое английское) field1
<?php if (isset($this->item->extrafields['field1'])): ?>
	<?php echo $this->item->extrafields['field1']->title; ?>:
	<?php echo $this->item->extrafields['field1']->value; ?>
<?php endif; ?>
Собираем новые массивы
$this->item->extrafields = array();
$this->item->extragroups = array();
if (isset($this->item->jcfields) && is_array($this->item->jcfields))
{
	foreach ($this->item->jcfields as $field)
	{
		if (!empty($field->rawvalue))
		{
			$this->item->extrafields[$field->name] = $field;
			if (!empty($field->group_title))
			{
				$field->group_transliterate = str_replace(' ', '_', JLanguage::getInstance(JFactory::getLanguage()->getTag())->transliterate($field->group_title));
				if (!isset($this->item->extragroups[$field->group_transliterate]))
				{
					$group                                          = new stdClass();
					$group->title                                   = $field->group_title;
					$group->transliterate                           = $field->group_transliterate;
					$group->state                                   = $field->group_state;
					$group->access                                  = $field->group_access;
					$group->fields                                  = array();
					$this->item->extragroups[$group->transliterate] = $group;
				}
				$this->item->extragroups[$field->group_transliterate]->fields[$field->name] = $field;
			}
		}
	}
}
Выводим поле
Для примера создадим поле с заголовка Поле1 и именем (то которое английское) field1 и добавим его в группу Скачать
<?php if (isset($this->item->extrafields['field1'])): ?>
	<?php echo $this->item->extrafields['field1']->title; ?>:
	<?php echo $this->item->extrafields['field1']->value; ?>
<?php endif; ?>
Выводим группу полей
<?php if (isset($this->item->extragroups['skachat'])): ?>
	<?php foreach ($this->item->extragroups['skachat']->fields as $field): ?>
		<div>
			<?php echo $field->title; ?>:<?php echo $field->value; ?>
		</div>
	<?php endforeach; ?>
<?php endif; ?>