Выводим в Top блогов количество постов вместо рейтинга.

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



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

Сначала захотелось по-быстрому исправить эту функцию в коде движка, но после недолгих размышлений захотелось сделать правильно и красиво, потому что работа с Livestreet подталкивает к этому. Поэтому, оформим решение в виде модуля, который может оказаться полезным и другим пользователям.


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

Наследование одного екшена разными плагинами

6
Здесь я высказался о проблеме. Сегодня я расскажу как её решить, а точнее какие изменения внести в ядро 042 из последней транковой версии.
Проблема эта однажды коснется почти каждого т.к. она весьма серьезная и с ней столкнутся — раз плюнуть, поэтому пост заносим в избранное.

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

Fatal error: Uncaught exception 'Exception' with message 'Can not find the template: actions/ActionSettings/abc.tpl' in лалала



Читать дальше
  • +1
  • 03 августа 2011, 04:16
  • PSNet

Совместимости плагинов и наследование классов.

1
А так же другие вопросы по разработке плагинов.
Кстати, в какой блог этот вопрос правильно разместить?

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

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

Проблема с наследованием MapperTopic

1
У меня есть плагин, который, в том числе, наследует ModuleTopic_MapperTopic… Так вот, поскольку XText переопределяет, например, метод UpdateTopic вусмерть, без всякого вызова методов родительских классов, весь функционал летит к чертям… Как-то совсем «не айс».

Так вот, вопрос… Есть ли возможность как-то это дело обойти без острых углов? Пробовал наследовать от PluginXtext_ModuleXtext_MapperTopic… Не особо помогает. Т.е. полностью игнорирует такое наследование. Да и вообще — не выход. Ведь еще могут быть плагины, использующие наследование мэппера…

Некоторые вопросы по разработке плагинов

1
Написал около десятка плагинов, но мне кажется я не все понял о наследовании в 0.4.2

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 и закрывая тем самым эти шаблоны от изменения другими плагинами?

Вопрос про делегириование

 
Мне нужно делегировать 3 различных экшена, а точнее наследовать, чтобы изменить в них ивенты


protected $aDelegates = array(
                        'action' => array('ActionTopic'=>'PluginAntispam_ActionTopic')
                        );


Проблема в том, что тут можно прописать только один экшен, иначе каждый последующий перезапишет элемент action массива $aDelegates,
так как же мне несколько делегатов сделать?

Новые функции в репозитории фреймворка: ORM/ActiveRecord топик-ссылка

4
Всем добрый день. Хотелось бы рассказать немного о, думаю, многим уже известном, движке LiveStreet. Точнее, о том, как продвигается его развитие и о новых функциях в dev-репозитории.

Проблемы при создании плагинов

2
Привет,

столкнулся с несколькими непонятными вещами в 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() {        
    }
}
?>


Читать дальше
  • +7
  • 02 июня 2010, 00:28
  • ort