Компонент NodusFAQ

Компонент: NodusFAQ

Компонент предназначен для построения механизмов вопрос-ответ. Компонент написан как плагин к компоненту Nodus, что даёт возможность пользоваться большинством возможностей нодуса для отображения, вывода и администрирования. При этом библиотечное описание типа уложено в папку lib, но есть папка item, которая является пользовательской, её содержимое можно менять. Правда менять стоит в разумных пределах, т.е. помещённые в ней классы удалять нельзя, а наследоваться они должны от библиотечных.

Настройка

Настройка компонента проводится через 2 файла:

  • config/fields-faq.php
  • config/component.php

component.php состоит из массива параметров:

  • url - URL, на котором будет отображаться список всех вопросов и форма добавления нового вопроса (по умолчанию '/faq/');
  • from_taxonomy - булевское значение, включающее использование в компоненте механизма таксономии (по умолчанию false);
  • item_datatype - мнемокод для типа и селектора по нему (по умолчанию 'faq');
  • item_taxonomy - мнемокод для таксономии (по умолчанию 'faq_themes');
  • redefinition_template - булевское значение, включающее возможность переопределения шаблона формы для фильтров (по умолчанию false).

fields-faq.php содержит список полей (fields), используемых для отображения формы посетителю. В базе все вопросы хранятся в итемах нодуса, имена полей которого должны совпадать с полями в форме добавления вопроса. При добавлении они должны попадать как в форму добавления вопроса, так и в итем нодуса. Для упрощения данного действия в конфиге каждому полю можно задать массив nodus, который передаётся в список полей итема нодуса.

Шаблоны

Все шаблоны можно изменять, но не стоит забывать, что это плагин нодуса, и, как следствие, тут действуют его законы. Так, представление единичной записи всегда лежит в папке конкретного дататайпа (рядом с файлом Type.php). Шаблон отображения списка записей соответствует шаблону селектора, помещать их следует в папку нодуса /nodus/views/app, исключением является шаблон selector-page-bottom, его положение изменено и перенесено в папку шаблонов компонента. Назначение остальных шаблонов в папке /NodusFAQ/views/ соответствует их названию:

  • faq_insertion.phtml -- шаблон списка вопросов, отображаемых через механизм вставок;
  • form_error.phtml -- список ошибок, выявленных после заполнения формы посетителем (на стороне сервера), отображается перед формой;
  • form_ok.phtml -- текст, замещающий форму после асинхронной отправки сообщения;
  • form.phtml -- собственно сама форма для добавления вопроса посетителем;
  • selector-page-bottom.phtml -- шаблон нодуса, отображаемый после списка записей, в него вставляется форма добавления вопроса.

Для шаблона form.phtml используются скрипты и шаблоны из папок /NodusFAQ/scripts/ и /NodusFAQ/styles/ соответственно. Их переопределение, в соответствии со структурой компонентов, нужно проводить в папках /NodusFAQ/app/scripts/ и /NodusFAQ/app/styles/ соответственно.

Особое внимание хочется уделить скрипту form_faq.js, в нём:

  • переопределена стандартная валидация;
  • выполняется асинхронная отправка сообщения и приём результата;
  • на время отправки сообщения блокируется форма и показывается анимация прогресса.

Для большей гибкости в плагине предусмотрена возможность переопределять шаблон form.phtml для конкретного фильтра. В этом случае надо создать копию шаблона и к старому имени файла через дефис указать имя фильтра (шаблон имени: form-пользовательский_фильтр.phtml), при этом в имени фильра все слеши и точки надо заменить на знак подчёркивания.

Вставка на конкретные страницы и использование фильтров

В плагине предусмотрен механизм фильтрации вопросов, он основан на словах-фильтрах. Изначально в качестве фильтра выступает URL страницы с формой вопроса. Так можно помещать форму вопроса сразу на нескольких страницах и выводить на данных страницах ответы для вопросов, помеченных данным фильтром. Есть только одна сложность: набор полей желательно иметь одинаковым для всех страниц.

Теперь про вставки, их 2:

  • FAQ_add - форма для добавления вопроса, вставка может принимать 1 параметр - это пользовательское имя фильтра (если не задан то в качестве фильтра сохраняется URL).
  • FAQ - список итемов с парами вопрос-ответ, эта вставка сложнее, она может принимать до 2-х параметров. Вторым параметром всегда (если он вообще есть) является термин словаря таксономии. В качестве первого могут выступать true/false или пользовательский фильтр. По умолчанию вставка имеет значение false, что означает выводить все вопросы, true, в свою очередь будет отфильтровать список по текущему URL. Пользовательский фильтр думаю комментировать не стоит.
13.08.2014
Все статьи