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

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

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

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

Главная Статьи Блог 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
Очень полезный материал. Большое спасибо за статью!
+3roika23.02.2012 15:06#2
Огромное спасибо за эту статью!
+1decorat25.02.2012 08:58#3
Спасибо!
+1Dem4ik21.03.2012 17:19#4
Спасибо! то что нужно.
+1VitoriNa26.03.2012 19:01#5
Отличная работа! Все превосходно работает. Большое спасибо.
-2shellok27.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}], также отображается третье поле при пустом первом
+1shellok02.04.2012 23:39#10
Да еще особенность при отсутствии информации в 1 поле в 3 вместо введенного тоже появляется {"name":null,"value":"","target":null}] или при отсутствии в 2 доп поле эта же картина в 4. То-есть чередование получается какое-то... почему в школе php не учил???

Литература

8 видеоуроков по…

На днях популярная и известная студия по разработке шаблонов и…

Joomla!…

Если вы часто создаете сайты на CMS Joomla! 1.6, 1.7 или 2.5 то вы…

10 легких шагов к…

Прочитав книгу Хагена Графа «10 легких шагов к освоению Joomla! 3.0»…

Joomla! 2.5 -…

Книга «Joomla! 2.5 - Руководство для начинающего пользователя»…

Инструменты

Akeeba SiteDiff

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

Morph Framework

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

CodeLobster PHP…

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

JB Zen Grid Framework…

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