Не видит новый модуль после его создания

Всем привет. Возникла небольшая проблемка: создал в своем плагине новый модуль, Mymodule (от Module). Затем добавил к нему маппер (от Mapper). Далее пытаюсь в методе Exec блока MyBlock вызвать метод модуля, вот так:
$aData = $this->ModuleMymodule_getData();

Но это вызывает ошибку Class «ModuleMymodule» not found!. Причем если дописать в aInherits нужную строку, ошибка меняется на Class «PluginMyPlugin_ModuleMymodule» not found!.

Собственно, код объявления модулей
class PluginMyPlugin_ModuleMymodule extends Module {
	protected $_oMapper;

   	public function Init() {
   		$this->_oMapper = Engine::GetMapper(__CLASS__);
   	}
    // some functions
}

class PluginMyPlugin_ModuleMymodule_MapperMymodule extends Mapper {
// some functions
}


Код блока:
class PluginMyPlugin_BlockMyBlock extends Block {
    public function Exec() {
    	$aData = $this->ModuleMymodule_getData(); //эта строка вызывает ошибку
// some code
}
}


Пути к файлам вроде бы тоже все полностью верны:
— myplugin/classes/actions/modules/mymodule/Mymodule.class.php
— myplugin/classes/actions/modules/mymodule/mapper/Mymodule.mapper.class.php

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

Наследование плагином объектов другого плагина

Небольшая заметка о том, как правильно нужно указать в массиве наследования в создаваемом плагине запись о наследовании части функционала другого плагина.

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

Как правильно сделать наследование экшена?

Требуется сделать ActionVideo для своего типа топика, который будет почти полностью повторять ActionTopic.
Логично сделать от него наследование. Но тогда, если другие плагины переопределят методы ActionTopic, эти изменения не коснутся наследуемого ActionVideo. Есть идеи, как реализовать наследование с учетом изменений от плагинов?

Решено: "Упаковка" изменений в плагин. Замена экшенов и переопределения

Помогите, пожалуйста, разобраться в следующем вопросе:

Пытаюсь упаковать изменения в плагин:
основной функционал — изменение вывода топиков на главной странице.
Читать дальше →

Вопрос: Переопределение метода класса ядра в плагине

Уважаемые коллеги,

Каким образом можно (правильно :)) переопределить (делегировать) методы классов ядра в плагине? В частности, я хотел бы перегрузить методы класса Router (Exec и RewriteRequest в частности).

Насколько я пока нашёл (статьи по похожей теме были найдены здесь, тут и там) можно делегировать Actions (но это не action), и методы классов модулей — но вроде бы Router не является частью модуля (или я что-то упустил). Эксперименты (методом тыка) с разными названиями хуков результата не дали, мой код не вызывается.

В API определена функция AddDeletageFunction, но я не могу понять, как сформировать к ней правильное название хука — найденные примеры, опять таки, опираются на экшины и модули.

Заранее благодарю за любые конструктивные подсказки и помощь.

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

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



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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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