Установка плагинов через Web-морду (пока в большей степени идея)

Давны-давно, еще в пору 0.4 версии был у маленький заказ сделать плагин для установки плагинов через Web-интерфейс. Прекрасно понимаю что плагином это реализовывать было полным извращением, и что такой функционал должен быть в стандартном комплекте движка, но прихоти клиентов иногда проще выполнить чем переубедить.
В общем та наработка в виде плагина так и осталась на 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)

Собственно пока на этом все.

Если есть желание помочь развитию идеи/функционала, мыслями, кодом, деньгами ))) – прошу в комментарии (деньги в комментарии бросать не надо)

PS:: Подобным решение также можно организовать устаноку шаблонов

PS:: Если кто-то решит помочь допилить мою идею — пишите, вместе попробуем запилить на гитхаб. Так как сам я в ближайшее время буду очень ограничен и во времени и физически (в прямом смысле)

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

avatar
Что за денвере? Фиговина под виндой что ли?
avatar
avatar
мысль дельная. я тоже думал над этим вопросом.

считаю, что
1. этот функционал нужен в ядре
2. каталог плагинов должен отдавать информацию о плагинах в виде xml (например)
avatar
в идеале, когда-нибудь не скоро, каталог плагинов будет высвечиваться в админке каждого сайта, с возможностью напрямую купить, стянуть и поставить плагин.

мечты, мечты
avatar
)) одинаково мыслим )
avatar
подвиньтесь. я к вам :)
avatar
))
avatar
2. каталог плагинов должен отдавать информацию о плагинах в виде xml (например)
вот это немножко не понял, какой иименно каталог, локальный на сайте или livestreetcms.com/

и еще идейка пришла — вышеописаную реализацию можно допилить до установки плагинов напрямую из каталога и в том числе и платных например с проверкой в самом каталоге была ли покупка на текущий домен
avatar
официальный каталог => livestreetcms.com
avatar
или делать оплату прямо с админки своего сайта :)
avatar
+, тоже хорошая идея )
avatar
+сделать более удобный поиск по плагинам, а не то, что сейчас. сложно понять что для чего пока не прочитаешь описание. хотелось бы добавить теги для плагинов.
avatar
Поучаствую в разработке.
Предлагаю ort создать ветку github.com/livestreet/lsplugin-****
avatar
пока ветки нет, можно просто допиливать на локалке и добавлять в топик мануал
avatar
там что-то с встроенной админкой должно пилиться для LiveStreet. вот туда этот функционал и нужно встравивать
avatar
давно пора! =\
avatar
Может еще сразу подключить каталог с плагинами, чтобы можно было осуществить удобный! поиск, выбрать нужное и установить. На wordpress достаточно удобно по моему мнению сделано.
avatar
итак выше это уже обсуждают :)
avatar
как всегда пропустил))
avatar
Давно была такая мысль. И даже кое-какие наработки в этом плане есть. В свое время я остановился и не стал пока эту опцию добивать в своей админке просто по причине того, что кроме проработки логики нужно подумать и о безопасности, отложил на потом.

Да и логика тоже не очень простая будет, нужно предусмотреть все варианты проблем, которые могут возникнуть (не прошла активация плагина, возникли конфликты с другими плагинами, и проч.), и дать возможность отката.
avatar
вот я тоже все отлаживал на потом, а теперь решил опубликовать мысли. вместе ведь проще придумать логику, а проекту будет хороший плюс, уже не раз сталкивался с клиентаи которых не просто нужно учить (обьяснть)установку плагинов в LS, но и учить как закачать на ftp
avatar
да для нас же программистов будет облегчение.
avatar
Идея о создании некоего репозитария плагинов обсуждалась тут еще года полтора назад, если не ошибаюсь. Один из энтузиастов даже начинал его делать. Но как-то сдулась идея. Если есть интерес, то можно сделать ее «перезагрузку».
avatar
у меня есть интерес, готов поучавствовать
avatar
хотя… со временем туговато
avatar
На данный момент это и правда фарш. Тут нужно ort 'у думать по поводу реализации и предоставить нам api, а мы уже сделаем все остальное, либо он все сделает сам. Выложить исходники каталога на публику он наверно врятли решится, мало ли сколько желающих продавать свои плагины без комиссии.

Просто распаковка и активация плагина через веб морду не интересно. Нужна именно возможность скачать и установить плагин не уходя со своего сайта, нужна проработка всей системы, изучение того как это делает wordpress и движки с подобными страницами управления плагинами.
avatar
я считаю что возможность загрузки через веб морду тоже нужно вчлючать, например для того чтобы развернуть проект на локалке без подключения к интернету, заранее скачав нужные плагины
avatar
я поддерживаю тезис что во всем должна быть гибкость и в этой задумке тоже. Помогу всем чем смогу.
avatar
Нужна конечно!
Все таки надеюсь мы придем к какому то решению и перекинем разработку на гитхаб.

вот вам ссылки попробуйте, ничего сложного тут нет:
habrahabr.ru/blogs/Git/60347/
habrahabr.ru/blogs/Git/125999/
avatar
есть даже githowto.com/
комментарий был удален
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.