+4.25
Рейтинг
11.40
Сила

Антон

Как правильно делать и вставлять новый блок в шаблон LS.

Несколько дней провел в поисках и экспериментах, некоторые вещи удалось понять, на других просто остановился и не могу двинутся дальше.

Что удалось понять:


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

Плагин "Nice URL"

Плагин «Nice URL» приводит URL топиков к ЧПУ. Например, /blog/bugreport/123.html преобразует в /problema-pri-ustanovke.html. Это будет полезно тем, кто верит, что такие урлы способствуют продвижению сайта в поисковых системах.

Плагин доступен для скачивания в нашем каталоге — livestreetcms.com/addons/view/46/

UPDATE 1: Плагин обновился до версии 2.0
Изменения:
1. При активации пересохраняет все топики для перевода названия в транслит
2. Исправлен баг с переопределением экшена blog через $config['router']['rewrite']
3. И главное — произвольная настройка шаблона для URL, используя переменные: %year%, %month%, %day%, %hour%, %minute%, %second%, %login%, %blog%, %id%, %title%. Настройки находятся в в конфиге плагина.

Тестируем и отлавливаем баги.

UPDATE 2: Плагин обновился до версии 2.1
Изменения:
1. Для персонального блога можно указать логин автора
$config['url_personal_blog'] = '%login%';
2. Фикс проблемы с блоками на странице топика — необходимые блоки нужно указать в конфиге плагина

PS: если LS установлен в подкаталог и при переходе на топики возникает 404 ошибка, то необходимо применить этот фикс движка — trac.lsdev.ru/livestreet/changeset/1033

Модель ORM

Важно: это лишь предлагаемая мною примерная альфа-версия модели, для ознакомления с идеями, скорее всего она будет отличаться от реальной модели, котораябудет введена в LS.

Синтаксис отношений $aRelations.


Существует 4 типа отношений:

belongs_to — связь 1 к 1, или многие к 1. в таблице обязательно наличие foreign key вида relationalias_id. Примеры:
$aRelations = array('belongs_to' =>
  array(
    'User' => 'autor',
    'Blog',
    'PluginBill_ModuleEvent' => 'event'
  )
);
// поля таблицы prefix_topic
topic_id | topic_title | ... | autor_id | blog_id | event_id
// доступные функции:
$oTopic()->getAutor(); $oTopic()->setAutor();
$oTopic()->getBlog(); $oTopic()->setBlog();
$oTopic->Save();

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

Новые возможности по переопределению/наследованию классов LiveStreet

В LS появилась новая возможность для разработчиков плагинов — наследование классов. Идея была высказана еще avadim'ом здесь.
Эта возможность позволит удобно переопределять различные методы одного класса (модуля, экшена, сущности, маппера) разными плагинами без конфликтов.
Главное отличие от делегирование — не происходит блокировки переопределения класса для других плагинов. Также есть возможность переопределения одного метода разными плагинами, но здесь разработчикам нужно быть очень осторожными и делать так, чтоб свести вероятность конфликта к минимуму.

Как использовать.
Например, нужно переопределить метод получения пути до аватара у сущности пользователя в плагине Test. В плагине необходимо объявить те классы, которые будут наследоваться. Объявление происходит в свойстве $aInherits:
<?php
class PluginTest extends Plugin {
    
    protected $aInherits=array(
       'entity'  =>array('ModuleUser_EntityUser'=>'_ModuleSide_EntityUser')
    );

    public function Activate() {        
        return true;
    }
    
    public function Init() {        
    }
}
?>

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

Наш вариант решения вопроса с рейтингом блогов

Итак, сделали рейтинг блогов зависимым от оценок постов, опубликованных в этих блогах.

в Rating.class.php

Берем функцию public function VoteTopic(UserEntity_User $oUser, TopicEntity_Topic $oTopic, $iValue)
, которая обрабатывает голосование за посты
Читать дальше →

Плагин aceAdminPanel – новые возможности для разработчиков плагинов

Прямо так и хочется начать: «Кролики – это не только ценный мех, но и три-четыре килограмма легкоусвояемого мяса» :)

А все потому, что плагин админки (aceAdminPanel) – это не только облегчение работы администратора сайта, но и новые возможности для разработчиков, пишущих различные расширения для движка. Здесь я расскажу об одной интересной фиче, которую я смог реализовать в плагине, и которая дает гораздо больше возможностей при создании плагинов, чем стандартные средства.
Читать дальше →

Переопределение методов модулей с помощью ...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];
	}
}
?>

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

Не находятся шаблоны при делегировании action-а плугином

Девелоперская версия 0.4
Пытался написать плугин — задействовал механизм делегирования. Делегировал action.
При вызове action-а движок не может найти шаблоны.

Fatal error: Uncaught exception 'Exception' with message 'Can not find the template: ' in E:\Projects\livestreet\engine\modules\viewer\Viewer.class.php:292


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

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

Предисловие

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

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

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

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