IT-Service-WordPress / WPF

Шаблон плагина для WordPress (CMS)
GNU General Public License v2.0
0 stars 0 forks source link

Разделить опции и настройки #48

Closed sergey-s-betke closed 10 years ago

sergey-s-betke commented 10 years ago

Назревает существенный редизайн классов опций и настроек по причинам несовместимости существующего дизайна классов и задачи размещения собственных элементов управления на чужих страницах настроек.

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

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

Опции же будут только отвечать за инкапсуляцию API работы с опциями, и за регистрацию / удаление опций при установке / удалении плагина. И всё.

sergey-s-betke commented 10 years ago

Однако, при подобном подходе есть одна проблема - как реализовать редактирование одной сложной опции несколькими элементами управления.

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

Учитывая тот факт, что теперь setting регистрирует элемент управления - всё усложнилось. Или нет... Ясно, что при сохранении изменённых настроек мы получаем значения каждого элемента управления. И обрабатываем их, так как каждый элемент управления зарегистрировал свою setting. В итоге - будут созданы опции для каждого элемента управления. А цель - у нас иная.

К сожалению, если использовать settings API WordPress - мы не сможем для нескольких элементов управления использовать общее составное свойство для сохранения значения. Придётся подменять отдельные функции settings API, конкретно - settings_fields.

sergey-s-betke commented 10 years ago

Можно "руками" переписать settings_fields (по аналогии с akismet).

Но - вопрос: способ хранения опций определяет класс, представляющий опцию (опции). А setting при этом определяет элемент управления. Хотя - всё реально. Достаточно при сохранении вместо прямого использования option API использовать объекты опций через объект плагина.

Но такой вариант не подойдёт, если размещать свои элементы на чужой странице. В итоге - два относительно рабочих решения:

Итого - красивых и универсальных решений в обход options API я пока не вижу. У каждого есть свои минусы, и приличные. Пока откажемся от составных свойств в пользу использования options API.