Компонент Тексты

Компонент: Тексты

Иногда появляются задачи, когда на страницах сайта в определенных местах необходимо выводить различные текстовые блоки, картинки или др. Например, текстовое описание на разводящей странице каталога перед списком всех товаров или после него. Можно конечно вставлять такие блоки непосредственно в шаблонах страниц, но, если потребуется коррекция или замена текста, или текстов станет много, то это становится проблемой.

Для решения данной проблемы в ТАО есть компонент Тексты. Основное назначение которого - вставка текстовых блоков и мета-информации в определенном месте страницы. При этом тип выводимых информационных блоков может быть не только текстовым, например, это может быть вывод графических блоков (картинки, фото, слайдеры и др.). А для работы с текстами (редактирование, подключение / отключение) организован соответствующий интерфейс в административной части сайта.

Административный интерфейс

По умолчанию в компоненте предусмотрено:

  • Вывод текстовых блоков по точному адресу страницы или по cелектору нодуса.
  • Список метатегов для страницы. Если они прописаны, то при выводе они имеют приоритет.
  • Два контентных поля над списком записей и после него.

Создавать записи можно:

1. По адресу страницы. Тексты будут выводиться только на первой странице списка записей.

2. Если компонент Nodus установлен, то по селектору. При этом можно указать как мнемокод селектора так и выбрать из списка. Для селектора можно указать конкретный номер страницы, где будет выводиться текст.

Вывод на сайте

Для вывода блоков в шаблоне необходимо использовать хелпер Texts:

  • get($field, $selector = null, $page = 0) - получить текст по имени поля. Где $field - имя поля, $selector - селектор (если не указан, то данные берутся по указанному адресу), $page - номер страницы (используется, если указан селектор).
  • header() - отобразить текст перед списком записей на странице (выполняет get("text_header")). Имеет необязательные параметры $selector, $page.
  • footer() - отобразить текст в конце списка записей на странице (выполняет get("text_footer")). Имеет необязательные параметры $selector, $page.
  • metas() - выполняет подставновку мета-тегов. Имеет необязательные параметры $selector, $page.

У метода metas() есть некоторая особенность вывода мета-информации. Фактически метод возвращает пустую строку, а сами мета-теги прописываются в env->meta. Другие скрипты могут затереть значения мет, поэтому данный хелпер нужно вызывать как можно ближе к концу шаблона.

Вывод в шаблонах Нодуса

Для подключения текстов в Нодусе необходимо переопределить базовый шаблон selector-page.phtml, который изначально выглядит так:

// app/components/Nodus/views/selector-page.phtml
...
	print $this->nodus->selector_page_top($selector);
	print $this->nodus->navigator_top($selector,$pagenum);
	print $this->nodus->selector_rows($selector,array('page'=>$pagenum));
	print $this->nodus->navigator_bottom($selector,$pagenum);
	print $this->nodus->selector_page_bottom($selector);

В нем нужно заменить первую и последнюю строки на:

if ($selector->get_taxonomy_term()){
	print $this->nodus->selector_page_top($selector);
} else {
	print $this->texts->header($selector, $pagenum);
}

//...

if ($selector->get_taxonomy_term()){
	print $this->nodus->selector_page_bottom($selector);
} else {
	print $this->texts->footer($selector, $pagenum);
	$this->texts->metas($selector, $pagenum);
}

Проверка $selector->get_taxonomy_term() сделана для того, чтобы текст подставлялся только в обычных селекторах и не затрагивал таксономию, где тексты/меты можно прописать и без подстановок.

Или можно переопределить шаблоны selector_page_top и selector_page_bottom.

// app/components/Nodus/app/views/selector-page-bottom.phtml

<?php
	$text = $this->texts->footer();
	if (!$text) {
		$text = $this->texts->footer($selector, $pagenum);
		$this->texts->metas($selector, $pagenum);
	} else {
		$this->texts->metas();
	}
?>
<?php if ($text) { ?>
	<div class="footer-text footer-text-<?=$name?>">
		<?=$text ?>
	</div>
<?php } ?>

Добавление кастомизированного поля

Для добавления нового поля необходимо добавить его описание в массив в файле fields.php в папке config компонента или переопределить одно из существующих. Поля формируются на основе стандартных типов полей.

// app/components/Texts/app/config/fields.php

<?php
return array(
	'texts' => array(
		'slider' => array(
			'caption' => 'Слайдер',
			'presets' => array(
				'thumb' => 'crop(300, 300)',
			),
			'tab' => 'default',
			'type' => 'gallery',
			'weight' => 2000,
		),
	),
);

В шаблоне для получения поля необходимо воспользоваться методом get('slider').

// где-то в шаблоне ... вывод галереи изображений перед списком товаров

$slider = '';
	$term = $selector->get_taxonomy_term();
	if ($term) {
		if ($term->field('slider')->count()) {
			$slider = $this->partial('../app/views/partial/slider.phtml', array('value' => $term->field('slider')));
		}
	} else {
		$field = $this->texts->get('slider', $selector, $pagenum);
		if ($field) {
			$slider = $this->partial('../app/views/partial/slider.phtml', array('value' => $field));
		}
	}
...
Метки: Нодус
12.05.2015
Все статьи