Тематика: По цвету: Красный Желтый Зеленый Синий Оранжевый Розовый Серый Белый Черный Мульти

Ваш сайт на CMS Joomla? Добавьте его в галерею Joomfans!

Вы можете совершенно бесплатно добавить ваш веб-сайт в нашу галерею сайтов. Подробнее...

Галерея Добавить

Специализированный хостинг для сайтов на Joomla
Главная Статьи Блог K2: дополнительные поля в разных местах шаблона
K2: дополнительные поля в разных местах шаблона
k2-extra-fields
При использовании CCK компонента K2, иногда бывает необходимость в использовании дополнительных полей. По умолчанию в компоненте K2 используется вывод всех дополнительных полей в одном месте, что очень не красиво и не удобно. Данная статья написана чтобы решить проблему с размещением дополнительных полей K2 в разных местах шаблона.
На днях общался с товарищем Static'ом, и возник такой вопрос, как корректно и правильно вывести доп. поля в разных местах шаблона. При поиске в интернете, точного и правильного вывода доп.полей в разных местах шаблона и еще с разными стилями я не нашел. Есть какие-то корявые куски кода, которые либо не дописаны, либо с ошибками или не то что нам нужно.

2012-02-21 164859

Для начала, если вы используете компонент K2 и его отдельные шаблоны то желательно скопировать все содержимое шаблонов K2 в ваш шаблон Joomla. Таким образом при обновлении K2 вы не потеряете свои новые дополнительные поля и все изменения которые внесли в файлы шаблона K2.

Шаг 1: Вывод дополнительных полей в разных местах шаблона материала K2

Итак, открываем папку: /components/com_k2/templates/
и копируем ее содержимое в папку с вашим шаблоном (предварительно создав папки com_k2/templates/): /templates/название_шаблона/html/com_k2/templates/

При желании можете сразу создать несколько шаблонов, например чтобы использовать различные стили вывода и оформления в разных категориях. Например после создания нескольких шаблонов, ваша директория и папки будет выглядить так:

  • /templates/название_шаблона/html/com_k2/templates/default/
  • /templates/название_шаблона/html/com_k2/templates/novosti/
  • /templates/название_шаблона/html/com_k2/templates/faq/

После этого необходимо создать группу полей и сами поля, после чего присвоить их к нужной категории:

2012-02-21 164802


Далее открываем материал и делаем запись в наших дополнительных полях (В нашем примере это банальные «Демо» и «Скачать»):

2012-02-21 164831

Далее нам необходимо открыть файл материала, где и выводятся наши дополнительные поля. Открываем файл /templates/название_шаблона/html/com_k2/templates/default/item.php
и в 12 строчке после:
// no direct access
defined('_JEXEC') or die('Restricted access');
вставляем данный код:
// дополнительные поля материала K2
$extrafields = array();
foreach($this->item->extra_fields as $item)
{    
$extrafields[$item->id] = $item->value;
}
После этого нам необходимо удалить существующий вывод всех дополнительных полей. Для этого в этом же файле удалите все с 250 по 266 строки. А именно:
	  <?php if($this->item->params->get('itemExtraFields') && count($this->item->extra_fields)): ?>
	  <!-- Item extra fields -->
	  <div class="itemExtraFields">
	  	<h3><?php echo JText::_('K2_ADDITIONAL_INFO'); ?></h3>
	  	<ul>
			<?php foreach ($this->item->extra_fields as $key=>$extraField): ?>
			<?php if($extraField->value): ?>
			<li class="<?php echo ($key%2) ? "odd" : "even"; ?> type<?php echo ucfirst($extraField->type); ?> group<?php echo $extraField->group; ?>">
				<span class="itemExtraFieldsLabel"><?php echo $extraField->name; ?>:</span>
				<span class="itemExtraFieldsValue"><?php echo $extraField->value; ?></span>
			</li>
			<?php endif; ?>
			<?php endforeach; ?>
			</ul>
	    <div class="clr"></div>
	  </div>
	  <?php endif; ?>
Далее нам нужно вывести одно какое нибудь дополнительное поле в материале, например это будет поле которое имеет уникальный ID - 2 (узнать ID поля можно в административной панели K2, во вкладке Доп. поля). Для этого, в этом же файле item.php ищем подходящую позицию для размещения дополнительного поля (в нашем случае в самом верху материала, под логином пользователя) и вставляем следующий код:
<?php echo $extrafields[2];?>
где [2] это ID дополнительного поля.

Обновляем страницу на сайте и видим наше одно поле, которое имеет идентификатор 2. Таким же образом вставляем другие поля в любом месте шаблона K2, только не забудьте менять ID при каждом новом добавлении поля в шаблон, в противном случае у вас получится одно и тоже поле в разных местах шаблона.

2012-02-21 191920


Далее нам необходимо добавить стиль оформления для дополнительного поля K2. Вы же хотите чтобы ваши доп.поля в K2 выглядили привлекательно? Для этого достаточно просто обрамить наш код DIV'ом или любым другим элементом по желанию и добавить к нему CSS класс для создания уникального стиля нашему дополнительному полю. Например сделаем так:
<div class="demo">
	<?php echo $extrafields[2];?>
</div>
После этого открываем CSS файл компонента K2 (можно также прописать стили в CSS файлах вашего шаблона) и создаем стиль оформления. Здесь уже делайте оформление как душе угодно. Для примера я сделал так:

2012-02-21 193346


Вы думайте на этом все? НЕТ! Если вдруг вы уберете информацию в материале из дополнительного поля K2, то вы увидите такую неприятную картину:

2012-02-22 084732


Это произошло из-за того, что мы не создали условие, при котором бы исчезали все стили или любой другой код который выводится также с нашим полем. Для этого обрамляем наш код, еще раз, и получаем на выходе такое решение:
<?php if($extrafields[1]): ?>
	<div class="button">
		<?php echo $extrafields[1];?>
	</div>
<?php endif; ?>
После если мы обновим страницу сайта, то на странице материала, стиль поля исчезнет:

2012-02-21 193627


Если мы вновь введем информацию в поле «Демо», то наша кнопка (точнее поле) снова будет отображатся на сайте:

2012-02-22 084658


В примере выше, мы использовали 2 поля (Демо и Скачать), которые были установлены в разных местах шаблона и имели совершенно разные CSS стили оформления. Поле «Демо» содержащее идентификатор ID 1, была добавлена вверх страницы, а поле «Скачать» с идентификатором ID 2 было добавлено ниже вывода полного текста статьи и отцентровано по центру материала с использованием CSS стилей.

Вы можете использовать неограниченное количество дополнительных полей компонента K2 и расставлять их в разных местах шаблона и применять к ним различные эффекты и стили оформления. Незабывайте только указывать корректный идентификатор (ID) дополнительного поля!

Вот на этом вывод дополнительных полей K2 в разных местах шаблона завершен.

Шаг 2: Вывод дополнительных полей в разных местах категории материалов K2

Если вы также хотите вывести дополнительные поля в самой категории компонента K2, при этом используя разные места вывода, то вам необходимо открыть файл category_item.php в папке с шаблоном K2. После перейдите к 12 строке, и после:
// no direct access
defined('_JEXEC') or die('Restricted access');
Вставьте следующий код:
// дополнительные поля категории K2
$extrafields = array();
if($this->item->params->get('catItemExtraFields') && count($this->item->extra_fields))
foreach($this->item->extra_fields as $item)
{    
$extrafields[$item->id] = $item->value;
}
Далее вам необходимо удалить стандартный вывод дополнительных полей в категории K2. Для этого в этом же файле category_item.php перейдите к 129 строке (нумерация может отличатся из-за внесения кода выше) и удалите все что связано с дополнительными полями (от 129 до 145 строки), а именно:
	  <?php if($this->item->params->get('catItemExtraFields') && count($this->item->extra_fields)): ?>
	  <!-- Item extra fields -->
	 <div class="catItemExtraFields">
	  	<h4><?php echo JText::_('K2_ADDITIONAL_INFO'); ?></h4>
	  	<ul>
			<?php foreach ($this->item->extra_fields as $key=>$extraField): ?>
			<?php if($extraField->value): ?>
			<li class="<?php echo ($key%2) ? "odd" : "even"; ?> type<?php echo ucfirst($extraField->type); ?> group<?php echo $extraField->group; ?>">
				<?php echo $extraField->name; ?>
				<?php echo $extraField->value; ?>
			</li>
			<?php endif; ?>
			<?php endforeach; ?>
			</ul>
	   <div class="clr"></div>
	  </div>
	  <?php endif; ?>
Далее таким же образом как и вставка в материалах K2, вставляем в необходимом месте шаблона вывода категории, наш код вывода дополнительных полей K2. Например так:
<?php if($extrafields[1]): ?>
	<div class="cat_button">
		<?php echo $extrafields[1];?>
	</div>
<?php endif; ?>

<?php if($extrafields[2]): ?>
	<div class="cat_buttons">
		<?php echo $extrafields[2];?>
	</div>
<?php endif; ?>
Данный код выведет оба наших поля (c ID 1 и ID 2) в том месте где мы установили код (в данном случае мы установили код после вывода вступительного текста статьи K2 в категории материалов). Обратите внимание на то что к классу нашей кнопки мы добавили преффикс cat_, чтобы CSS стиль не смешался со стилем кнопок (полей) материалов K2:

2012-02-22 132113


Заметьте что вывод доп.полей можно делать абсолютно в любом месте шаблона K2, при этом создавая любой внешний вид (хоть кнопка, хоть картинка, все что угодно и на ваше усмотрение).

Данное решение предназначено для CMS Joomla 1.5 и Joomla 2.5 с использованием компонента K2 v2.5.4. В более ранних версиях компонента, может быть несоответствие строк.

Если вам понравилась данная статья, вы можете также почитать статью - K2: разные стили оформления для стандартных дополнительных полей.

Эта статья является единственным простым и гибким решением для вывода дополнительных полей в материалах и категориях K2.
Пользуйтесь на здоровье!

Автор: Joomfans.com

Копирование информации без размещения активной и индексируемой ссылки - ЗАПРЕЩЕНО!

При частичном или полном копировании размещение активной индексируемой ссылки на сайт Joomfans.com - обязательно!

Партнеры

 

Комментарии

+1Kates23.02.2012 14:23#1
Очень полезный материал. Большое спасибо за статью!
Цитировать
0roika23.02.2012 15:06#2
Огромное спасибо за эту статью!
Цитировать
0decorat25.02.2012 08:58#3
Спасибо!
Цитировать
0Dem4ik21.03.2012 17:19#4
Спасибо! то что нужно.
Цитировать
0VitoriNa26.03.2012 19:01#5
Отличная работа! Все превосходно работает. Большое спасибо.
Цитировать
0shellok27.03.2012 14:15#6
помогите с проблемой при инфо из текстового дополнительного поля и оставляя его пустым оно не исчезает а прописывает
[{"name":null,"value":"","target":null}]
что это может быть код не трогал и понятия не имею как быть
Цитировать
0shellok02.04.2012 21:10#7
Неужели никто не может мне помочь???
Цитировать
0joomfans02.04.2012 21:29#8
Вопрос не совсем понятен!
Какая версия K2? Что делали, что произошла такая ошибка? и.т.д. подробнее...
Цитировать
0shellok02.04.2012 22:45#9
К 2.5.5 оригинальный код не трогал, при удалении информации из поля дополнительной информации вместо исчезновения самого поля появляется [{"name":null,"value":"","target":null}], также отображается третье поле при пустом первом
Цитировать
0shellok02.04.2012 23:39#10
Да еще особенность при отсутствии информации в 1 поле в 3 вместо введенного тоже появляется {"name":null,"value":"","target":null}] или при отсутствии в 2 доп поле эта же картина в 4. То-есть чередование получается какое-то... почему в школе php не учил???
Цитировать

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


Защитный код


Литература

Picture Yourself…

Прекрасное профессиональное руководство от издательства Course…

Joomla! Explained:…

Книга и настольное пособие для новичков в Joomla! от автора Стивена…

OSTraining - Joomla…

Продолжение серии уроков от команды Open Source Training (OSTraining)…

OSTraining - Joomla…

50 качественных видеоуроков от Open Source Training (OSTraining) в…

Инструменты

Akeeba SiteDiff

При создании сайта, всегда есть вероятность того что он будет взломан…

Morph Framework

Последняя обновленная и уже совершенно бесплатная версия фреймворка…

CodeLobster PHP…

Очень мощный и многофункциональный редактор РНР, HTML, CSS,…

JB Zen Grid Framework…

Последняя обновленная версия фреймворка Zen Grid от студии…