Переопределение модуля из engine

Доброго времени, выручайте. Не могу понять как переопределить модуль из engine.

Например engine/modules/image/Image.class.php функцию BuildHTML

Делаю так, в plugins/name/PluginName.class.php.

protected $aInherits=array(
    'module'  =>array('ModuleImage'=>'_ModuleImage')
);


Далее создаю в плагине plugins/name/engine/modules/image/Image.class.php

<?php
class PluginName_ModuleImage extends PluginName_Inherit_ModuleImage {
    
    public function BuildHTML($sPath,$aParams) {
        .....	
    }

}
?>


Подозреваю не верно объявил aInherits, или путь Image.class.php. Научите куда копать?

Переопределение js (Решено)

Задача 1.
В файле /engine/lib/internal/template/js/blocks.js есть код, добавляющий класс active иконке обновления блока («прямой эфир» и «блоги»).
В шаблоне используются иконки (точнее шрифт) font-awesome, поэтому необходимо переопределить класс active на класс fa-spin (вращение).

Решение:
— в template.js шаблона перед вызовом функции инициализации блоков добавим опцию:
ls.blocks.options.update_active = 'fa-spin';

— затем переопределим ее с новой опцией:
ls.blocks.init = function(block,params) {
	params=params || {};
	$('.js-block-'+block+'-item').click(function(){
		ls.blocks.load(this, block);
		return false;
	});
	if (params.group_items) {
		this.initNavigation(block,params.group_min);
	}

	var $this=this;
	$('.js-block-'+block+'-update').click(function(){
		$(this).addClass($this.options.update_active);
		ls.blocks.load($this.getCurrentItem(block), block);
		setTimeout( function() { $(this).removeClass($this.options.update_active); }.bind(this), 600 );
	});
};


Задача 2.
В стандартном функционале при добавлении в избранное js движка добавляет к иконке избранного в футере топика класс active, и это легко можно задействовать при использовании спрайтов, указав координаты «активной» иконки. В нашем примере используется иконки font-awesome, поэтому класс active нам не подходит. Хотя vOFFka в своих шаблонах выкрутился по-другому, задав иконке с классом active желтый цвет.
Т.е. нам нужно при добавлении в избранное менять класс иконки избранного с fa-star-o (звездочка с контуром) на fa-star (залитая звездочка).
Также необходимо при добавлении/удалении в избранное соответственно менять title иконке (Добавить в избранное/Удалить из избранного).

Решение:
Окончание процесса добавления/удаления избранного в движке помечено js-хуком.
В template.js шаблона Synio я нашел применение этого хука (удаляет нулевое значение числа добавлений в избранное) и решил его дополнить:
// избранное
ls.hook.add('ls_favourite_toggle_after',function(idTarget,objFavourite,type,params,result){
	$('#fav_count_'+type+'_'+idTarget).text((result.iCount>0) ? result.iCount : '');

	// меняем иконку
	$('#fav_topic_'+idTarget).toggleClass('fa-star').toggleClass('fa-star-o');
	// Для всех типов объектов, добавляемых в избранное (например, + камменты), следует писать так
	// this.objFavourite.toggleClass('fa-star').toggleClass('fa-star-o');
	// или так
	// $('#fav_'+type+'_'+idTarget).toggleClass('fa-star').toggleClass('fa-star-o');

	// меняем title иконке
	if (result.bState) {
		this.objFavourite.attr('title', 'Удалить из избранного');
	} else {
		this.objFavourite.attr('title', 'Добавить в избранное');
	}
});


P.S.:
Вероятно, вышеизложенное гораздо проще реализовать правками непосредственно в файлах движка, но это может привести к проблемам совместимости.

Большое спасибо ort , PSNet (статья) и tema_mak за помощь в решении задач!

Научите делать плагины. Немного помощи для начинающего)

Очень заинтересовался в разработке плагинов) учусь активно, и поспать некогда).
Прошел курс создания плагина, частично пересмотрел скринкасты, перебрал некие плагины, немного уже начинаю улавливать, понимать, но еще пока туго идет, но все же идет))

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

Но пока не могу догнать что к чему, и почему. Вот конкретно хочю переопределить это engine/modules/text/Text.class.php

Был бы очень благодарен за любую помощь, намеки ну и немного объяснений, что да как.
может куда в интересное место из поиска направите, которое посчитаете полезным.

ну общем буду благодарен за полезное!))

Переопределение. Будет ли конфликт? Как определить не зная кода иного плагина.

Прочитал Новые возможности по переопределению/наследованию классов LiveStreet, но так и не понял, как быть в ситуации, если мне, например, требуется переопределить маппер одного из модулей, а я не знаю, переопределен ли он уже иним плагином?

Например, работаю через
protected $aInherits=array(
        // Переопределяю маппер 
        'mapper'  =>array('ModuleComment_MapperComment')
    );


Переопределяю один из стандартных методов маппера комментариев: например добавляю работу с дополнительными полями таблицы комментариев
К примеру, этот метод класса /classes/modules/comment/mapper/Comment.mapper.class.php

public function GetCommentsRatingByDate($sDate,$sTargetType,$iLimit,$aExcludeTarget=array(),$aExcludeParentTarget=array())


Как мне узнать, не был ли уже этот метод переопределен другим плагином? Что будет, если он уже был переопределен? И нужно ли мне сообщать другим плагинам, что я переопределяю этот метод? Ну что бы не было конфликтных ситуаций…

Решено: Конфликт плагинов. Переопределение через $aInherits

Есть 2 плагина. Из каталога, и мой, разрабатываемый. Оба плагина используют переопределение с помощью
$aInherits. Переопределяются одни и теже классы.

Соответственно, если активировать оба плагина — возникает конфликт:

Warning: Class 'PluginChronos_ModuleTopic_MapperTopic' not found in /Users/xxxxx/Sites/xxxxx.local/xxxxx.loc/engine/classes/Engine.class.php on line 1105

Fatal error: Class 'PluginChronos_Inherit_ModuleTopic_MapperTopic' not found in /Users/xxxxx/Sites/xxxxx.local/xxxxx.loc/plugins/chronos/classes/modules/topic/mapper/Topic.mapper.class.php on line 24


По-одиночке — плагины работают корректно. Как быть в такой ситуации?
Подскажите, пожалуйста.

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

Хуки JS в LS, краткое руководство для тех, кто запутался

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

Вступление


Механизм делегирования кода ЖС в ЛС можно осуществлять такими наиболее часто употребляемыми методами в зависимости от поставленной задачи:

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

Подскажите пожалуйста по переопределению классов.

Привет всем!
Вот не могу разобраться с переопределением…

Переопределил Action (норм. работает). В нем переопределяю mapper:
$this->oMapperTopic = Engine::GetMapper(__CLASS__);

и далее вызываю ф-ю этого маппера:
$this->oMapperTopic->UpdateTopicAvatar($oTopic);


есть Topic.mapper.class.php, начинается он так:

class PluginCrop_ModuleTopic_MapperTopic extends PluginCrop_Inherit_ModuleTopic_MapperTopic  {
    /*function  __construct() {
        print'test';
    }*/

    public  function UpdateTopicAvatar(ModuleTopic_EntityTopic $oTopic) {


в результате чего получаю:
Fatal error: Call to a member function UpdateTopicAvatar() on a non-object in Z:\home\live\www\plugins\crop\classes\actions\ActionTopic.class.php on line 395

т.е. не может найти ф-ю UpdateTopicAvatar().

Хотя если раскоментировать конструктор — 'test' — выводиться.

Как сделать чтоб работало? Подскажите, плизз!