Добавление элемента радиокнопки в админки модулей и плагинов с расширением *.xml для версии 1.10.7.

+4
634
В этой заметке рассказывается о добавлении поддержки радиокнопки, как элемента управления, в админках модулей и плагинов.

Я давно сталкивался с необходимостью использования этого элемента форм при создании админок и плагинов и модулей.
До сих пор этот вопрос удавалось как-то обходить, или выкручиваться, используя другие элементы управления. Например, чекбоксы. Или, для модуля, приходилось создавать *.php админку ради одной радиокнопки.
Но для плагинов нельзя создать *.php админку — только *.xml
И вот сейчас мне надоело. Мне до зарезу понадобилась кнопка в админке плагина CKEditor.

И теперь она есть.

Постановка задачи

Требовалось сделать поддержку движком радиокнопки в *.xml админках модулей и плагинов.

Измененные файлы.

admin\applets\plugins.php
admin\applets\modules.php
core\classes\formgen.class.php

Кроме того, изменились файлы плагина CKEditor. На этом плагине я "обкатывал" работоспособность кода.
plugins\p_ckeditor\backend.xml
plugins\p_ckeditor\plugin.php
plugins\p_ckeditor\upload.php
languages\ru\plugins\p_ckeditor.php

Как выглядит код генерации кнопки в админке

Для создания кнопки, в админке модуля или плагина, нужно открыть *.xml админку на редактирование. В ней найти контейнер <params></params>
Между этими тегами, в нужном месте, помещаем код кнопки:
  1. <param type="radio" name="upload_adress" definitions="wysiwyg, component, upload" default="component" />
Вот и все. Просто, правда? Остальное возмет на себя движок. Он автоматически создаст три кнопки, причем "нажатой" сделает вторую.

Иллюстрация

Как видим, параметру type присвоено значение radio. Это указание движку, что будут создаваться радиокнопки.

Имя name у всех кнопок, как требуют правила html, одинаково. В данном примере я присвоил имени значение upload_adress. Под этим именем на сервер будут передаваться одно из значений, перечисленных в параметре definitions: либо wysiwyg, либо component, либо upload. Количество значений в этом параметре определяет количество кнопок.
Поскольку значений в этом примере три, то будут созданы три кнопки. Хотите две кнопки — присвойте параметру definitions два значения, перечисленных через запятую. Нужно Вам, например, десять кнопок — присваивайте параметру definitions десять значений, через запятую. И так далее.

Параметр default указывает значение по умолчанию. Сюда надо вписать любое значение из параметра definitions, которое Вы считаете нужным сделать по умолчанию. Тогда нужная кнопка окажется нажатой.

Однако не все так просто. Тут очень дальше хитро! Движку надо указать имя группы кнопок и надписи на кнопках. Это делается в языковом файле плагина (или модуля, если вы модуль делаете).
Открываете языковой файл нашего плагина languages\ru\plugins\p_ckeditor.php и пишете туда:
  1. $_LANG['PLU_UPLOAD_ADRESS'] = 'Папка загрузки изображений';
  2. $_LANG['PLU_UPLOAD_ADRESS_DEF_WYSIWYG'] = 'Папка wysiwyg';
  3. $_LANG['PLU_UPLOAD_ADRESS_DEF_COMPONENT'] = 'Папка компонента';
  4. $_LANG['PLU_UPLOAD_ADRESS_DEF_UPLOAD'] = 'Папка upload';
Что-то здесь и вправду хитро! Давайте разбираться!

Как видим, PLU — префикс, указывающий, что эта переменная относится к плагину.
Для модуля языковая переменная составляется также, только используется префикс MOD.

Дальнейшие правила для плагина, и для модуля одинаковы.

Смотрим внимательно: UPLOAD_ADRESS совпадает со значением параметра name, только записана прописными буквами. Традиция на InstantCMS такая — обозначать языковые переменные прописными буквами. Так они лучше различаются в тексте кода.

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

Итог

Данная программная реализация уже вставлена мной в ожидаемый релиз 1.10.7.008. Протестировать я успел только на одном плагине и на одном модуле.
Буду раз, если кто-то из коллег попробует вставить радиокнопку в другие плагины или модули.
Если что-то выйдет криво, прошу не орать "Ага, я же говорил, что у Странника руки кривые, а мозги деревянные, его код нифига не работает!". Просто напишите мне в личку и мы спокойно разберемся — что не работает и почему не работает.



Спасибо. Здоровья всем Вам, мои друзья и коллеги!
+1
Андрей Андрей 2 года назад #
Кирилл, очередная приятная фишка и опять в точку!
Скоро "единичка" полностью преобразится, благодаря твоим действиям :)

Подтверждаю, будет в релизе!
+1
Странник Странник 2 года назад #
Еще бы не будет, когда я эту разработку уже туда отправил!

Еще от автора

Адаптация компонента "Закладки" от 19 января 2011 к коробочной версии 1.10.7
На форуме появилась тема с пожеланиями адаптировать довольно старый компонент "Instant Bookmarks" Fuze к современным реалиям.
Утилита "Садовод" для версии InstantCMS 1.10.7.008
В этой краткой заметке описывается утилита "Садовод" для ремонта деревьев версии InstantCMS 1.10.7.008.
Изменение компонента "Баннеры" для будущей  версии 1.10.7.008
Данная статья рассказывает всем ждущим новую версию 008, что нового ожидается в будущем релизе версии 1.10.7.008.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.