Три новых фичи в админке (Обновлено)

Во-первых, хочу сообщить, что aceAdminPanel переходит в статус release candidate. Это значит, что новые фичи в текущую версию добавляться не будут. Еще несколько дней тестов и багфиксов, и финальный релиз пойдет в каталог.

Я знаю, что есть пара фич, которые были в прошлой версии, но не перешли пока в эту. Они будут реализованы в следующей версии.

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

Все-все временные файлы в одной папке


Если вас, как меня, периодически достает, что временные файлы движка раскиданы по разным папкам, то теперь вы можете их собрать все в одной папке. Для этого в корневой папке движка нужно создать папку _tmp, задать ей соответствующие права (чтоб движок мог там создавать папки и файлы), а в конфиге админки задать параметр:
config['tmp']['path']['use'] = false;

И в этой папке будут автоматически созданы подпапки:
log — для логов,
sys — для системного кеша и временного размещения загружаемых файлов,
smarty (с подпапками compiled и cache) – для размещения скомпилированных шаблонов и кеша Smarty.

И все! Теперь, если вам вдруг приспичит очищать кеш руками, вы можете просто взять и удалить все подпапки из папки _tmp.

ВАЖНО! В целях безопасности в папке _tmpобязательно нужно создать файл .htaccess с таким вот содержимым:
Order Deny,Allow
Deny from all

Или скопируйте этот файл из вашей нынешней папки log или tmp.

Собираем кофиг-файлы плагинов в кучку


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

Чтобы воспользоваться этой фичей, нужно в папке config создать подпапку plugins, в которой можно хранить файлы с настройками плагинов. Делать это можно аж тремя способами:

1) Вы можете настройки всех своих плагинов держать в одном файле /config/plugins/config.php:
$config['plugin']['myplugin'] = array(
    // тут параметры для плагина myplugin
);
$config['plugin']['otherplugin'] = array(
    // тут параметры для плагина otherplugin
);

2) Можно создать для каждого плагина отдельный файл и сложить их аккуратно в папке /config/plugins/ вот так:
/config/plugins/config.myplugin.php — это для плагина myplugin
/config/plugins/config.otherplugin.php — это для плагина otherplugin

3) Наконец, можно разложить конфиг-файлы плагинов по своим папкам:
/config/plugins/myplugin/config.php — это для плагина myplugin
/config/plugins/otherplugin/config.php — это для плагина otherplugin

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

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

И чтоб все это заработало, нужно сделать малую малость — в конфиг-файле админки задать:
$config['custom_config']['enable'] = true;

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

Дополнительные опции для Smarty


Добавил поддержку нескольких опций для Smarty, которые могут быть полезны как разработчикам, так и просто тем, у кого есть проекты на LS.

В конфиге админки можно задать следующие параметры:
$config['smarty']['options']['compile_check'] = true;    // включать ли проверку компиляции шаблонов
Если тут поставить значение false, то Smarty будет компилировать шаблон, только если его еще нет, если есть — использует его без лишних проверок. Рекомендуется использовать на рабочем сервере, если вы не производите на нем никаких изменений — это уменьшает время отдачи страницы

$config['smarty']['options']['force_compile'] = false;   // принудительная компиляция шаблонов
Полезная опция, когда идет активная разработка и работа над шаблонами. Заставляет Smarty принудительно компилировать все шаблоны. При необходимости можно указать, при обработке каких УРЛов нужно/не нужно перекомпилировать шаблоны. Примеры:
$config['smarty']['options']['force_compile'] = array(
    'on' => array('topic/*'), // принудительно компилировать все шаблоны только для экшена topic
);
$config['smarty']['options']['force_compile'] = array(
    'on' => array('*'), // компилировать для всех URL
    'off' => array('topic/edit/*'), // кроме начинающегося с 'topic/edit'
);

$config['smarty']['options']['caching'] = false;         // включать ли кеширование
Включает кеширование Smarty. После обработки шаблона страницы и формирования HTML-кода Smarty его кеширует на заданное время (см. ниже). Любые изменения (новые топики, комменты и т.д.) пользователи сайта будут видеть с задержкой, но для высоконагруженных проектов это может дать прирост производительности.

$config['smarty']['options']['cache_lifetime'] = 60;     // время жизни кеша (в сек)
Используется совместно с предыдущей опцией

А теперь анонс: в следующем топике я расскажу о реально крутой фиче, которую я реализовал — это возможность добавлять Smarty-код практически в любое место любого шаблона на этапе его компиляции!

21 комментарий

avatar
Спасибо, будем тестить :)
avatar
Очень интересно! Главное чтобы это было стабильно)
avatar
хорошо было бы конфиги всех плагинов изменять прямо в админке, как это во всех мне знакомых админках и происходит)
avatar
Хорошо бы. И более того, нечто подобное в планах есть, правда, в весьма примитивной форме. Чтобы сделать нормальный конфигуратор, нужно ряд непростых задач решить, как технических, так и ментальных :)
avatar
тоже об этом думал.
avatar
avadim , спасибо огромное за ваш труд!
Хоть и не пользую админку, но ваш вклад в развитие LS трудно переоценить.

По-возможности, расскажите, как можно управлять опциями Smarty из плагинов. Возможно, многим начинающим разработчикам это будет полезно узнать.
avatar
Спасибо за доброе слово :)

как можно управлять опциями Smarty из плагинов
На самом деле это не так уж и сложно, если понимать, что такое Smarty и «с чем его едят». Вот тут есть документация: www.smarty.net/docs/en/

Дело за малым — получить доступ непосредственно к объекту Smarty. А это делается просто — вызовом метода GetSmartyObject() модуля Viewer. А получив объект, можно уже вертеть им, как угодно. Например, так:
$oSmarty = $this->Viewer_GetSmartyObject();
$oSmarty = registerFilter('post', array($this, 'MyFunc'));
avatar
Понял, еще раз спасибо :-)
avatar
просто посмотрите код смарти — там много интересных переменных есть!
avatar
Ок, спасибо за наводку! Первый раз просто со Smarty сталкиваюсь :-)
avatar
В модуле Пользователи, есть значок плюсика. Сейчас он неактивный, но не подразумевает ли он будущую возможность добавления пользователей из админки? Или все, поезд ушел? :)
  • aex
  • 0
avatar
Ответ на оба вопроса: «да» :)

Т.е. в будущем подразумевает, но не в текущей версии
avatar
а вы не думали над такой фитчей: в админке раздел плагина и возможность активации/деактивации плагинов непосредственно из репозитория?
avatar
для этого нужна двухсторонняя связь репозитория (каталога) и админки. Т.е. без участия орта авадим не сделает такую штуку.
avatar
Совершенно верно, начинать тут нужно с этого самого репозитария
avatar
Было бы круто еще добавить следующие возможности:
1) Включить/выключить возможность переголосования за пост/комментарий/блог/пользователя и т.д.
2) Возможность правки формулы начисления рейтинга, к примеру чтобы можно было изменить на целые числа

ради таких фишек готов даже пожертвовать некую денежку =)
  • ska
  • 0
avatar
Я еще заметил, что можно создавать папки settings/config/ внутри шаблонов в плагинах. Можешь рассказать об этой функциональности? Для чего на полезна?
avatar
О, привет! Давно тебя не видел

По сабжу — это полезно для адаптации плагина под конкретный скин. Напр., совместно вот с этим: livestreet.ru/blog/13060.html
avatar
Спустя неделю вылезла вот такая ошибка
Fatal error: Uncaught exception 'Exception' with message 'Undefined method module: IsBannedByLogin' in /home/r/romanofg/mirpetel.ru/public_html/engine/classes/Engine.class.php:597 Stack trace: #0 /home/r/romanofg/mirpetel.ru/public_html/engine/classes/Engine.class.php(524): Engine->GetModule('IsBannedByLogin') #1 /home/r/romanofg/mirpetel.ru/public_html/engine/classes/Entity.class.php(173): Engine->_CallModule('IsBannedByLogin', Array) #2 /home/r/romanofg/mirpetel.ru/public_html/plugins/aceadminpanel/classes/hooks/HookAdmin.class.php(174): Entity->__call('IsBannedByLogin', Array) #3 /home/r/romanofg/mirpetel.ru/public_html/plugins/aceadminpanel/classes/hooks/HookAdmin.class.php(174): PluginSitemap_ModuleUser_EntityUser->IsBannedByLogin() #4 [internal function]: PluginAceadminpanel_HookAdmin->InitAction(Array) #5 /home/r/romanofg/mirpetel.ru/public_html/engine/modules/hook/Hook.class.php(292): call_user_func_array(Array, Array) #6 /home/r/romanofg/mirpetel.ru/public_html/engine/modules/hook/Hook.class.php(246): ModuleHook- in /home/r/romanofg/mirpetel.ru/public_html/engine/classes/Engine.class.php on line 597

И как бы ничего не правил, плагинов новых не добавлял. Сайту хана походу, как все воскресить?
avatar
Очистить прежде всего кэш сайта, не поможет, попробуй удалить каталог плагина aceAdminPanel.
avatar
aceAdminPanel v.2.0.376
не работает action html в супер хуках.

в /aceadminpanel/lib/DomFrag.class.php 408 строка, метод __call вызывается для несуществующих методов, и сам вызывает методы из массивов $aGroupMethods и $aSingleMethods.
в массиве $aSingleMethods есть элемент 'html', но в текущем классе и есть метод html!
поэтому для html корректно не срабатывает метод __call.

вобщем в 485 строке я закомментил public function html и у меня все заработало.
может костыльное решение, и я что-то этим сломал, но я уже не в состоянии искать дальше, сори :)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.