Компонент Тексты
Иногда появляются задачи, когда на страницах сайта в определенных местах необходимо выводить различные текстовые блоки, картинки или др. Например, текстовое описание на разводящей странице каталога перед списком всех товаров или после него. Можно конечно вставлять такие блоки непосредственно в шаблонах страниц, но, если потребуется коррекция или замена текста, или текстов станет много, то это становится проблемой.
Для решения данной проблемы в ТАО есть компонент Тексты. Основное назначение которого - вставка текстовых блоков и мета-информации в определенном месте страницы. При этом тип выводимых информационных блоков может быть не только текстовым, например, это может быть вывод графических блоков (картинки, фото, слайдеры и др.). А для работы с текстами (редактирование, подключение / отключение) организован соответствующий интерфейс в административной части сайта.
Административный интерфейс
По умолчанию в компоненте предусмотрено:
- Вывод текстовых блоков по точному адресу страницы или по 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)); } } ...