Плагин «Конструктор каталогов со свойствами и магазин (Simple Catalog)», версия 5.0.0


Вышла новая, пятая версия плагина для создания каталогов, типов контентов и других разделов на сайте (в т.ч. магазина). В новой версии силы были нацелены на улучшение юзабилити, повышенное внимание к деталям, ещё более глубокого улучшения совместимости с шаблонами, исправление мелких недочетов и багов и большую дружелюбность к пользователю.

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

Полный список изменений и новшеств — около 180, но некоторые могут показаться скучными конечному пользователю, поэтому я опишу только некоторые интересные, а полный список — в history.txt.

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

Универсальные категории

В новой версии LS появится функционал универсальных категорий.
Плагины смогут привязывать древовидные категории к любым объектам (полная интеграция с ORM), управления такими категориями доступно из админки. Из коробки категории будут работать для блогов (как сейчас на сайте livestreet.ru).



Интеграция в плагинах
Интеграция функционала категорий основана на механизме поведений. Поэтому для начала необходимо в класс объекта (сущность, к которой привязываем категории) и класс модуля добавить описание поведений.
Для сущности:
	protected $aBehaviors=array(
		// Настройка категорий
		'category'=>array(
			'class'=>'ModuleCategory_BehaviorEntity',
			'target_type'=>'article',
			'form_field'=>'category',
			'multiple'=>true,
		),
	);

Для модуля:
	protected $aBehaviors=array(
		// Настройка категорий
		'category'=> array(
			'class'=>'ModuleCategory_BehaviorModule',
			'target_type'=>'article',
		),
	);


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

INKA - новый шаблон для LiveStreet CMS

Inka

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

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

Новый функционал фреймворка - поведения (behavior)

В новой версии LS 2.0 появится функционал поведений (behaviors), который очень поход на подобный в Yii.
Суть сводится к тому, что теперь определенному типу объектов (пользователи, топики, блоги и т.п.) или конкретному объекту можно назначить через поведения определенный новый функционал.
Добавить новое поведение в объект достаточно просто, можно у объекта определить свойство $aBehaviors. Например:
	protected $aBehaviors=array(
		'category'=>'ModuleCategory_BehaviorCategory',
		'property'=>array(
			'class'=>'ModuleProperty_BehaviorPropertyEntity',
	        	'target_type'=>'article'
		)
	);

В этом примере добавляются два поведения — категории и дополнительные поля. В качестве ключа используется название поведение (далее по этому ключу можно обращаться к поведению), а в качестве значения идут параметры. Параметры идут произвольным массивом имя/значение, 'class' — это служебный параметр, означающий класс поведения. Если у повеления нет параметром, то его можно записать в короткой форме (смотри 'category'). Альтернативным (скорее дополнительным) способом добавления поведения является прямой вызов метода AttachBehavior, например:
$oTopic->AttachBehavior('property','ModuleProperty_BehaviorPropertyEntity');

// далее можно убрать поведение
$oTopic->DetachBehavior('property');


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

Работа в различных окружениях (devel, production и т.п.)

В новой версии LS мы изменили механизм работы определения окружения и загрузки соответствующих конфигов (config.local.php и config.stable.php). Если раньше эти конфиги всегда подгружались(просто перезаписывая данные), то сейчас подключается только нужный конфиг.

Логику работы мы взяли из популярного фреймворка Laravel. Теперь у нас есть в корне сайта каталог /bootstrap/ с файлом start.php. Именно в этом файле задается механизм определения текущего окружения:
$sEnv=Engine::DetectEnvironment(array(
                                 'production' => array('your-machine-name'),
                             ));

В метод DetectEnvironment передается список окружений (ключи массива) и в качестве значений список хост-неймов серверов. Текущий хост-нейм можно посмотреть в nix командой hostname. Как альтернатива в метод DetectEnvironment вместо списка можно передать функцию и определить в ней свою логику:
$sEnv=Engine::DetectEnvironment(function(){
    // здесь ваша логика
    return 'devel';
});

В зависимости от текущего окружения будет загружен необходимый конфиг (если он существует). Например, для окружения «production» загрузится /application/config/config.production.php Этот же механизм работает и для плагинов! Будет подгружен конфиг /application/config/plugins/[plugin_name]/config.production.php

По умолчанию (если не удалось определить окружение) подключается окружение «local». Дополнительно зарезервировано окружение «testing», которое используется для юнит-тестов. Активируется оно довольно просто — достаточно перед подключением файла /bootstrap/start.php создать переменную $bUseEnvironmentTesting=true;.

Плагин "игнор" версии 1.1.0


Возможности

Пользователь может добавить другого пользователя в игнор и при этом поставить ему один или несколько из приведенных параметров:

  • Запрет получения личных сообщений от пользователя (функция есть в движке ЛС)
  • Запрет показа комментариев пользователя (я не вижу его комментарии вообще)
  • Запрет пользователю отвечать на мой комментарий
  • Запрет пользователю комментировать мои топики
  • Запрет пользователю отвечать на мой комментарий в определённом топике
  • Запрет пользователю комментировать в моём топике
  • Запрет пользователю писать на моей стене

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

Плагин «Просмотры» (обновление 16.11.2015)

Описание

Плагин осуществляет подсчет количества просмотров топиков и позволяет сортировать топики по числу просмотров на страницах "/index", "/blog", "/personal_blog" и для каждого из блогов в отдельности. Поддерживается фильтрация по дате.

Плагин анализирует статистику просмотров 2 видов:
  1. Простая статистика по общему числу просмотров.
  2. Расширенная статистика — использует данные, собранные плагином «ViewStat». Данный режим активизируется автоматически при активном плагине «ViewStat». В данном режиме фильтрация может быть как по времени создания топиков, так и только по просматриваемым за выбранное время.

Совместим с шаблонами:
— Synio;
— Mobile;
— VK Flat Style.

Не совместим с плагином «ViewCount».

Для повышение производительности, по совету PSNet , хранение статистики осуществляется в отдельной таблице.

GitHub: github.com/wasja1982/livestreet_views

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

ls_geofiller - скрипт для автоматического заполнения таблицы geo_target

Однажды мне понадобилось обработать список юзеров и отфильтровать по их по географическому местоположению. В процессе я столкнулся с тем, что из ~450 юзеров информация о географическом положении заполнена лишь у 16-ти. И я решил сделать скрипт, который бы на основании IP с которым юзер регистрировался, получал данные о географическом положении, и заполнял эти данные. Для осуществления этого я использовал один из общедоступных сервисов sypexgeo.net (Не сочтите за рекламу, я к сервису отношения не имею, но не указать его, было бы неправильно)

Скрипт решил писать на python, так как владею им получше чем php, поэтому запускать его нужно из командной строки.

Одной из проблем является не точное соответствие названий получаемых от API сервиса, и названий в таблицах geo* livestreet например (Dnepropetrovsk и Dnipropetrovsk, Moskva и Moscow & Moscow region и тысячи других несоответствий), поэтому я сделал словарь синонимов, который заполняется при работе скрипта, именно поэтому скрипт требует участия человека при работе. Натолкнувший на неизвестный ему географический объект, скрипт спросит у вас синоним этого названия из базы livestreet (список отсортирован эвристически, и зачастую (но не обязательно) самый последний элемент является верным синонимом) В дальнейшем, скрипт будет использовать этот синоним, сохранив его в базе, то есть ввести его предстоит только один раз)

Скорее всего словарь синонимов (ls-geo.dat), после того как скрипт отработает, пополнится, если вам будет не сложно, можете прислать его мне для обновления исходного словаря.

Итак, ссылка на исходники на Гитхабе: github.com/svfat/ls-geofiller