From 23c189b7a66aec993ca6593d4cf93157b01b3a87 Mon Sep 17 00:00:00 2001 From: kirsan Date: Tue, 5 Jul 2011 13:33:59 +0000 Subject: [PATCH] Ticket #213 --- engine/classes/Engine.class.php | 28 ++++++++++++++++++-- engine/modules/plugin/Plugin.class.php | 7 ++--- engine/modules/viewer/plugs/insert.block.php | 10 +++---- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/engine/classes/Engine.class.php b/engine/classes/Engine.class.php index f9cf5f06..d136a8ce 100644 --- a/engine/classes/Engine.class.php +++ b/engine/classes/Engine.class.php @@ -88,6 +88,12 @@ class Engine extends Object { * @var int */ const CI_INHERIT = 128; + + /** + * Имя блока + * @var int + */ + const CI_BLOCK = 256; /** * Префикс плагина @@ -122,10 +128,10 @@ class Engine extends Object { /** * Объекты - * CI_ACTION | CI_MAPPER | CI_HOOK | CI_PLUGIN | CI_ACTION | CI_MODULE | CI_ENTITY + * CI_ACTION | CI_MAPPER | CI_HOOK | CI_PLUGIN | CI_ACTION | CI_MODULE | CI_ENTITY | CI_BLOCK * @var int */ - const CI_OBJECT = 95; + const CI_OBJECT = 351 ; static protected $oInstance=null; @@ -763,6 +769,12 @@ class Engine extends Object { ? $aMatches[1] : null ; + } + if($iFlag & self::CI_BLOCK){ + $aResult[self::CI_BLOCK] = preg_match('/^(?:Plugin[^_]+_|)Block([^_]+)$/',$sClassName,$aMatches) + ? $aMatches[1] + : null + ; } if($iFlag & self::CI_METHOD){ $sModuleName = isset($aResult[self::CI_MODULE]) @@ -890,6 +902,18 @@ class Engine extends Object { // Хук ядра $sPath .= 'classes/hooks/Hook'.$aInfo[self::CI_HOOK].'.class.php'; } + }elseif($aInfo[self::CI_BLOCK]){ + // Блок + if($aInfo[self::CI_PLUGIN]){ + // Блок плагина + $sPath .= 'plugins/'.strtolower($aInfo[self::CI_PLUGIN]) + .'/classes/blocks/Block'.$aInfo[self::CI_BLOCK] + .'.class.php'; + ; + }else{ + // Блок ядра + $sPath .= 'classes/blocks/Block'.$aInfo[self::CI_BLOCK].'.class.php'; + } }elseif($aInfo[self::CI_PLUGIN]){ // Плагин $sPath .= 'plugins/'.strtolower($aInfo[self::CI_PLUGIN]) diff --git a/engine/modules/plugin/Plugin.class.php b/engine/modules/plugin/Plugin.class.php index 6dfe6325..803fc792 100644 --- a/engine/modules/plugin/Plugin.class.php +++ b/engine/modules/plugin/Plugin.class.php @@ -50,7 +50,8 @@ class ModulePlugin extends Module { 'mapper' => array(), 'action' => array(), 'entity' => array(), - 'template' => array() + 'template' => array(), + 'block' => array(), ); /** @@ -418,10 +419,10 @@ class ModulePlugin extends Module { * @param string $sFrom * @return string */ - public function GetDelegate($sType,$sFrom) { + public function GetDelegate($sType,$sFrom) { if (isset($this->aDelegates[$sType][$sFrom]['delegate'])) { return $this->aDelegates[$sType][$sFrom]['delegate']; - } elseif ($aInherit=$this->GetLastInherit($sFrom)) { + } elseif ($aInherit=$this->GetLastInherit($sFrom)) { return $aInherit['inherit']; } return $sFrom; diff --git a/engine/modules/viewer/plugs/insert.block.php b/engine/modules/viewer/plugs/insert.block.php index 4a62b26f..b5f0154b 100644 --- a/engine/modules/viewer/plugs/insert.block.php +++ b/engine/modules/viewer/plugs/insert.block.php @@ -36,14 +36,15 @@ function smarty_insert_block($aParams,&$oSmarty) { require_once(Config::Get('path.root.server').'/engine/classes/ActionPlugin.class.php'); $sBlockTemplate = Plugin::GetTemplatePath($aParams['params']['plugin']).'/block.'.$aParams['block'].'.tpl'; - $sBlockClass = Config::Get('path.root.server').'/plugins/'.$aParams['params']['plugin'].'/classes/blocks/Block'.$sBlock.'.class.php'; + $sBlock ='Plugin'.ucfirst($aParams['params']['plugin']).'_'.$sBlock; $sCmd='$oBlock=new Plugin'.ucfirst($aParams['params']['plugin']).'_Block'.$sBlock.'($aParamsBlock);'; } else { $sBlockTemplate = Engine::getInstance()->Plugin_GetDelegate('template','block.'.$aParams['block'].'.tpl'); - $sBlockClass = Config::Get('path.root.server').'/classes/blocks/Block'.$sBlock.'.class.php'; $sCmd='$oBlock=new Block'.$sBlock.'($aParamsBlock);'; } - + $sBlock=Engine::getInstance()->Plugin_GetDelegate('block','Block'.$sBlock); + + if (!isset($aParams['block']) or !$oSmarty->templateExists($sBlockTemplate)) { $oSmarty->trigger_error("Not found template for block: ".$sBlockTemplate); return ; @@ -58,8 +59,7 @@ function smarty_insert_block($aParams,&$oSmarty) { /** * Подключаем необходимый обработчик */ - require_once($sBlockClass); - eval($sCmd); + $oBlock = new $sBlock($aParams); /** * Запускаем обработчик */