+0.47
Рейтинг
0.11
Сила

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

В разрабатываемой версии мы переработали модули 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.

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

Оптимизация шаблонов

Пролог


Наброски по данной статье лежали ещё с конца зимы и все никак не было времени на её написание, поэтому решил опубликовать её почти «как есть» т.е. с сухими выжимками фактов, без расписанных деталей. Это поможет остальным членам сообщества совершенствовать свои шаблоны.

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

LiveStreet ScreenCast #1 - Введение

Представляю первый скринкаст для разработчиков по основам LiveStreet.
Первый выпуск содержит вводную часть по общей концепции фреймворка LS. Нацелен в первую очередь на начинающих разработчиков, которые только знакомятся с LS.

Это так сказать первый блин комом, строго не судите :) Принимаем вопросы и пожелания как по текущему скринкасты так и на следующие выпуски. Просмотр рекомендуется в HD качестве.

Создание плагина. От идеи до публикации. Часть 1.

Плагин, создание которого я опишу уже в каталоге и ссылка на него будет в самоом конце.
Идея плагина заключается в следующем: предоставить пользователю возможность добавлять в топик карусель, предоставляемую фреймворком Twitter Bootstrap. Добавление карусели будет осуществляться через встроенный редактор, для карусели будут доступны как изображения из сети, так и загруженные с компьютера пользователя.

Приступим
В начале создадим в папке plugins папку для нашего плагина с именем carousel и в нем файл plugin.xml c описанием создаваемого плагина (см. картинку ниже).


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

Как я подружил NiceURL и RusUrls

У меня выдавало ошибку «страница не найдена», если переходить на топик, созданный юзером с русским ником.

Заменил строчку в файле config.php плагина NiceURL

с

'%blog%' => '([\da-z\_\-]+)',


на

'%blog%' => '([\S_\-]+)',


И все работает :)

Проблемка от Ютуба - Новый вид вставки кода видео

Теперь Ютуб вставляет видео через ифрейм, вот таким способом
<iframe title="YouTube video player" width="640" height="390" src="http://www.youtube.com/embed/R2ZxBf6kfi4" frameborder="0" allowfullscreen></iframe>

Конечно можно вставить и старым способом. но пользователь до этого не догонит.
www.youtube.com/watch?v=R2ZxBf6kfi4&feature=feedf

Время "запоминания" пользователя

Предлагаю способ как можно изменить время, на которое запоминается авторизация пользователя.
Версия: LiveStreet 0.4.2

1. Запишем в конфиг необходимое время авторизации.
Открываем config/config.php
На 54 строке находим:
$config['sys']['cookie']['path'] = '/';  // путь для установки куков

После неё вставляем строку:
$config['sys']['cookie']['time'] = 60*60*24*3; // время установки куков (в секундах)

Где вместо 3 можете написать нужное количество дней.

2. Исправим функцию авторизации пользователя.
Открываем classes/modules/user/User.class.php
На 441 строке находим:
setcookie('key',$sKey,time()+60*60*24*3,Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'));

Меняем на:
setcookie('key',$sKey,time()+Config::Get('sys.cookie.time'),Config::Get('sys.cookie.path'),Config::Get('sys.cookie.host'));


Всё готово.

Быстрая интеграция поиска от Google в ваш сайт.

Задача довольно простая, но на всякий случай изложу готовое решение, на тот случай если кто-то сходу не разберется.

Интеграция гугло-поиска может пригодится если Sphinx вы установить не в силах (к примеру виртуальный хостинг, как это в моем случае), а плагин aceMySearch вам по каким-то причинам не подходит (не хотите получить дополнительную нагрузку на сайт или просто хотите немного заработать на AdSense :)

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

Как пользователя Контакта превратить в вашего.


Думаю эта информация будет полезна авторам сайтов у которых нет команды (стартового ядра )для начального наполнения сайта или средств для найма вменяемых «постеров».

И так, у вас есть готовый проект, но нет людей кроме вас кто готов туда писать или как минимум комментировать, то что пишите вы… денег на рекламу тоже нет… в поисковиках вас нет… и никто о вас не знает…

Скажем спасибо Контакту, за то что он собрал много людей и разделил их на целевые группы (что нам и надо).
Читать дальше →