Выводим в Top блогов количество постов вместо рейтинга.
44
Возникла задача выводить в блоке Tоп блогов вместо абстрактного рейтинга количество постов. Актуально для новых сайтов или неактивных комьюнити.


Для начала находим Экшен блока. Структура LS подробно описана, поэтому легко находим нужный блок: /classes/blocks/BlockBlogs.class.php В блоке вызывается единственная функция: Blog_GetBlogsRating, с ней и будем работать.
Сначала захотелось по-быстрому исправить эту функцию в коде движка, но после недолгих размышлений захотелось сделать правильно и красиво, потому что работа с Livestreet подталкивает к этому. Поэтому, оформим решение в виде модуля, который может оказаться полезным и другим пользователям.
Читать дальше


Для начала находим Экшен блока. Структура LS подробно описана, поэтому легко находим нужный блок: /classes/blocks/BlockBlogs.class.php В блоке вызывается единственная функция: Blog_GetBlogsRating, с ней и будем работать.
Сначала захотелось по-быстрому исправить эту функцию в коде движка, но после недолгих размышлений захотелось сделать правильно и красиво, потому что работа с Livestreet подталкивает к этому. Поэтому, оформим решение в виде модуля, который может оказаться полезным и другим пользователям.
Читать дальше
Наследование одного екшена разными плагинами
6
Здесь я высказался о проблеме. Сегодня я расскажу как её решить, а точнее какие изменения внести в ядро 042 из последней транковой версии.
Проблема эта однажды коснется почти каждого т.к. она весьма серьезная и с ней столкнутся — раз плюнуть, поэтому пост заносим в избранное.
Коротко напомню суть проблемы — если два разных плагина наследуют один общий екшен (например ActionSettings), и оба плагина выводят что-то в шаблон, то один из плагинов (который был активирован первым) завершится ошибкой не нахождения шаблона.
Читать дальше
Проблема эта однажды коснется почти каждого т.к. она весьма серьезная и с ней столкнутся — раз плюнуть, поэтому пост заносим в избранное.
Коротко напомню суть проблемы — если два разных плагина наследуют один общий екшен (например ActionSettings), и оба плагина выводят что-то в шаблон, то один из плагинов (который был активирован первым) завершится ошибкой не нахождения шаблона.
Fatal error: Uncaught exception 'Exception' with message 'Can not find the template: actions/ActionSettings/abc.tpl' in лалалаЧитать дальше
Совместимости плагинов и наследование классов.
1
А так же другие вопросы по разработке плагинов.
Кстати, в какой блог этот вопрос правильно разместить?
Первый вопрос:
как правильно наследовать классы, что бы при появлении второго плагина, наследующего тот же класс не возникало конфликтов? Случай переопределения той, или иной функции класса не рассматриваем.
например:
Читать дальше
Кстати, в какой блог этот вопрос правильно разместить?
Первый вопрос:
как правильно наследовать классы, что бы при появлении второго плагина, наследующего тот же класс не возникало конфликтов? Случай переопределения той, или иной функции класса не рассматриваем.
например:
Читать дальше
Проблема с наследованием MapperTopic
1
У меня есть плагин, который, в том числе, наследует ModuleTopic_MapperTopic… Так вот, поскольку XText переопределяет, например, метод UpdateTopic вусмерть, без всякого вызова методов родительских классов, весь функционал летит к чертям… Как-то совсем «не айс».
Так вот, вопрос… Есть ли возможность как-то это дело обойти без острых углов? Пробовал наследовать от PluginXtext_ModuleXtext_MapperTopic… Не особо помогает. Т.е. полностью игнорирует такое наследование. Да и вообще — не выход. Ведь еще могут быть плагины, использующие наследование мэппера…
Так вот, вопрос… Есть ли возможность как-то это дело обойти без острых углов? Пробовал наследовать от PluginXtext_ModuleXtext_MapperTopic… Не особо помогает. Т.е. полностью игнорирует такое наследование. Да и вообще — не выход. Ведь еще могут быть плагины, использующие наследование мэппера…
Некоторые вопросы по разработке плагинов
1
Написал около десятка плагинов, но мне кажется я не все понял о наследовании в 0.4.2
1) как в шаблоне использовать данные конфига для foreach, elseif?
Пример:
я пока решаю эту проблему таким костылем
2) Как обстоят дела с наследованием экшенов?
Если мне приходится вмешаться в регистрацию, чтобы добавить проверку, мне приходится переопределять метод класса регистрации, должен быть лучший путь
выдирать ради этого целый метод это большой костыль. вроде можно повесить свой код на конец или начало выполнения метода модуля регистрации, но что, если надо вывести сделать проверку и в экшене регистрации вывести ошибку, совать ее в модуль не правильно?
3) вот если мне необходимо изменить голосование за топики, строчку
как мне это лучше сделать? каким образом переопределить файл аякса, принимающий запрос на изменение рейтинга топика, а так же можно ли изменить саму эту строчку, не делегируя целиком шаблоны topic.tpl и topic_list.tpl и закрывая тем самым эти шаблоны от изменения другими плагинами?
1) как в шаблоне использовать данные конфига для foreach, elseif?
Пример:
{if {cfg name='path.root.web'}}
это естественно не работает, как правильно?
если мы делегируем только шаблон и у нас нет возможности присвоить
переменной значение конфига в блоке/экшене/хуке
{/if}
я пока решаю эту проблему таким костылем
{php}
if ((Config::Get('plugin.name.value')) && $oUserCurrent {
{/php}
вот такой костыль
{php}
}
{/php}
2) Как обстоят дела с наследованием экшенов?
Если мне приходится вмешаться в регистрацию, чтобы добавить проверку, мне приходится переопределять метод класса регистрации, должен быть лучший путь
class PluginExample extends Plugin {
/**
* Делегирование регистрации
*/
public $aInherits = array(
'action' => array('ActionLogin', 'ActionRegistration', 'ActionTalk'),
);
...
}
class PluginExample_ActionRegistration extends PluginExample_Inherit_ActionRegistration {
protected function EventIndex() {
...
$this->PluginAntistatist_Antistatist_addLogin($oUser->getLogin());
...
}
выдирать ради этого целый метод это большой костыль. вроде можно повесить свой код на конец или начало выполнения метода модуля регистрации, но что, если надо вывести сделать проверку и в экшене регистрации вывести ошибку, совать ее в модуль не правильно?
3) вот если мне необходимо изменить голосование за топики, строчку
<li class="minus"><a href="#" onclick="lsVote.vote({$oTopic->getId()},this,-5,'topic'); return false;"></a></li>
как мне это лучше сделать? каким образом переопределить файл аякса, принимающий запрос на изменение рейтинга топика, а так же можно ли изменить саму эту строчку, не делегируя целиком шаблоны topic.tpl и topic_list.tpl и закрывая тем самым эти шаблоны от изменения другими плагинами?
- 0
- 17 марта 2011, 21:58
- soulgarden
- 8
Вопрос про делегириование
Мне нужно делегировать 3 различных экшена, а точнее наследовать, чтобы изменить в них ивенты
Проблема в том, что тут можно прописать только один экшен, иначе каждый последующий перезапишет элемент action массива $aDelegates,
так как же мне несколько делегатов сделать?
protected $aDelegates = array(
'action' => array('ActionTopic'=>'PluginAntispam_ActionTopic')
);
Проблема в том, что тут можно прописать только один экшен, иначе каждый последующий перезапишет элемент action массива $aDelegates,
так как же мне несколько делегатов сделать?
- 0
- 05 марта 2011, 11:32
- soulgarden
- 2
Новые функции в репозитории фреймворка: ORM/ActiveRecord
4
Всем добрый день.
Хотелось бы рассказать немного о, думаю, многим уже известном, движке LiveStreet. Точнее, о том, как продвигается его развитие и о новых функциях в dev-репозитории.
- +2
- 08 декабря 2010, 11:51
- Ajaxy
- habrahabr.ru/blogs/livestreet/...
- 15
Проблемы при создании плагинов
2
Привет,
столкнулся с несколькими непонятными вещами в LS
1) плагин должен добавлять js к некоторым страницам
2) Два разных плагина наследуют сущность User, но при этом переопределяют разные методы
Если активировать оба, то возникает ошибка:
3) Переопределил ActionSettings, положил шаблон profile.tpl в соответствующую папку плагина, рядом с profile.tpl создал еще один доп. шаблон custom.tpl. При попытке его заинклудить методом тыка обнаружил, что ls пытается это сделать из директории с дефолтовым скином, причем из корня. Можно ли как-то изменить такое поведение?
p.s. по пункту 3, я переопределял ActionSettings только для того, «делегировать» шаблон, можно ли обойтись без этого?
столкнулся с несколькими непонятными вещами в LS
1) плагин должен добавлять js к некоторым страницам
Config::set('head.rules.myplugin', array(
'path' => Config::get('path.root.web') . '/settings/profile',
'js' => array(
'include' => array(
Config::get('path.plugins') . '/myplugin/custom.js'
)
)
));Таким образом добавил для одной, а как сделать для нескольких?2) Два разных плагина наследуют сущность User, но при этом переопределяют разные методы
Если активировать оба, то возникает ошибка:
Fatal error: Class 'PluginMyPlugin_ModuleUser_EntityUser' not found in D:/web/sites/livestreet/engine/include/function.php(412) : eval()'d code on line 1 3) Переопределил ActionSettings, положил шаблон profile.tpl в соответствующую папку плагина, рядом с profile.tpl создал еще один доп. шаблон custom.tpl. При попытке его заинклудить методом тыка обнаружил, что ls пытается это сделать из директории с дефолтовым скином, причем из корня. Можно ли как-то изменить такое поведение?
p.s. по пункту 3, я переопределял ActionSettings только для того, «делегировать» шаблон, можно ли обойтись без этого?
Новые возможности по переопределению/наследованию классов LiveStreet
44
В 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() {
}
}
?>
Читать дальше