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/ - стандартные шаблоны. Не трогать.

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

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

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

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

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

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

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

Все версии

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


Версия Дата
3.1.0
Изменения

Добавлена поддержка выгрузки списка записей из админского интерфейса в csv-файл (@kraynova).

31.05.2019
3.0.59
Изменения
Исправлен баг TaxonomyMultilink, проявляющийся в админке при наличии привязки записи к не существующему термину.
14.02.2018
3.0.58 22.01.2018
3.0.57
Изменения
Поддержка HTTPS
16.01.2018
3.0.56
Изменения
Fix: При отклики записи по id в редирект на корректный url попадает лишний `?`
21.09.2017
3.0.55
Изменения
При редиректе с адреса по id записи на пользовательский больше не теряются get-параметры
08.08.2017
3.0.54 12.05.2017
3.0.53 25.04.2017
3.0.52 20.04.2017
3.0.51 06.09.2016
3.0.50 06.07.2016
3.0.49 29.06.2016
3.0.48 08.04.2016
3.0.47 07.04.2016
3.0.46 16.03.2016
3.0.45 10.03.2016
3.0.44
Изменения
Для терминов таксономии добавлена поддержка метатегов
Для таксономии добавлены настройка, отключающая поля для режима отклика по URL
01.03.2016
3.0.43 15.02.2016
3.0.42 04.02.2016
3.0.41 22.01.2016
3.0.40 13.01.2016
3.0.39 09.12.2015
3.0.38 03.12.2015
3.0.37 27.11.2015
3.0.36 24.11.2015
3.0.35 18.11.2015
3.0.34 16.11.2015
3.0.33 10.11.2015
3.0.32 11.10.2015
3.0.31 23.09.2015
3.0.30 27.08.2015
3.0.29
Изменения
Таксономия: исключены из навигации термины, у которых не установлен "url-отклик"
08.06.2015
3.0.28 24.04.2015
3.0.27 11.03.2015
3.0.26 06.02.2015
3.0.25 13.01.2015
3.0.24 02.12.2014
3.0.23 06.11.2014
3.0.22 06.11.2014
3.0.21 07.10.2014
3.0.20 11.09.2014
3.0.19 01.08.2014
3.0.18 01.08.2014
3.0.17 26.06.2014
3.0.16 22.05.2014
3.0.15 12.05.2014
3.0.14 25.04.2014
3.0.13 24.04.2014
3.0.12 24.04.2014
3.0.11 23.04.2014
3.0.10 23.04.2014
3.0.9 23.04.2014
3.0.8 10.04.2014
3.0.7 04.04.2014
3.0.6 31.03.2014
3.0.5 28.03.2014
3.0.4 14.03.2014
3.0.3 13.03.2014
3.0.2 06.03.2014
3.0.1 04.03.2014
3.0.0 04.03.2014