+0.04
Рейтинг
0.10
Сила

Максим

Livestreet: дао разработчика - 2

Первая часть цикла

Дао — это действие, процесс, поток. Чем чаще вы смотрите на код других плагинов, тем больше вы понимаете, как делать свой.
Накачайте плагинов под 0.4.2 и расматривайте, что у них внутри. Без этого вы не сможете начать писать свои плагины.

Я сделал типовой шаблон, из которого удобно делать свои собственные плагины. Располагается он тут:
http://github.com/medar/livestreetplugin
Чтобы скачать его, надо нажать в правом верхнем углу кнопку «Download Source». Желающие могут форкать и вносить изменения.

В файле находится «рыба» плагина с названием abcplugin.
Читать дальше →

Релиз LiveStreet 0.4.1

Вышел релиз LiveStreet 0.4.1, который содержит в основном фиксы багов относительно версии 0.4. Но есть и существенные изменения. Скачать здесь.

Список основных изменений:

  • Исправленный и доработанный плагин «Page», теперь страницы можно сортировать и выводить в главное меню
  • Новый шаблон «developer», теперь он более простой и легкий. Говорим спасибо deniart'у :)
  • Новая форма наименования классов в движке, подробнее
  • Поддержка наследования классов, подробнее
  • Шаблоны могут иметь свой собственный конфиг и языковые файлы (каталог шаблон/settings/[config|language])
  • Отказ от использования custom классов, теперь они не поддерживаются
  • Английская локализация
  • Фикс багов

Обновление с 0.4

  1. Обновить структуру БД, выполнив SQL из файла /install/convert_0.4_to_0.4.1.sql
  2. Удалить старые файлы и залить новые, либо вручную внести все изменения. Основную часть изменений составляет шаблон «developer», поэтому не пугайтесь большому листингу
  3. Обязательно сбросить кеш. Файловый — удалить содержимое каталога с кешем (кроме файла .htaccess), если стоит memcache, то перезапустить его

Обновление плагинов от 0.4

Плагины требуют адаптации (наименование классов) к версии 0.4.1, более подробно здесь.

Делегирование в плагинах

Решил не засорять топик с руководством по созданию плагинов, напишу тут, что нашел в процессе тестирования.

Итак, по порядку, что уже было:
1) (fixed) ошибка с определением названия экшена при делегировании: создал тикет
2) предложение об автоподстановке префиксов делегатов ( livestreet.ru/blog/dev_documentation/3710.html#comment59803, пункт 2 )
3) (fixed) отсутствие поддержки делегирования на основе данных из xml-файла (по-видимому, функция просто ещё в разработке)

И теперь ещё кое-какие мысли (пока все в файле /engine/classes/ActionPlugin.class.php).

— Сейчас, при делегировании экшена (например {plugin_dir}/classes/actions/ActionSettings.class.php) происходит автоматическое делегирование соответствующей директории темплейтов, что не очень хорошо, т.к. это совершенно необязательно по логике и придется тупо копировать всю папку actions/ActionSettings в плагин.
Сейчас там проверяется только наличие в плагине папки с соответствующим шаблоном:
$sTemplateName=in_array(Config::Get('view.skin'),array_map('basename',glob(Config::Get('path.root.server').'/plugins/'.$aMatches[1].'/templates/skin/*',GLOB_ONLYDIR)))
				? Config::Get('view.skin')
				: 'default';

хорошо бы проверять наличие папки с соответствующим экшеном:
$fGetTpl = create_function('$sPath','preg_match("/skin\/([\w]+)\/actions/i",$sPath,$aMatches); return $aMatches[1];');
$sTemplateName=in_array(Config::Get('view.skin'),array_map($fGetTpl,glob(Config::Get('path.root.server').'/plugins/'.$aMatches[1].'/templates/skin/*/actions/Action'.ucfirst($aMatches[2]),GLOB_ONLYDIR)))
				? Config::Get('view.skin')
				: 'default';


— В методе SetTemplateAction() код
$this->getTemplatePathPlugin().'/actions/Action'.ucfirst($aMatches[2]).'/'.$sTemplate.'.tpl'
в случае без делегирования вернет /actions/ActionSettings/profile.tpl, а надо actions/ActionSettings/profile.tpl, поэтому первый слэш переносим отсюда в getTemplatePathPlugin():
$sDir=Config::Get('path.root.server')."/plugins/{$aMatches[1]}/templates/skin/{$sTemplateName}/";


— Дублирование кода в GetTemplate() лучше заменить на
if (is_null($this->sActionTemplate)) {
    $this->SetTemplateAction($this->sCurrentEvent);
}


— В дополнение к первому:
Чаще всего нужно изменить не все шаблоны экшена, а только некоторые, зачем же копировать не измененные? Сделаем проверку, есть ли они в делегирующей папке, и, если нет, вернем стандартные:
protected function SetTemplateAction($sTemplate) {
if($sActionTemplate=preg_match('/^Plugin([\w]+)_Action([\w]+)$/i',$this->GetActionClass(),$aMatches)) {
      $sTplFile = 'actions/Action'.ucfirst($aMatches[2]).'/'.$sTemplate.'.tpl';
      $sActionTemplate = is_file($this->getTemplatePathPlugin().$sTplFile)
        ? $this->getTemplatePathPlugin().$sTplFile
        : $sTplFile;
    }
    $this->sActionTemplate = $sActionTemplate;
	}


Вот такие вот мысли.
Что скажете?

PS — также с нетерпением ждем описания функционала кастомных модулей.

Переделка модуля под версию 0.4

Доброго времени суток. Есть модуль под версию 0.3. Я переделал под 0.4 всё работает кроме одного: он не хочет аплоадить фотки в директорию.

Вопрос:

Что надо поменять в:
$sDirSave=DIR_UPLOADS_PHOTOS.'/'.func_generator(1).'/'.func_generator(1).'/'.func_generator(1).'/'.func_generator(1).'/'.func_generator(1);


если раньше в config.php писалось:
define('DIR_UPLOADS_PHOTOS',DIR_UPLOADS.'/photos');


а теперь:
$config['path']['uploads']['photos']  ='___path.uploads.root___/photos';


?

Рейтинг пользователей

Есть ли в движке механизм подсчета авторитетности пользователя (аналога кармы на Хабре)?
Если есть, то как он работает? Интересует алгоритм. Можно ли его менять под себя (если он есть) и где он находится (т.е. файл)?

Динамическая смена шаблона

Хотелось бы узнать: кто-ть пробовал динамически менять шаблон для сайта? Например днем один в светлых тонах показывается, а ночью — другой — в темных?

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

Замену файлов кроном прошу не предлагать — это грузит сервер и не везде реализуемо.

Video Mail.ru

Хак дает возможность вставлять видео с mail.ru в топик.

В поиске не нашел готового решения, публикую. Возможно кому то пригодится.

Открываем в редакторе:
classes\modules\sys_text\Text.class.php

Находим:
public function VideoParser($sText) {

ниже вставляем:

		/**
		 * mail.ru
		 */
		$sText = preg_replace('/<video>http:\/\/(?:www\.|)video\.mail\.ru\/([a-zA-Z0-9_\-]+)\/([a-zA-Z0-9_\-]+)\/([a-zA-Z0-9_\-]+)\/([a-zA-Z0-9_\-]+)\.html<\/video>/Ui', '<object width=626 height=367><param name="wmode" value="opaque"></param><param name="allowScriptAccess" value="always"></param><param name="movie" value="http://img.mail.ru/r/video2/player_v2.swf?par=http://content.video.mail.ru/$1/$2/$3/\$$4&id=$4"></param><embed src="http://img.mail.ru/r/video2/player_v2.swf?par=http://content.video.mail.ru/$1/$2/$3/\$$4&id=$4" type="application/x-shockwave-flash" width=626 height=367 allowScriptAccess="always"></embed></embed></object>', $sText);


Сохраняем.
Теперь при написании топиков в теге
<video>

можно вставлять видео с mail.ru, например:
<video>http://video.mail.ru/mail/gabdiev_g/_vblogs/19.html</video>

Блок "Похожие топики" для livestreet 0.31

Блок, похожие статьи

Доброго времени суток. Решил тут на своем сайте сделать блок — «Похожие статьи». Посмотрел поиском, но нашел только платный аналог. Поэтому сделал свой блок на основе тегов.
Читать дальше →

Руководство по созданию плагина для v.0.4 на примере "Лента друзей"

Предисловие

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

Примечание. Долго не публиковал этот материал, держал в черновиках — на случай «мало-ли-что-измениться». Но думаю, кардинальных изменений в механизме плагинов в ближайшем релизе уже не будет.

Пошаговая схема:

Читать дальше →