Классификация пользоательских метаполей и способов их вывода для MaxSite CMS.
Классификация пользоательских метаполей и способов их вывода для MaxSite CMS.
Количество таких типов ограничено и насчитывает 5 шт.
- Textfield
- Textarea
- Radio
- Select
- Checkbox
В большинстве случаев этих типов достаточно, но возникают задачи, когда требуются метаполя с другим функционированием. Возможность расширения типов метаполей предусмотрена в MaxSite CMS при помощи хука
mso_hook('admin_page_form_add_all_meta').
Эту возможность я реализовал в плагине пользовательских метаполей.
Однако добавлять метаполя к страницам полдела – необходимо потом с ними что-то еще делать (иначе, зачем их тогда добавлять).
Функционал MaxSite CMS позволяет реализовывать практически любые операции с метаполями.
Можно предположить, что список всевозможных классов метаполей, которые могут понадобиться пользователям, ограничен.
Перечень задач операций с метаполями, которые возможно нужно будет решить пользователю, вероятно, тоже невелик.
Так вот, неплохо было заранее реализовать наиболее распространенные классы метаполей и подготовить легко модифицируемые под конкретные задачи пользователей решения по операциям с ними.
Совсем неплохо было бы реализовать все это в плагине так, чтобы все можно было бы определять без программирования в меню админки плагина.
Но для начала попытаемся как-то классифицировать возможные метаполя и действия с ними.
Три группы метаполей и возможные задачи вывода для них.
1. Метаполе хранит единичное значение атрибута сущности (страницы).
Например: дата, настроение и т. п.
Значение метаполя может быть как произвольным так и из заданного списком или получаемое при помощи диалога (например, выбор файла для поля играет музыка). Может понадобиться, чтобы множество возможных значений метаполя зависело от значения другого метаполя (например Область->Город).
С метаполями этой группы могут понадобиться действия.
- Вывод метаполя каким-либо образом при выводе страницы.
- Получение всех страниц, у которых это метаполе соответствует условию.
- Форматированный вывод множества значений этого метаполя у страниц (календарь.
2. Метаполе группировки сущностей (страниц).
Например: метки, категории.
Метаполе хранит массив идентификаторов групп, в которых состоит сущность (страница).
Множество групп может быть заранее определено (категории) или формироваться на лету (метки). Возможны и другие экзотические пути получения допустимого множества групп.
С метаполями группировки возможны следующие действия.
- Вывод списка групп, в которые входит данная сущность (страница), возможно, со ссылками на эти группы вида site/ключ_метаполя/идентефикатор_группы .
- Форматированный вывод множества возможных значений групп (облако меток, дерево категорий).
- Получение и вывод всех сущностей (страниц), принадлежащих конкретной группе.
3. Метаполя, задающие отношения сущностей.
Например: дочерние страницы
В поле хранится массив идентификаторов других сущностей.
Метаполе определяет отношение между сущностями одного или разных типов. Задание отношения в админке может быть произвольным, но всегда двунаправлено.
В чем подразумевается двунаправленность?
Например, родительская -> дочерняя страница. В админке мы задаем для редактируемой страницы родительскую. Но, при этом, мы косвенно задаем и список дочерних страниц для конкретной страницы. Как альтернатива, можно было бы организовать в админке такое поле, в котором бы мы, при редактировании страницы, выбирали (чекбоксами?) несколько ей дочерних. Это было бы сложнее в реализации, ресурсоемчее, но (иногда) удобнее.
Возможные действия с такими метаполями рассмотрим на примере отношения актеры-фильмы.
- Получение и вывод всех фильмов, в которых играет актер.
- Получение и вывод всех актеров, которые играют в фильме.
Классы метаполей.
Выше были описаны три группы метаполей.
Конкретизировать эти группы можно такими классами метаполей.
- Текстовое метаполе, которое может быть у страниц всех или конкретного типов.
- Список значений.
- Список подстановки.
- Значение получается из диалога выбора файла.
- Чекбокс.
- Множественный чекбокс.
- Список идентификаторов групп.
- Список с предустановленным множеством значений.
- Список идентификаторов связанных по полю страниц.
- Список страниц, у которых в метаполе класса 8 задана связь с этой страницей.
Классификация действий с метаполями, которые могут понадобиться потенциальному пользователю.
Получается, что существует небольшое кол-во задач вывода, возникающие при работе с метаполями, для которых целесообразно предусмотреть готовые решения, дабы пользователь не блуждал по форуму и не существующей документации.
Функции вывода.
- Вывод значения метаполя.
- Вывод множества всех значений меаполя.
- Вывод списка страниц, значение метаполя которых удовлетворяет условию.
- Вывод списка групп, в которые входит страница.
- Вывод страниц, входящих в конкретную группу.
- Вывод форматированного списка существующих групп.
- Вывод страниц, связанных с текущей страницей по полю текущей страницы.
- Вывод страниц, связанных с текущей страницей по полю связанных страниц.
Вывод какой-либо информации, связанной с метаполем, на страницах сайта состоит из двух этапов: подготовка блока для вывода и вывод заранее подготовленного блока.
Алгоритм вывода подготовленного блока должен быть реализован в плагине.
Могут быть такие способы (места) для вывода.
- При выводе страницы, например по хуку content_end.
- В виджете.
- На отдельной странице сайта.
Построение блока для вывода должно быть реализовано при разработке метаполя.
Блок, который будет затем выводиться одним из вышеперечисленных способов, может быть таким.
- Значение метаполя страницы, представленное в нужном виде.
- Множество принимаемых метаполем значений (календарь, облако меток).
- Страницы, у которых метаполе принимает значение, удовлетворяющее условиям.
Таким образом, нужно в пагине пользовательских метаполей реализовать функционал так, чтобы можно было создавать в каком-либо виде метаполя и подключать. При этом мы должны иметь возможность включать возможный функционал вывода для каждого метаполя из админки плагина и там же задавать настройки этого вывода.
Выглядеть все это должно как-то так:
Метаполе my_meta (...информация о параметрах, заданных в ini...)
| Блоки информации | Способ вывода | Настройки | Включить |
| Блок1 | Вывод1 | Опции | ON |
| Блок2 | Вывод3 | Опции | OFF |
То есть, для всех созданных метаполей мы можем должны мочь включить и настроить любой допустимый функционал из админки плагина.
Плагин пользовательских типов метаполей Custom Meta для MaxSite CMS
Плагин родился в результате обсуждения функционала на форуме в ветке Выбор ...
mso_get_pages и типы данных в MaxSite CMS: что это и как эти штуки связанны.
Вопрос, который можно считать классическим: Я хочу, чтобы статьи в обратном ...
Добавление полей Сайт и Ник в форму комментирования для комюзеров в MaxSite CMS
В статье пойдет речь о том, как и зачем добавить в форму комментирования ...
Страница-форма регистрации для MaxSite CMS
В MaxSite CMS есть два вида пользователей: users и comusers, информация о которых ...
Вывод всех меток в виде дерева для сайта на MaxSite CMS
В предыдущей статье на эту тему Вывод меток сайта деревом я пытался ...










