Классификация пользоательских метаполей и способов их вывода для MaxSite CMS.

Классификация пользоательских метаполей и способов их вывода для MaxSite CMS.

15 февраля 2011 г. Sadovnik Просмотров: 233 RSS
MaxSite CMS практика » Custom Meta для MaxSite CMS ,
MaxSite CMS позволяет к существующим полям страницы добавлять произвольные метаполя, заранее определенных типов.
Количество таких типов ограничено и насчитывает 5 шт.
  • Textfield
  • Textarea
  • Radio
  • Select
  • Checkbox

В большинстве случаев этих типов достаточно, но возникают задачи, когда требуются метаполя с другим функционированием. Возможность расширения типов метаполей предусмотрена в MaxSite CMS при помощи хука
mso_hook('admin_page_form_add_all_meta').
Эту возможность я реализовал в плагине пользовательских метаполей.
Однако добавлять метаполя к страницам полдела – необходимо потом с ними что-то еще делать (иначе, зачем их тогда добавлять).
Функционал MaxSite CMS позволяет реализовывать практически любые операции с метаполями.
Можно предположить, что список всевозможных классов метаполей, которые могут понадобиться пользователям, ограничен.
Перечень задач операций с метаполями, которые возможно нужно будет решить пользователю, вероятно, тоже невелик.
Так вот, неплохо было заранее реализовать наиболее распространенные классы метаполей и подготовить легко модифицируемые под конкретные задачи пользователей решения по операциям с ними.
Совсем неплохо было бы реализовать все это в плагине так, чтобы все можно было бы определять без программирования в меню админки плагина.
Но для начала попытаемся как-то классифицировать возможные метаполя и действия с ними.



Три группы метаполей и возможные задачи вывода для них.


1. Метаполе хранит единичное значение атрибута сущности (страницы).


Например: дата, настроение и т. п.
Значение метаполя может быть как произвольным так и из заданного списком или получаемое при помощи диалога (например, выбор файла для поля играет музыка). Может понадобиться, чтобы множество возможных значений метаполя зависело от значения другого метаполя (например Область->Город).
С метаполями этой группы могут понадобиться действия.
  1. Вывод метаполя каким-либо образом при выводе страницы.
  2. Получение всех страниц, у которых это метаполе соответствует условию.
  3. Форматированный вывод множества значений этого метаполя у страниц (календарь.

2. Метаполе группировки сущностей (страниц).


Например: метки, категории.
Метаполе хранит массив идентификаторов групп, в которых состоит сущность (страница).
Множество групп может быть заранее определено (категории) или формироваться на лету (метки). Возможны и другие экзотические пути получения допустимого множества групп.
С метаполями группировки возможны следующие действия.
  1. Вывод списка групп, в которые входит данная сущность (страница), возможно, со ссылками на эти группы вида site/ключ_метаполя/идентефикатор_группы .
  2. Форматированный вывод множества возможных значений групп (облако меток, дерево категорий).
  3. Получение и вывод всех сущностей (страниц), принадлежащих конкретной группе.

3. Метаполя, задающие отношения сущностей.


Например: дочерние страницы
В поле хранится массив идентификаторов других сущностей.
Метаполе определяет отношение между сущностями одного или разных типов. Задание отношения в админке может быть произвольным, но всегда двунаправлено.
В чем подразумевается двунаправленность?
Например, родительская -> дочерняя страница. В админке мы задаем для редактируемой страницы родительскую. Но, при этом, мы косвенно задаем и список дочерних страниц для конкретной страницы. Как альтернатива, можно было бы организовать в админке такое поле, в котором бы мы, при редактировании страницы, выбирали (чекбоксами?) несколько ей дочерних. Это было бы сложнее в реализации, ресурсоемчее, но (иногда) удобнее.
Возможные действия с такими метаполями рассмотрим на примере отношения актеры-фильмы.
  1. Получение и вывод всех фильмов, в которых играет актер.
  2. Получение и вывод всех актеров, которые играют в фильме.

Классы метаполей.


Выше были описаны три группы метаполей.
Конкретизировать эти группы можно такими классами метаполей.
  1. Текстовое метаполе, которое может быть у страниц всех или конкретного типов.
  2. Список значений.
  3. Список подстановки.
  4. Значение получается из диалога выбора файла.
  5. Чекбокс.
  6. Множественный чекбокс.
  7. Список идентификаторов групп.
  8. Список с предустановленным множеством значений.
  9. Список идентификаторов связанных по полю страниц.
  10. Список страниц, у которых в метаполе класса 8 задана связь с этой страницей.

Классификация действий с метаполями, которые могут понадобиться потенциальному пользователю.


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

Функции вывода.
  1. Вывод значения метаполя.
  2. Вывод множества всех значений меаполя.
  3. Вывод списка страниц, значение метаполя которых удовлетворяет условию.
  4. Вывод списка групп, в которые входит страница.
  5. Вывод страниц, входящих в конкретную группу.
  6. Вывод форматированного списка существующих групп.
  7. Вывод страниц, связанных с текущей страницей по полю текущей страницы.
  8. Вывод страниц, связанных с текущей страницей по полю связанных страниц.

Вывод какой-либо информации, связанной с метаполем, на страницах сайта состоит из двух этапов: подготовка блока для вывода и вывод заранее подготовленного блока.
Алгоритм вывода подготовленного блока должен быть реализован в плагине.
Могут быть такие способы (места) для вывода.
  1. При выводе страницы, например по хуку content_end.
  2. В виджете.
  3. На отдельной странице сайта.

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

Блок, который будет затем выводиться одним из вышеперечисленных способов, может быть таким.
  1. Значение метаполя страницы, представленное в нужном виде.
  2. Множество принимаемых метаполем значений (календарь, облако меток).
  3. Страницы, у которых метаполе принимает значение, удовлетворяющее условиям.

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

Выглядеть все это должно как-то так:

Метаполе my_meta (...информация о параметрах, заданных в ini...)













Блоки информацииСпособ выводаНастройкиВключить
Блок1Вывод1ОпцииON
Блок2Вывод3ОпцииOFF

То есть, для всех созданных метаполей мы можем должны мочь включить и настроить любой допустимый функционал из админки плагина.
Похожие страницы
Оставьте комментарий!

Используйте нормальные имена. Ваш комментарий будет опубликован после проверки.

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

Авторизация: Авторизация MaxSite CMS. Facebook.

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)