+68.62
425 читателей, 63 топика

Использование LiveStreet как фреймворка

LiveStreet — это не просто хабра-подобный движок. И даже не столько движок для
создания сообществ, сколько замечательный фреймворк, который подходит для создания самых разнообразных сайтов.
Получается, что от хостинга требуется только php, т.к. для простого сайта-визитки работать с БД совсем необязательно!
Разумеется сайт из пары страниц можно оставить на простом html, но этим постом я хочу показать, что LS можно использовать для создания сайтов абсолютно любого типа.
В общем, кому стало интересно — прошу под кат.
Читать дальше →

Обновление модулей кеширования и логирования

В разрабатываемой версии мы переработали модули Cache и Logger — код стал проще, меньше и более функционален.

Модуль кеширования (Cache)
Реализован новый принцип работы с разными бекендами, теперь каждый бекенд представляет из себя отдельную сущность (наследуется от ModuleCache_EntityBackend). Такой подход позволяет легко добавлять новые типы бекендов — достаточно создать сущность с нужным типом кеша, например, вот так выглядит XCache:
/**
 * Бекенд xcache
 */
class ModuleCache_EntityBackendXcache extends ModuleCache_EntityBackend {
	/**
	 * Проверяет доступность использования текущего бекенда
	 *
	 * @return mixed
	 */
	public function IsAvailable() {
		if (extension_loaded('xcache')) {
			return true;
		}
		return 'The xcache extension must be loaded for using this backend!';
	}
	/**
	 * Проверяет доступность использование мульти-get запросов к кешу (указывать сразу несколько ключей)
	 *
	 * @return mixed
	 */
	public function IsAllowMultiGet() {
		return true;
	}
	/**
	 * Инициализация бекенда
	 *
	 * @param array $aParams
	 *
	 * @return mixed
	 */
	public function Init($aParams=array()) {
		require_once(LS_DKCACHE_PATH.'Cache/Backend/TagEmuWrapper.php');
		require_once(LS_DKCACHE_PATH.'Zend/Cache/Backend/Xcache.php');
		$aConfig=Config::Get('xcache');

		$oCahe = new Zend_Cache_Backend_Xcache(is_array($aConfig) ? $aConfig : array());
		if (isset($aParams['stats_callback'])) {
			$this->oCacheBackend=new Dklab_Cache_Backend_TagEmuWrapper(new Dklab_Cache_Backend_Profiler($oCahe,$aParams['stats_callback']));
		} else {
			$this->oCacheBackend=new Dklab_Cache_Backend_TagEmuWrapper($oCahe);
		}
	}
	/**
	 * Получить значение из кеша
	 *
	 * @param string $sName	Имя ключа
	 * @return mixed|bool
	 */
	public function Get($sName) {
		return $this->oCacheBackend->load($sName);
	}
	/**
	 * Записать значение в кеш
	 *
	 * @param  mixed  $mData	Данные для хранения в кеше
	 * @param  string $sName	Имя ключа
	 * @param  array  $aTags	Список тегов, для возможности удалять сразу несколько кешей по тегу
	 * @param  int|bool    $iTimeLife	Время жизни кеша в секундах
	 * @return bool
	 */
	public function Set($mData,$sName,$aTags=array(),$iTimeLife=false) {
		return $this->oCacheBackend->save($mData,$sName,$aTags,$iTimeLife);
	}
	/**
	 * Удаляет значение из кеша по ключу(имени)
	 *
	 * @param string $sName	Имя ключа
	 * @return bool
	 */
	public function Delete($sName) {
		return $this->oCacheBackend->remove($sName);
	}
	/**
	 * Чистит кеши
	 *
	 * @param string $cMode	Режим очистки кеша
	 * @param array $aTags	Список тегов, актуально для режима Zend_Cache::CLEANING_MODE_MATCHING_TAG
	 * @return bool
	 */
	public function Clean($cMode=Zend_Cache::CLEANING_MODE_ALL,$aTags=array()) {
		return $this->oCacheBackend->clean($cMode,$aTags);
	}
}

На данный момент в стандартном комплекте идет поддержка File, XCache и Memcached. Также добавлены дополнительные бекенды — FileOrm и Life. FileOrm служит для отдельного файлового кеширования схем таблиц в БД, автоматически применяется в функционале ORM. Life — это сохранение данных на время выполнения скрипта, т.е. аналог паттерна Registry. Применяется он в методах GetLife и SetLife.

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

Помечаем куски шаблонов в скомпилированой странице for 0.5.1

Навеяно топиком, хотя сам использую для верстки практически с момента выхода 05 версии, както не подумал что это может быть полезно и другим ;) исправляюсь )

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

Прикручиваем 3 Smarty к LS. Продолжение.

Оригинальная статья, которая подтолкнула меня к этому топику: Прикручиваем 3 Smarty к LS

Так как не только у меня возникли проблемы даже после проделывания всех инструкций, я решил исследовать проблему. И похоже у меня получилось решить ее. Так как комментарий получился бы большой, то я решил вынести это в отдельный топик.

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

Ставим хук внутри шаблона.

Появилась возможность устанавливать хуки прямо внутри шаблона — trac.lsdev.ru/livestreet/changeset/848
Делается это за счет плагина к Smarty hook, например:
{hook run='body_begin'}
вызовет хуки повешенные на событие 'template_body_begin'(обратите внимание, что приставка template_ добавляется автоматически, если хук вызван из шаблона), а их результат в виде строки вернется в шаблон.

Предлагаю определиться какие нужны стандартные хуки? Сейчас добавлено только два: body_begin и body_end, соответственно вызываются в начале HTML тега BODY и в конце.

Переопределение методов модулей с помощью ...Hook'ов!

В LiveStreet 0.4 появилась возможность переопределять не только целиком модули, но и отдельные методы. Это позволить разным плагинам бесконфликтно переопределять разные методы одного модуля.

Принцип действия этого механизма основан на Hook'ах:
  1. Вызов каждого метода сопровождается выполнением хуков — module_ModuleName_MethodName_before и module_ModuleName_MethodName_after, соответственно ДО и ПОСЛЕ вызова метода модуля. В первом случаи в хук передаются параметры вызова метода, во втором передается результат выполнения метода модуля.
  2. На module_ModuleName_MethodName_before можно повесить специальный хук — delegate, результат выполнения которого и будет «результатом» выполнения метода модуля

Пример:
<?php 
class HookTest extends Hook {
	public function RegisterHook() {
		$this->AddDelegateHook('module_text_parser_before','testHook',__CLASS__,-3);
	}

	public function testHook($aVars) {
		return 'Topic text > '.$aVars[0];
	}
}
?>

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

Стандарты написания кода экосистемы LiveStreet

Предлагаю вниманию сообщества и, в первую очередь, разработчиков первую версию стандартов по написанию кода для LiveStreet окружения:

  • github.com/psnet/ls-coding-standarts — этот документ регламентирует стандарт написания кода для экосистемы LiveStreet.

Также для тех, кто пишет плагины, будет удобной инструкция по подготовке плагина к выпуску и публикации в каталоге дополнений LiveStreet:


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

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

кросс пост из гида.

Настраиваем сервер для LiveStreet. Часть VI. PHP.

Предыдущие части:

Итак, лезем упоминавшийся в третей части конфигурационный файл /etс/apt/sources.list:
vim /etс/apt/sources.list

и раcкомментируем там dotdeb.org (две последние строки). После чего обновляемся:
apt-get update

Устанавливаем php, и всё что с ним связано следующими командами:
apt-get install php5-cli php5-common php5-suhosin php5-mcrypt php5-mysql php5-gd php5-dev php-pear php5-curl php5-memcache

apt-get install php5-fpm

После чего опять комментируем dotdeb.org в /etс/apt/sources.list и опять обновляемся:
apt-get update


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

ORM и ActiveRecord в 0.5 и выше

Выход версии 0.5 для меня было нечто большим, чем добавление страницы активности и ленты топиков из подписанных блогов. В новой версии реализованы ORM и ActiveRecord. Вместе они дают мощнейший инструментарий для разработчика, избавляя того от кучи однотипного кода, который приходилось писать каждый раз при разработке плагина. Тот-же форум, о котором будет идти речь в статье, после обновления похудел на 2177 строк кода. В этой статье я хочу углубиться в ORM и AR на примере создания плагина для LiveStreet.

Читаем дальше...

Механизм хуков в движке

В продолжении топиков LiveStreet как платформа для модулей и Тест хуков в движке появилась поддержка хуков.

Использовать можно так:
1. В любом месте(модуле, экшене) установить вызов необходимого хука на метод модуля
$this->Hook_AddExecModule('topic_show','Test_MyHookRun',10);
регистрирует на событие topic_show вызов метода MyHookRun у модуля Test с приоритетом 10.
2. В любом месте установить вызов хука на функцию
$this->Hook_AddExecFunction('topic_show','var_dump',-5);
регистрирует вызов функции var_dump
3. Создать класс хука в каталоге /classes/hooks/ с именем файла HookTest.class.php с содержанием
<? 
class HookTest extends Hook {	
	public function RegisterHook() {
		$this->AddHook('topic_show','testHookFunct',__CLASS__,-3);
	}
	
	public function testHookFunct($aVars) {
		var_dump("Hook it!");
	}
}
?>

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