Нодус

Компонент: Nodus

Один из вариантов перевода слова "nodus" на русский язык звучит как "сложное сплетение обстоятельств". Компонент Нодус именно для таких случаев и предназначен:

  • когда контент сайта состоит из материалов разного типа с разным реквизитным составом
  • материалы могут быть взаимосвязаны друг с другом единичной и множественной связью
  • материалы могут быть связаны с различными рубрикаторами единичной и множественной связью
  • существует потребность делать выборки материалов по различным критериям

В Нодусе применена технология DB.Schema - автоматическая настройка структуры базы данных, поэтому программисту не придется лезть в SQL-менеджер для создания таблиц и полей в них. Достаточно описать поля в PHP-файлах, и структура базы данных будет изменена автоматически. При заливке (или обновлении) проекта на хостинг также нет нужды беспокоиться о заливке и синхронизации таблиц - достаточно только залить PHP-файлы.

Базовые понятия

Материалы (записи, итемы, items)

Весь контент состоит из единичных материалов. Это страницы, новости, статьи, элементы каталога товаров и пр.

  • Материал может быть отображен как в виде отдельной страницы, так и в виде блока на другой странице (или в обрамлении сайта).
  • Каждому материалу можно задать его полный URL (для отображения в виде отдельной страницы). Если URL не задан, то он будет сформирован автоматически на основе его числового идентификатора.
  • Каждый материал в Нодусе принадлежит к какому-либо типу данных.
  • Можно делать выборки материалов по разным критериям.

Режим отображения (display mode)

Один и тот же материал можно отобразить в разных режимах. Возьмем, к примеру, элемент каталога товаров. Его можно отобразить как:

  • Элемент в листинге раздела каталога
  • Элемент витрины
  • Строка при отображении содержимого корзины
  • Карточка товара. Причем, если информации много, то у одного товара может быть и несколько карточек. Например: общая информация, технические характеристики, фотогалерея - везде отображается один и тот же материал, только в разных режимах.
  • На карточке товара может быть отображен список сопутствующих товаров, внешний вид которого отличается от всех остальных режимов.

В самом простом случае (по умолчанию) у каждого материала есть два режима отображения:

  • full - полная версия. Информация по материалу, отображаемая на отдельной странице
  • teaser - "приманка", "завлекалка". Выводится в списках. Например, для новостей это - блок, содержащий дату, заголовок, анонс и ссылку на полную версию.

Для нужд каждого конкретного проекта разработчики вольны придумывать сколь угодно много режимов отображения того или иного материала.

Тип данных (datatype)

Тип данных - объект, описывающий реквизитный состав и поведение материала. Каждый тип данных характеризуется мнемокодом, а его логика реализуется специально написанным классом. Для добавления нового типа данных достаточно создать модуль с этим классом.

Навигация

В Нодусе есть механизм, позволяющий визуально редактировать древовидную структуру навигации. При этом ее можно внедрить в общую струкутуру навигации сайта через директиву %nodus в настройке "navigation". Для удобства пользователя при добавлении нового материала можно одновременно с этим добавить и новый узел в структуру навигации со ссылкой на создаваемый материал.

Таксономия

Это система словарей. Для добавления словаря достаточно создать модуль (совсем маленький - несколько строчек), описывающий этот словарь. Каждый словарь характеризутется мнемокодом.

  • Словари могут быть как линейными, так и древовидными.
  • Структуру словаря можно добавить в навигацию сайта.

Термин

Термин - элемент словаря. Материалы могут быть связаны с терминами как единичной, так и множественной связью. Каждому термину можно назначить URL, по которому будет отображаться список материалов, связанных с данным термином.

Селектор

Объект, описывающий выборку материалов того или иного типа по какому-то критерию. По одному или нескольким значениям полей, по признаку привязки к термину таксономии, по признаку привязки к другому материалу и т.д.

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

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

Для каждого типа данных автоматически создается селектор по умолчанию с тем же самым мнемокодом, что и у типа. Он делает выборку по единственному критерию - принадлежности материала к данному типу. Этот селектор можно переопределить для добавления и изменения его логики.

Аналогично, для каждого словаря таксономии создается селектор по умолчанию для выборки материалов по термину.

Особенности администрирования

В нодусе есть единая таблица итемов и единый режим администрирования: в линейной таблице находятся итемы всех типов, отсортированные по дате последнего изменения. Сверху отображаются недавно измененные итемы, а давно забытые уходят в конец. Есть возможность отфильтровать по типу, а также поиск по строке.

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

Как все это устроено

Рассмотрим файловую структуру компонента: app/components/Nodus.

  • app/ - предназначен для хранения всего что может переопределить программист. Имеет свою структуру (повторяет структуру папок самого компонента):
    • app/Datatype/ - сюда будем помещать описания типов данных и шаблоны для их отображения. По умолчанию там находятся два предустановленных типа: Page и News. Ими можно пользоваться для нужд проекта, изменять под те же нужды, а так же использовать как наглядное пособие.
    • app/Selector/ - здесь будут жить классы селекторов. Предустановленных селекторов нет. Да и вообще подозреваю, что не на всяком проекте в этой директории что-то будет (время покажет).
    • app/Taxonomy/ - а это место для классов таксономии. Тоже нет предустановленных, т.к. типичные словари (нужные большинству проектов) что-то не придумываются.
    • app/views/ - шаблоны приложения. Можно трогать. Именно сюда нужно класть пользовательские шаблоны, при нужде копируя из стандартных и переименовывая (об этом отдельная тема).
  • images - картинки и иконки компонента.
  • lib - библиотеки компонента. Загляд и залаз в этот каталог с целью изучения приветствуется, а вот изменение и доработка напильником файлов в нем - категорически не рекомендуется.
  • scripts - js-скрипты.
  • views - шаблоны. Внутри есть своя структура:
    • views/admin - шаблоны админки. Не трогать.
    • views/ - стандартные шаблоны. Не трогать.

А далее следует набор статей, поясняющих с точки зрения разработчика как пользоваться Нодусом.

Инструкции для разработчика

Тренироваться будем на кошках. В качестве примера будем создавать каталог представителей семейства кошачьих, постепенно расширяя функционал.

Важное замечание!!!

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

Помните, что нет такой цели - сделать сайт, используя только стандартные средства. Есть цель - сделать сайт, удовлетворяющий условиям:

  • Сайт должен хорошо работать
  • Сайт должен быть создан с наименьшими затратами
  • Сайт должен легко поддерживаться, развиваться и модифицироваться, в том числе и другими программистами (не только создателем).
Метки: Нодус
26.06.2014
Все статьи