Установка плагинов через Web-морду (пока в большей степени идея)
Давны-давно, еще в пору 0.4 версии был у маленький заказ сделать плагин для установки плагинов через Web-интерфейс. Прекрасно понимаю что плагином это реализовывать было полным извращением, и что такой функционал должен быть в стандартном комплекте движка, но прихоти клиентов иногда проще выполнить чем переубедить.
В общем та наработка в виде плагина так и осталась на 0.4 версии и в каталог не пошла лиш по причине незаконченности, так как я ее видел, а именно добавить управления конфигами плагинов, так же из web-морды.
Я понимаю что все это удобнее пульнуть на гитхаб, но сори… пробовал им пользоваться – не получилось, бросил пытаться. Да и не все готово. Да и по некоторым обстоятельствам пока не могу почти ни чем заниматься, а когда смогу — нужно будет подчищать накопившиеся хвосты.
Для начала нужно добавить текстовки в языковой файл. Добавляем в \templates\language\russian.php добавляем следуюшие текстовки
Добавляем шаблон блока в сайдбар, создаем файл \templates\skin\new-jquery\block.install.tpl со следующим содержимым
Добавляем файл класса \classes\blocks\BlockInstall.class.php с содержимым
Ну и в конфиг добавить описание блока
В экшене \classes\actions\ActionAdmin.class.php обработчику вызова списка плагинов EventPlugins добавим обработку пост запроса, после строки
По большому счету на этом можно былобы закончить, но позволю себе добавить немного удобства.
Открываем \templates\skin\new-jquery\actions\ActionAdmin\plugins.tpl и перед строкой
Наработку настройки конфигов плагинов пока описывать не буду, так как там совсем сыро, если есть идеи, с удовольствием выслушаю.
Теперь о минусах (хотя и не очень больших), да и напомню – это больше идея нового функционала сразу с рабочим примером, чем готовое решение.
Если есть желание помочь развитию идеи/функционала, мыслями, кодом, деньгами ))) – прошу в комментарии (деньги в комментарии бросать не надо)
В общем та наработка в виде плагина так и осталась на 0.4 версии и в каталог не пошла лиш по причине незаконченности, так как я ее видел, а именно добавить управления конфигами плагинов, так же из web-морды.
Я понимаю что все это удобнее пульнуть на гитхаб, но сори… пробовал им пользоваться – не получилось, бросил пытаться. Да и не все готово. Да и по некоторым обстоятельствам пока не могу почти ни чем заниматься, а когда смогу — нужно будет подчищать накопившиеся хвосты.
Итак, хватит оступлений, что готово (переведено на 05):
- вывод формы загрузки плагина (блок в сайдбаре на странице плагинов);
- загрузка плагина (только) zip архивом ;
- распаковка файла на сервере;
- и немного наработок по редактированию конфига (по сути только вывод окна для редактирования, сам механизм еще не реализован).
Важно:: Для начала отключить ace-админку
Итак код — где, что, как.
Весь пример приводится на шаблоне new-jquery.Для начала нужно добавить текстовки в языковой файл. Добавляем в \templates\language\russian.php добавляем следуюшие текстовки
'plugin_upload_title' => 'Загрузка плагина',
'plugin_upload' => 'загрузить',
'plugin_coffig_edit' => 'Редактрование конфига',
(в энглиш добавляем самостоятельно если нужно ))Добавляем шаблон блока в сайдбар, создаем файл \templates\skin\new-jquery\block.install.tpl со следующим содержимым
<div class="block">
<h2>{$aLang.plugin_upload_title}</h2>
<div class="content">
<form action="" id="install_block" method="post" enctype="multipart/form-data">
<input type="file" name="fileData" id="fileData" />
<div style="text-align: center"><br />
<input type="submit" name="send_install" id="send_install" class="button" value="{$aLang.plugin_upload}" />
</div>
</form>
</div>
</div>
Добавляем файл класса \classes\blocks\BlockInstall.class.php с содержимым
<?php
class BlockInstall extends Block {
public function Exec() {
}
}
?>
Ну и в конфиг добавить описание блока
$config['block']['rule_admin_plugins'] = array(
'action' => array('admin' => array('plugins')),
'blocks' => array( 'right' => array('install') ),
);
В экшене \classes\actions\ActionAdmin.class.php обработчику вызова списка плагинов EventPlugins добавим обработку пост запроса, после строки
protected function EventPlugins() {
добавляемif(isPost('send_install')){
if (!empty($_FILES)){
$zip = new ZipArchive;
if ($zip->open($_FILES['fileData']['tmp_name']) === true){
$filenames = array();
for($i=0; $i<$zip->numFiles; $i++){
$filenames[] = $zip->getNameIndex($i);
}
$zip->extractTo(Config::Get('path.root.server').'/plugins');
$sCode = trim($filenames[0],'/');
Router::Location(Router::GetPath('admin').'plugins/#'.$sCode);
}
}
}
По большому счету на этом можно былобы закончить, но позволю себе добавить немного удобства.
Открываем \templates\skin\new-jquery\actions\ActionAdmin\plugins.tpl и перед строкой
<h3>{$aPlugin.property->name->data|escape:'html'}</h3>
добавляем <a name="{$aPlugin.code}"></a>
после загрузки плагина страница будет автоматически прокручиваться к нему.Наработку настройки конфигов плагинов пока описывать не буду, так как там совсем сыро, если есть идеи, с удовольствием выслушаю.
Теперь о минусах (хотя и не очень больших), да и напомню – это больше идея нового функционала сразу с рабочим примером, чем готовое решение.
- данный вариант поддерживает только загрузку zip архивов, другие просто не распакует ;
- содержимое загружаемого архива должно быть определенной структуры;
- возможно понадобится подключение дополнительных библиотек (на денвере это php_zip.dll – в php.ini -> extension=php_zip.dll)
Собственно пока на этом все.
Если есть желание помочь развитию идеи/функционала, мыслями, кодом, деньгами ))) – прошу в комментарии (деньги в комментарии бросать не надо)
31 комментарий
считаю, что
1. этот функционал нужен в ядре
2. каталог плагинов должен отдавать информацию о плагинах в виде xml (например)
мечты, мечты
и еще идейка пришла — вышеописаную реализацию можно допилить до установки плагинов напрямую из каталога и в том числе и платных например с проверкой в самом каталоге была ли покупка на текущий домен
Предлагаю ort создать ветку github.com/livestreet/lsplugin-****
Да и логика тоже не очень простая будет, нужно предусмотреть все варианты проблем, которые могут возникнуть (не прошла активация плагина, возникли конфликты с другими плагинами, и проч.), и дать возможность отката.
Просто распаковка и активация плагина через веб морду не интересно. Нужна именно возможность скачать и установить плагин не уходя со своего сайта, нужна проработка всей системы, изучение того как это делает wordpress и движки с подобными страницами управления плагинами.
Все таки надеюсь мы придем к какому то решению и перекинем разработку на гитхаб.
вот вам ссылки попробуйте, ничего сложного тут нет:
habrahabr.ru/blogs/Git/60347/
habrahabr.ru/blogs/Git/125999/