aceAdminPanel - багфикс, переход к автономной шаблонной жизни и несколько слов об интеграции
Выложил обещанный багфикс-релиз админки. У кого с последними версиями админпанели возникли проблемы (типа, «не найдет такой-то шаблон»), качаем пофиксенный релиз здесь: aceadminpanel.sourceforge.net/
Допускаю, что могут быть еще мелкие баги типа кривоватой местами верстки, но каких-то функциональных багов быть не должно.
А под катом несколько слов о нововведениях в админке последних версий.
1. Полностью автономные скины админки
Очевидно, что постепенно АдминПанель становится самостоятельным веб-приложением, живущим внутри другого приложения — сайта на базе LS. И я, наконец, сделал то, что давно уже напрашивалось — перевел админку полностью на свой самостоятельный скин. За основу взят стандартный скин new. И живет этот скин отдельно от всех скинов вашего сайта в папке админки. Теперь у создателей и дизайнеров сайтов на базе ЛС руки развязаны полностью — у рабочего сайта свой набор скинов, у админки — свой, и никак они не пересекаются. В принципе, в перспективе энтузиасты могут рисовать свои скины для админки.
2. Расширение меню админки
Кто-то уже знает, а кто-то и нет — в шаблоне админки есть хук «menu_admin». И с его помощью вы можете добавлять свои пункты в меню, которое выводится в админпанели. Т.е. вы можете в своем плагине добавить хук:
3. Настройка и администрирование своих плагинов внутри админпанели
Если вы пишете плагин, и, изнывая от человеколюбия, не хотите заставлять юзеров руками править конфиг-файлы, а желаете сделать настройку своего плагина через вменяемый интерфейс, то вы теперь можете пойти еще дальше – встроить модуль управления вашим плагином прямо в админпанель. Делается это так:
1) У плагина создается класс администрирования, рожденный от класса AceAdminPlugin (он определяется в админке). Сам класс этот может называться как угодно, самое главное, чтобы по его имени можно было однозначно определить расположение файла с классом.
2) В этом классе может быть определен всего лишь один метод Admin(), который, собственно, и вызывается для администрирования плагина. Могут быть также определены методы Init() и Done() (вызываемые, соответственно до и после метода Admin), но это не обязательно.
3) Для задания шаблона вывода есть метод SetTemplateAction(), по умолчанию используется шаблон actions/ActionAdmin/admin.tpl администрируемого плагина. Этот шаблон не должен содержать вывода шапки и футера, только само тело html-страницы.
4) Есть еще метод AddBlock(), который позволяет задать шаблон для вывода блока в правой части экрана.
5) Для сохранения конфигурации используется метод PluginConfigSave(), он сохраняет секцию конфига 'plugin.имя_плагина' во внешнем файле и потом автоматом подгружает ее, заменяя файл config.php плагина.
Итак, админка плагина написана. Теперь надо объявить, что она есть. Сейчас это можно сделать двумя способами:
1) Объявить описание админки в xml-файле плагина:
2) Объявить в классе плагина метод AdminPanel(), который возвращает информацию об админке (пока только класс, но в будущем можно и какие-то другие параметры отдавать, напр., шаблон по умолчанию):
В будущем планирую еще один вариант предусмотреть — задание админки плагина в каком-нибудь внешнем файле, полностью отделив сам плагин от модуля его администрирования. Смысл такой: дать возможность людям писать собственные админки для плагинов сторонних разработчиков. Напр, нравится мне какой-то плагин, но нет у него админки никакой (или есть, но совсем не «айс»). Я пишу свою админку для этого плагина, выкладываю все в нужную папку и она автоматом подхватывается.
В самой админпанели меню «Плагины» теперь живет отдельно. И у тех плагинов, у которых обнаружена своя админка, в колонке «Настрока» появляется «шестеренка», кликаешь по ней — и настраиваешь плагин.
В заключение
Все, описанное выше — это хоть и рабочий, но еще неокончательный механизм интеграции, поэтому предложения, пожелания и прочие соображения по его улучшению приветствуются.
UPD В версии 1.4.166 в автозагрузчике добавлена поддержка совместимости с Yii по мотивам топика livestreet.ru/blog/7609.html (thanx to 1d10t)
Допускаю, что могут быть еще мелкие баги типа кривоватой местами верстки, но каких-то функциональных багов быть не должно.
А под катом несколько слов о нововведениях в админке последних версий.
1. Полностью автономные скины админки
Очевидно, что постепенно АдминПанель становится самостоятельным веб-приложением, живущим внутри другого приложения — сайта на базе LS. И я, наконец, сделал то, что давно уже напрашивалось — перевел админку полностью на свой самостоятельный скин. За основу взят стандартный скин new. И живет этот скин отдельно от всех скинов вашего сайта в папке админки. Теперь у создателей и дизайнеров сайтов на базе ЛС руки развязаны полностью — у рабочего сайта свой набор скинов, у админки — свой, и никак они не пересекаются. В принципе, в перспективе энтузиасты могут рисовать свои скины для админки.
2. Расширение меню админки
Кто-то уже знает, а кто-то и нет — в шаблоне админки есть хук «menu_admin». И с его помощью вы можете добавлять свои пункты в меню, которое выводится в админпанели. Т.е. вы можете в своем плагине добавить хук:
$this->AddHook('template_menu_admin', 'AddAdminMenu');
И в методе AddAdminMenu() добавить вывод в меню дополнительных пунктов. Мне кажется, тут более-менее ясно, но если нужно, могу расписать этот момент более подробно.3. Настройка и администрирование своих плагинов внутри админпанели
Если вы пишете плагин, и, изнывая от человеколюбия, не хотите заставлять юзеров руками править конфиг-файлы, а желаете сделать настройку своего плагина через вменяемый интерфейс, то вы теперь можете пойти еще дальше – встроить модуль управления вашим плагином прямо в админпанель. Делается это так:
1) У плагина создается класс администрирования, рожденный от класса AceAdminPlugin (он определяется в админке). Сам класс этот может называться как угодно, самое главное, чтобы по его имени можно было однозначно определить расположение файла с классом.
2) В этом классе может быть определен всего лишь один метод Admin(), который, собственно, и вызывается для администрирования плагина. Могут быть также определены методы Init() и Done() (вызываемые, соответственно до и после метода Admin), но это не обязательно.
3) Для задания шаблона вывода есть метод SetTemplateAction(), по умолчанию используется шаблон actions/ActionAdmin/admin.tpl администрируемого плагина. Этот шаблон не должен содержать вывода шапки и футера, только само тело html-страницы.
4) Есть еще метод AddBlock(), который позволяет задать шаблон для вывода блока в правой части экрана.
5) Для сохранения конфигурации используется метод PluginConfigSave(), он сохраняет секцию конфига 'plugin.имя_плагина' во внешнем файле и потом автоматом подгружает ее, заменяя файл config.php плагина.
Итак, админка плагина написана. Теперь надо объявить, что она есть. Сейчас это можно сделать двумя способами:
1) Объявить описание админки в xml-файле плагина:
<adminpanel>
<class>PluginAceCheckBrowser_ActionAdmin</class>
</adminpanel>
2) Объявить в классе плагина метод AdminPanel(), который возвращает информацию об админке (пока только класс, но в будущем можно и какие-то другие параметры отдавать, напр., шаблон по умолчанию):
public function AdminPanel() {
return array(
'class' => 'PluginAceCheckBrowser_ActionAdmin',
);
}
В будущем планирую еще один вариант предусмотреть — задание админки плагина в каком-нибудь внешнем файле, полностью отделив сам плагин от модуля его администрирования. Смысл такой: дать возможность людям писать собственные админки для плагинов сторонних разработчиков. Напр, нравится мне какой-то плагин, но нет у него админки никакой (или есть, но совсем не «айс»). Я пишу свою админку для этого плагина, выкладываю все в нужную папку и она автоматом подхватывается.
В самой админпанели меню «Плагины» теперь живет отдельно. И у тех плагинов, у которых обнаружена своя админка, в колонке «Настрока» появляется «шестеренка», кликаешь по ней — и настраиваешь плагин.
В заключение
Все, описанное выше — это хоть и рабочий, но еще неокончательный механизм интеграции, поэтому предложения, пожелания и прочие соображения по его улучшению приветствуются.
UPD В версии 1.4.166 в автозагрузчике добавлена поддержка совместимости с Yii по мотивам топика livestreet.ru/blog/7609.html (thanx to 1d10t)
80 комментариев
>И в методе AddAdminMenu() добавить вывод в меню дополнительных пунктов.
Интересно посмотреть на примере.
В main_menu.tpl должен быть html код элемента меню.
Примера, который дал Shatter достаточно?
Собсно из-за непопадания на админ страницу бан и не происходит я так понимаю… И правильно понимаю): Ставлю вместо {$sPageRef} какуюто страницу из админки и все работает) Советую поставить екшн примерно такой Таким образом админ сразу увидет результат, + результат то будет. Таким же образом поменять нужно екшн во всех формах, например для розбана, удаления пользователя.
Если кому то нитересен пример вставки линка на админ профиль с обычного, то он простой (мало ли): то лезем в файл /templatesskin/yourskin/new/actions/ActionProfile/whois.tpl и после вставляем
так как хука в етом месте нет(
Кто зашол, куда зашол, каго нашол?
Я сейчас у себя зашел в админку в список юзеров, потом в админский профайл юзера, там его забанил. Все — юзер забанен, его автоматом разлогинило, и залогиниться он не может.
В чем проблема-то?
Админка — это не только полезная штука, но еще и опасная: через нее можно не только много информации увидеть, нежелательной для посторонних глаз, но и совершить множество неоткатываемых действий, включая удаление всего и вся. Поэтому я постарался предусмотреть всяческий контроль в разных местах. Т.е. то, что ты описываешь — это не баг, а фича. Да, забанить юзера можно, зайдя в админский профайл только через саму админку, и даже обязательно из соответствующего ивента.
Но вообще о чем спор? О том, что слишком жесткая защита в админке? Так это хорошо — безопасность превыше всего. Если кто-то посоветует, как еще больше повысить безопасность — обязательно прислушаюсь.
Или разговор о том, что для бана юзера нужно пару лишних кликов сделать? Если б это была операция, которую приходится делать очень часто и очень многим, то я, возможно, и озадачился бы, как сократить число телодвижений юзера, постаравшись не нанести ущерба для безопасности. Но в данном случае — это не та ситуация.
Не подумайте что мне не нравится подход «безопасность превыше всего». Даже очень… Просто не нужно превращать ето в параною…
Здесь нет единого правильного решения, свое мнение я выразил. Спасибо за уделенное время и за админку)
сайт.ру/админ
Скоро он доберется до установки плагинов :)
Файл readme.txt
и вопрос с аватарами остался открытым
А вот с аватарами так и не понял
— если зайти в пользователя в админке то у меня вот такая картина http://src.syscentr.ru/dost/no_avatar.jpg
ВНИМАНИЕ! Админпанель доступна по адресу http://<ваш_сайт>/admin/ и только в том случае, если вы вошли на сайт под логином администратора!
В последющих версиях обязательно добавлю
как исправить?
Переименовал папку aceblockmanager в плугинах на другую, сайт открылся и актвировал плаг админки
Fatal error: Uncaught exception 'Exception' with message 'Can not find the block`s template: /block.admin_info.tpl' in /..../engine/modules/viewer/Viewer.class.php:541 Stack trace: #0 /..../engine/modules/viewer/Viewer.class.php(463): ModuleViewer->DefineTypeBlock('/block.admin_in...', NULL) #1 /..../engine/modules/viewer/Viewer.class.php(497): ModuleViewer->AddBlock('right', '/block.admin_in...') #2 [internal function]: ModuleViewer->AddBlocks('right', Array) #3 /var/www/admin/data/www/ptzonline.ru/engine/classes/Engine.class.php(481): call_user_func_array(Array, Array) #4 /..../plugins/aceadminpanel/classes/actions/ActionAdmin.class.php(2071): Engine->_CallModule('Viewer_AddBlock...', Array) #5 [internal function]: PluginAceadminpanel_ActionAdmin->__call('Viewer_AddBlock...', Array) #6 /..../plugins/aceadminpanel/classes/actions/ActionAdmin.class.php(1972): PluginAcea in /..../engine/modules/viewer/Viewer.class.php on line 541
Откатился на 1.4.176:(
/***
* Скин админпанели
*/
//$config['skin'] = 'default';
$config['skin'] = 'social';
Соответственно надо закомментировать строку с social и раскомментировать строку с default.
… заменен с адреса к корневому каталогу
?
/***
* Скин админпанели
*/
//$config['skin'] = 'default';
$config['skin'] = 'social';
Закомментировать строку с social и раскомментировать строку с default. Или оставить только строку (без слешей)
$config['skin'] = 'default';
Закомментил строчку и все заработало. Спасибо за совет.
Но все же хотелось бы поправить изначальную причину ошибки…
Выдает такую ошибку когда включен плагин Main Url, что делать неподскажите?
2) Отключить админку и проверить работоспособность плагина Main Url без админки
2. Отключаю модуль — админка работае, со старой админкой 1.4.141 тоже все ок.
При активации админки появляется тот самый еррор что я выше описал.
Пользователей наоборот надо принуждать переходить на 0.5-jquery иначе они просто начнут садиться на шею и говорить «а зачем нам переходить на jquery когда для моотоолс столько плагинов?»
Хотя я считаю тут отчасти вина разработчиков, что оставили поддержку моотоолс до следующей версии.
Только лишний геморрой создателям плагинов и пользователям дали. Теперь будет народ дёргаться.
Ждем обновленных версий. Очень жду aceBlogExtender, а то ждал новую версию двига, что бы потом купить обновленный.
avadim, спасибо вам за ваши плагины.
Пытаюсь написать свой плагин под ls 0.5.1 и aceAdminPanel v.1.5.206.
С собственными, привязанными к aceAdminPane настройками в админке. К сожалению, не нашел среди бесплатных плагинов ни одного рабочего примера для упомянутых версий. Все, что есть — это acecheckbrowser, написанный под ls 0.4.+
Собственно, проблемка такая. Удалось инициализировать плагин и получить в админке в списке плагинов в строке настройки «колесико». Там у меня простейшая форма с одним чекбоксом и кнопкой сохранения. Код для ActionAdminClass.php:
public function Init(){}
public function Admin()
{
if (isPost('submit_data_save')) {
$this->Save();
}
$this->AddBlock('admin_info');
$this->Viewer_Assign('aModGonfig', Config::Get('plugin.yyy'));
}
В результате настройки сохраняются в файлик tmp/adm.yyy.cfg
Проблемка — по каким-то причинам мессадж «данные сохранены» появляются только после второго и последующих кликов по кнопке «сохранить». Если после первого клика выйти из админки — то мессадж чудесным образом появляется рядом с текстом прощания с юзером. (Как он туда пролез — ума не приложу) У меня предположение, что в первый раз сообщение куда-то ныкается, и каждый след. раз показывается предыдущее сообщение. В чем может быть дело? Я внутри файлов вывода мессаджа (в файликах самой aceadminpanel) отключал проверку сессий, и проблема исезала. Но править aceadminpanel — не выход.
Я не хорош в ООП программинге, поэтому сорри если что не так сказал- учусь на этом проекте.