Ошибка /engine/classes/Engine.class.php on line 604

ДОбрый день. Мне передали сайт на LiveStreet CMS и в последнее время каждый день от слетает с этой ошибкой. В инете я так и не нашел решение. Кто знает как исправить ошибку? Прошу помощи.

Переопределение модуля из 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. Научите куда копать?

Ошибка: "Циклическое наследование" в Engine autoload

Здравствуйте, на одном из проектов у меня выскочила ошибка «циклического наследования».
Что я имею в виду:
При попытке вызова функции $this->User_GetUserById(....);
получаю ошибку
PHP Fatal error:  Class 'PluginAdminusers_Inherit_ModuleUser_EntityUser' not found in /var/www/augme/www/plugins/adminusers/classes/mo
dules/user/entity/User.entity.class.php on line 11

И эта ошибка не устраняется при отключении плагина. При дальнейшем исследовании проблемы установил print на функцио Engine::autoload:

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

Инъекция кода в файлы движка (\engine\*) плагином. Как?

Возникла необходимость инъекции кода в некоторые фалы движка. Есть ли возможность реализовать это из плагина?
Например, надо немного изменить (без влияния на общую логику работы)
\engine\lib\external\Smarty\libs\sysplugins\smarty_internal_templatecompilerbase.php

помогите с ошибкой, SQL Error: Unknown table engine 'InnoDB'

Сайт сам по себе перестал работать, выдаёт такую ошибку

SQL Error: Unknown storage engine 'InnoDB' at /var/www/hinex/data/www/three-days-grace.ru/classes/modules/topic/mapper/Topic.mapper.class.php line 257
Array ( [code] => 1286 [message] => Unknown storage engine 'InnoDB' [query] => SELECT count(t.topic_id) as count FROM tdgx_topic as t, tdgx_blog as b WHERE 1=1 AND t.topic_publish = 1 AND t.topic_date_add >= '2012-10-16 01:00:00' AND ((b.blog_type='open')) AND t.blog_id=b.blog_id; [context] => /var/www/hinex/data/www/three-days-grace.ru/classes/modules/topic/mapper/Topic.mapper.class.php line 257 ) 

[РЕШЕНО]Использование хуков в плагине

Дочитал документацию и этот топик, пытаюсь добавить поле при регистрации, но, похоже, поставил функцию не там, где её ищет движок:

//PluginMyPlugin.class.php
public function Init() {
      $this->Hook_AddExecFunction('template_form_registration_end','add_field',10);
    }
    public function add_field($aVars) {
      var_dump("some additional field");
    }

В этом случае при регистрации появляется следующая ошибка:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'add_field' not found or invalid function name in /var/www/localhost/htdocs/live/engine/modules/hook/Hook.class.php on line 139

Также пробовал создавать внутри плагина каталог classes/hooks с файлом hookMyPlugin.class.php:
class PluginMyPlugin_HookMyPlugin extends Hook {
public function RegisterHook ()
{
  this -> AddHook('template_form_registration_end','RegEnd',__CLASS__,10);
}
public function RegEnd ($aVars) {
  //return $this -> Viewer_Fetch (Plugin::GetTemplatePath (__CLASS__) . 'reg_end.tpl');
  var_dump("Hook it!");
}
}

Но в этом случае совсем ничего не происходит. Если просто добавить хук в /classes/hooks в корневой каталог, то всё работает. Но хотелось бы расположить все файлы внутри каталога плагина

Решил перековырять немного ядро

Мои нововведения:
  • Хуки вокруг инициализации модулей _before и _after за счет методов InitModule
  • Переработанный __autoload
  • Получение информации о классе методом GetClassInfo вплоть до пути к класс-файлу

Плюсы
  • Никаких более регулярок для парсинга имени класса в других скриптах, всё в одном месте
  • Нет более вилок в коде по поводу регистра в именах классов и методов. Везде учитывается регистр (собственно, чем нам грозит php6, насколько я помню)
  • Стандартные хуки вокруг инициализации модулей — это просто прекрасно, я считаю, мне часто нужны были
  • func_list_plugins() — замена куче дублирующегося кода
  • Переработанный __autoload автоматом инклюдит все возможные классы, имена которых описаны по правилам ядра.

Сырцы
engine/classes/Engine.class.php raw
engine/modules/hook/Hook.class.php raw

func_list_plugins() (поместить в engine/include/function.php)
function func_list_plugins($bAll = false){
	$sPluginsDir = Config::Get('path.root.server').'/plugins';
	$sPluginsListFile = $sPluginsDir.'/plugins.dat';
	$aPlugin = array();
	if($bAll){
		$aPluginRaw = array();
		$aPaths = glob("$aPluginRaw/*", GLOB_ONLYDIR);
		if($aPaths)
		foreach($aPaths as $sPath){
			$aPluginRaw[] = basename($sPath);
		}
	}else{
		$aPluginRaw = @array_map('trim', file($sPluginsListFile));
	}
	if($aPluginRaw)
	foreach($aPluginRaw as $sPlugin){
		$sPluginXML = "$sPluginsDir/$sPlugin/plugin.xml";
		if(is_file($sPluginXML)){
			$aPlugin[] = $sPlugin;
		}
	}
	return $aPlugin;
	
}


Давайте потестим и обсудим, насколько всё это полезно?

зыж. модифицированное ядро отлично работает на моей тестовой площадке livestreet.ochecho.ru/

Объясните пожалуйста, как вывести произвольный текст в произвольное место шаблона?

т.е. есть, к примеру, плагин или модуль и я хочу вывести результат работы какого-нить из его методов в шаблон
header_top.tpl
если есть возможность вызова методов не из плагина/модуля, то просветите тоже, если таковые имеются :)

p.s. вопрос навеян модулем «лента друзей», который тут в качестве примера предлагался, но не понятно, как мне зайдя в блоги сразу увидеть сколько у друзей прибавилось новых топиков не кликая по ним (не переходя в роут router.page.friends и не вызывая экшн)

заранее благодарен!:)

Подключение плагинов под Windows [rev. 688]

Файл: Engine.class.php, функция InitPlugins

275: if($aPluginList = @file(Config::Get('path.root.server').'/classes/plugins/plugins.dat')) {
276: foreach ($aPluginList as $sPluginName) {


При обработке файла /classes/plugins/plugins.dat сформированного в Windows редакторе, в переменной $sPluginName остаются два символа с кодами 13 и 10.

Предлагаемое решение проблемы: обработка $sPluginName функцией trim.

275: if($aPluginList = @file(Config::Get('path.root.server').'/classes/plugins/plugins.dat')) {
276: foreach ($aPluginList as $sPluginName) {
+277: $sPluginName=trim($sPluginName);


Аналогичные проблемы найдены в:
Engine.class.php, функция InitPluginHooks
Lang.class.php, функиця LoadLangFiles
loader.php, строка 136