AntonLV 9 лет назад
Родитель
Сommit
6bfd9cd4cc

+ 1 - 1
inc/classes/BxDolModule.php

@@ -69,7 +69,7 @@ class BxDolModule extends BxDol
         $sClassName = $sClassPrefix . 'Template';
         require_once($sClassPath . $sClassName . '.php');
         $this->_oTemplate = new $sClassName($this->_oConfig, $this->_oDb);
-        $this->_oTemplate->loadTemplates();
+        $this->_oTemplate->init();
     }
 
     /**

+ 12 - 0
inc/classes/BxDolModuleTemplate.php

@@ -31,6 +31,18 @@ class BxDolModuleTemplate extends BxDolTemplate
         $this->addLocationJs($sName, $sHomePath . 'js/', $sHomeUrl . 'js/');
     }
 
+    /**
+     * Initialize module template engine.
+     * Note. The method is executed with the system, you shouldn't execute it in your subclasses.
+     */
+    public function init()
+    {
+        $this->loadTemplates();
+
+        bx_import('BxTemplFunctions');
+        $this->_oTemplateFunctions = BxTemplFunctions::getInstance($this);
+    }
+
     function addCss($mixedFiles, $bDynamic = false)
     {
         return $this->_addFiles(BxDolTemplate::getInstance(), 'addCss', 'addDynamicLocation', 'removeLocation', '', $mixedFiles, $bDynamic, true);

+ 4 - 4
inc/classes/BxDolPage.php

@@ -134,7 +134,7 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
      * @param $sURI unique page URI
      * @return object instance or false on error
      */
-    static public function getObjectInstanceByURI($sURI = '')
+    static public function getObjectInstanceByURI($sURI = '', $oTemplate = false)
     {
     	if(empty($sURI) && bx_get('i') !== false)
     		$sURI = bx_process_input(bx_get('i'));
@@ -143,7 +143,7 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
 			return false;
 
         $sObject = BxDolPageQuery::getPageObjectNameByURI($sURI);
-        return $sObject ? self::getObjectInstance($sObject) : false;
+        return $sObject ? self::getObjectInstance($sObject, $oTemplate) : false;
     }
 
     /**
@@ -151,7 +151,7 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
      * @param $sObject object name
      * @return object instance or false on error
      */
-    static public function getObjectInstance($sObject)
+    static public function getObjectInstance($sObject, $oTemplate = false)
     {
         if (isset($GLOBALS['bxDolClasses']['BxDolPage!'.$sObject]))
             return $GLOBALS['bxDolClasses']['BxDolPage!'.$sObject];
@@ -167,7 +167,7 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
                 require_once(BX_DIRECTORY_PATH_ROOT . $aObject['override_class_file']);
         }
 
-        $o = new $sClass($aObject);
+        $o = new $sClass($aObject, $oTemplate);
 
         return ($GLOBALS['bxDolClasses']['BxDolPage!'.$sObject] = $o);
     }

+ 17 - 4
inc/classes/BxDolTemplate.php

@@ -176,7 +176,8 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
     protected $aPage;
     protected $aPageContent;
 
-    protected $_oConfigTemplate;
+    protected $_oTemplateConfig;
+    protected $_oTemplateFunctions;
 
     /**
      * Constructor
@@ -404,7 +405,10 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
         $this->aPage['injections'] = $aInjections;
 
         bx_import('BxTemplConfig'); // TODO: for some reason autoloader isn't working here....
-        $this->_oConfigTemplate = BxTemplConfig::getInstance();
+        $this->_oTemplateConfig = BxTemplConfig::getInstance();
+
+        bx_import('BxTemplFunctions');
+        $this->_oTemplateFunctions = BxTemplFunctions::getInstance($this);
     }
 
     protected function getInjectionsData ()
@@ -836,6 +840,15 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
         return $this->_aTemplates[$sName];
     }
 
+    /**
+     * Get template functions object.
+     * @see BxBaseFunctions
+     */
+    public function getTemplateFunctions()
+    {
+        return $this->_oTemplateFunctions;
+    }
+
     /**
      * Get icon template in dependence of a value, provided in $mixedId.
      * 
@@ -1651,13 +1664,13 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
             require_once(BX_DIRECTORY_PATH_PLUGINS . 'lessphp/Cache.php');
         	$aFiles = array($mixed['path'] => $mixed['url']);
         	$aOptions = array('cache_dir' => $this->_sCachePublicFolderPath);
-        	$sFile = Less_Cache::Get($aFiles, $aOptions, $this->_oConfigTemplate->aLessConfig);
+        	$sFile = Less_Cache::Get($aFiles, $aOptions, $this->_oTemplateConfig->aLessConfig);
 
             return array('url' => $this->_sCachePublicFolderUrl . $sFile, 'path' => $this->_sCachePublicFolderPath . $sFile);
         }
 
         $oLess = new Less_Parser();
-        $oLess->ModifyVars($this->_oConfigTemplate->aLessConfig);
+        $oLess->ModifyVars($this->_oTemplateConfig->aLessConfig);
         $oLess->parse($mixed);
         return $oLess->getCss();
     }

+ 3 - 0
modules/boonex/decorous/data/template/system/designbox_10.html

@@ -0,0 +1,3 @@
+<!-- Design Box 10 [start]: Content only + padding -->
+<div class="bx-db-content bx-content-padding-block bx-clearfix">__designbox_content__</div>
+<!-- Design Box 10 [ end ] -->

+ 1 - 1
modules/boonex/decorous/data/template/system/designbox_11.html

@@ -2,6 +2,6 @@
 <div class="bx-db-container bx-def-image-bg-block bx-def-color-bg-block bx-def-border-block bx-shadow-block">
     <div class="bx-db-header"><div class="bx-db-title bx-def-font-h2">__title__</div>__caption_item__<div class="bx-clear"></div></div>
     <div class="bx-db-divider bx-def-hr"></div>
-    <div class="bx-db-content bx-def-padding-top bx-content-padding-block bx-clearfix">__designbox_content__</div>
+    <div class="bx-db-content bx-content-padding-block bx-clearfix">__designbox_content__</div>
 </div>
 <!-- Design Box 11 [ end ] -->

+ 1 - 1
modules/boonex/decorous/data/template/system/designbox_13.html

@@ -1,6 +1,6 @@
 <!-- Design Box 13 [start]: Content + background + padding -->
 <div class="bx-db-container bx-def-image-bg-block bx-def-color-bg-block bx-def-border-block bx-shadow-block">
-    <div class="bx-db-content bx-def-padding-top bx-content-padding-block bx-clearfix">
+    <div class="bx-db-content bx-content-padding-block bx-clearfix">
             __designbox_content__
     </div>
 </div>

+ 1 - 1
modules/boonex/decorous/data/template/system/designbox_14.html

@@ -2,6 +2,6 @@
 <div class="bx-db-container bx-dbc-nobg bx-def-border-block bx-shadow-block">
     <div class="bx-db-header"><div class="bx-db-title bx-def-font-h2">__title__</div>__caption_item__<div class="bx-clear"></div></div>
     <div class="bx-db-divider bx-def-hr"></div>
-    <div class="bx-db-content bx-def-padding-top bx-content-padding-block bx-clearfix">__designbox_content__</div>
+    <div class="bx-db-content bx-content-padding-block bx-clearfix">__designbox_content__</div>
 </div>
 <!-- Design Box 14 [ end ] -->

+ 3 - 0
modules/boonex/protean/data/template/system/designbox_10.html

@@ -0,0 +1,3 @@
+<!-- Design Box 10 [start]: Content only + padding -->
+<div class="bx-db-content bx-content-padding-block bx-clearfix">__designbox_content__</div>
+<!-- Design Box 10 [ end ] -->

+ 1 - 1
modules/boonex/protean/data/template/system/designbox_11.html

@@ -2,6 +2,6 @@
 <div class="bx-db-container bx-def-image-bg-block bx-def-color-bg-block bx-def-border-block bx-shadow-block">
     <div class="bx-db-header"><div class="bx-db-title bx-def-font-h2">__title__</div>__caption_item__<div class="bx-clear"></div></div>
     <div class="bx-db-divider bx-def-hr"></div>
-    <div class="bx-db-content bx-def-padding-top bx-content-padding-block bx-clearfix">__designbox_content__</div>
+    <div class="bx-db-content bx-content-padding-block bx-clearfix">__designbox_content__</div>
 </div>
 <!-- Design Box 11 [ end ] -->

+ 1 - 1
modules/boonex/protean/data/template/system/designbox_13.html

@@ -1,6 +1,6 @@
 <!-- Design Box 13 [start]: Content + background + padding -->
 <div class="bx-db-container bx-def-image-bg-block bx-def-color-bg-block bx-def-border-block bx-shadow-block">
-    <div class="bx-db-content bx-def-padding-top bx-content-padding-block bx-clearfix">
+    <div class="bx-db-content bx-content-padding-block bx-clearfix">
             __designbox_content__
     </div>
 </div>

+ 1 - 1
modules/boonex/protean/data/template/system/designbox_14.html

@@ -2,6 +2,6 @@
 <div class="bx-db-container bx-dbc-nobg bx-def-border-block bx-shadow-block">
     <div class="bx-db-header"><div class="bx-db-title bx-def-font-h2">__title__</div>__caption_item__<div class="bx-clear"></div></div>
     <div class="bx-db-divider bx-def-hr"></div>
-    <div class="bx-db-content bx-def-padding-top bx-content-padding-block bx-clearfix">__designbox_content__</div>
+    <div class="bx-db-content bx-content-padding-block bx-clearfix">__designbox_content__</div>
 </div>
 <!-- Design Box 14 [ end ] -->

+ 3 - 1
studio/classes/BxDolStudioTemplate.php

@@ -76,7 +76,9 @@ class BxDolStudioTemplate extends BxDolTemplate implements iBxDolSingleton
             'jquery.dolPopup.js',
         ));
 
-        $this->_oConfigTemplate = BxTemplStudioConfig::getInstance();
+        $this->_oTemplateConfig = BxTemplStudioConfig::getInstance();
+
+        $this->_oTemplateFunctions = BxTemplStudioFunctions::getInstance($this);
     }
 
     function _getAbsoluteLocation($sType, $sFolder, $sName, $sCheckIn = BX_DOL_TEMPLATE_CHECK_IN_BOTH)

+ 0 - 3
studio/template/designbox_0.html

@@ -1,3 +0,0 @@
-<!-- Design Box 0 [start]: Content only -->
-__content__
-<!-- Design Box 0 [ end ] -->

+ 0 - 12
studio/template/designbox_1.html

@@ -1,12 +0,0 @@
-<!-- Design Box 1 [start]: Content + title + background -->
-<div __id__ class="bx-db-container bx-def-border bx-def-shadow bx-def-color-bg-block bx-def-margin-bottom">
-    <div class="bx-db-header bx-def-border-bottom">
-        <div class="bx-db-title bx-def-padding-sec-left">__title__</div>
-        <bx_if:note>
-            <div class="bx-db-note bx-def-padding-sec-left bx-def-color-ft-gray-l3">__note__</div>
-        </bx_if:note>__caption_item__<div class="bx-clear"></div>
-    </div>
-    <div class="bx-db-content">__content__</div>
-    __bottom_item__
-</div>
-<!-- Design Box 1 [ end ] -->

+ 0 - 5
studio/template/designbox_10.html

@@ -1,5 +0,0 @@
-<!-- Design Box 10 [start]: Content only + padding -->
-<div class="bx-def-padding">
-    __content__
-</div>
-<!-- Design Box 10 [ end ] -->

+ 0 - 12
studio/template/designbox_11.html

@@ -1,12 +0,0 @@
-<!-- Design Box 11 [start]: Content + title + background + padding -->
-<div class="bx-db-container bx-def-border bx-def-shadow bx-def-color-bg-block bx-def-margin-bottom">
-    <div class="bx-db-header bx-def-border-bottom">
-        <div class="bx-db-title bx-def-padding-sec-left">__title__</div>
-        <bx_if:note>
-            <div class="bx-db-note bx-def-padding-sec-left bx-def-color-ft-gray-l3">__note__</div>
-        </bx_if:note>__caption_item__<div class="bx-clear"></div>
-    </div>
-    <div class="bx-db-content bx-def-padding-sec">__content__</div>
-    __bottom_item__
-</div>
-<!-- Design Box 11 [ end ] -->

+ 0 - 8
studio/template/designbox_13.html

@@ -1,8 +0,0 @@
-<!-- Design Box 13 [start]: Content + background + padding -->
-<div class="bx-db-container bx-def-border bx-def-shadow bx-def-color-bg-block bx-def-margin-bottom">
-    <div class="bx-db-content bx-def-padding">
-            __content__
-    </div>
-	__bottom_item__
-</div>
-<!-- Design Box 13 [ end ] -->

+ 0 - 2
studio/template/designbox_2.html

@@ -1,2 +0,0 @@
-<!-- Design Box 2 [start] -->
-<!-- Design Box 2 [ end ] -->

+ 0 - 8
studio/template/designbox_3.html

@@ -1,8 +0,0 @@
-<!-- Design Box 3 [start]: Content + background -->
-<div class="bx-db-container bx-def-border bx-def-shadow bx-def-color-bg-block bx-def-margin-bottom">
-    <div class="bx-db-content">
-            __content__
-    </div>
-	__bottom_item__
-</div>
-<!-- Design Box 3 [ end ] -->

+ 0 - 12
studio/template/designbox_menu_1.html

@@ -1,12 +0,0 @@
-<div id="bx-db-menu-__id__" class="bx-db-menu">
-	<bx_repeat:actions>
-		<div id="__id__-act" class="active" <bx_if:hide_active>style="display:none"</bx_if:hide_active>>
-			__icon__
-			<span __class__>__title__</span>
-		</div>
-		<div id="__id__-pas" class="notActive" <bx_if:hide_inactive>style="display:none"</bx_if:hide_inactive>>
-			__icon__
-			<a id="__id__" __class__ __href__ __target__ __on_click__>__title__</a>
-		</div>
-	</bx_repeat:actions>
-</div>

+ 1 - 1
studio/template/scripts/BxBaseStudioDashboard.php

@@ -56,7 +56,7 @@ class BxBaseStudioDashboard extends BxDolStudioDashboard
 
     function getPageCode($bHidden = false)
     {
-    	$oPage = BxDolPage::getObjectInstance('sys_std_dashboard');
+    	$oPage = BxDolPage::getObjectInstance('sys_std_dashboard', BxDolStudioTemplate::getInstance());
     	return $oPage->getCode();
     }
 

+ 0 - 56
studio/template/scripts/BxBaseStudioFunctions.php

@@ -26,62 +26,6 @@ class BxBaseStudioFunctions extends BxBaseFunctions implements iBxDolSingleton
         return $GLOBALS['bxDolClasses']['BxBaseStudioFunctions'];
     }
 
-    function getDesignBox($sTitle, $sContent, $aOptions = array())
-    {
-        $oTemplate = BxDolStudioTemplate::getInstance();
-
-        $sId = isset($aOptions['id']) && $aOptions['id'] != '' ? bx_html_attribute($aOptions['id']) : '';
-        $iIndex = isset($aOptions['db']) && !empty($aOptions['db']) ? (int)$aOptions['db'] : BX_DB_DEF;
-
-        $bNote = isset($aOptions['note']) && $aOptions['note'] != '';
-        return $oTemplate->parseHtmlByName('designbox_' . (int)$iIndex . '.html', array(
-            'id' => $sId != '' ? 'id="bx-db-container-' . $sId . '"' : '',
-            'title' => bx_process_output($sTitle),
-            'bx_if:note' => array(
-                'condition' => $bNote,
-                'content' => array(
-                    'note' => $bNote ? bx_process_output($aOptions['note']) : ''
-                )
-            ),
-            'caption_item' => isset($aOptions['caption_item']) && $aOptions['caption_item'] != '' ? $this->getDesignBoxMenu('cpt-' . $sId, $aOptions['caption_item']) : '',
-            'content' => $sContent,
-            'bottom_item' => isset($aOptions['bottom_item']) && $aOptions['bottom_item'] != '' ? $this->getDesignBoxMenu('cpt-' . $sId, $aOptions['bottom_item']) : '',
-        ));
-    }
-
-    function getDesignBoxMenu($sId, $mixedItems, $iIndex = 1)
-    {
-        $oTemplate = BxDolStudioTemplate::getInstance();
-
-        if(is_array($mixedItems)) {
-            $mixedButtons = array();
-            foreach($mixedItems as $sId => $aAction) {
-                $sClass = isset($aAction['class']) ? ' class="' . bx_html_attribute($aAction['class']) . '"' : '';
-
-                $mixedButtons[] = array(
-                    'id' => $sId,
-                    'title' => bx_process_output(_t($aAction['title'])),
-                    'class' => $sClass,
-                    'icon' => isset($aAction['icon']) ? '<img' . $sClass . ' src="' . bx_html_attribute($aAction['icon']) . '" />' : '',
-                    'href' => isset($aAction['href']) ? ' href="' . bx_html_attribute($aAction['href']) . '"' : '',
-                    'target' => isset($aAction['target'])  ? ' target="' . bx_html_attribute($aAction['target']) . '"' : '',
-                    'on_click' => isset($aAction['onclick']) ? ' onclick="' . bx_html_attribute($aAction['onclick']) . '"' : '',
-                    'bx_if:hide_active' => array(
-                        'condition' => !isset($aAction['active']) || $aAction['active'] != 1,
-                        'content' => array()
-                    ),
-                    'bx_if:hide_inactive' => array(
-                        'condition' => isset($aAction['active']) && $aAction['active'] == 1,
-                        'content' => array()
-                    )
-                );
-            }
-        } else
-            $mixedButtons = $mixedItems;
-
-        return $oTemplate->parseHtmlByName('designbox_menu_' . $iIndex . '.html', array('id' => $sId, 'bx_repeat:actions' => $mixedButtons));
-    }
-
     function getLoginForm()
     {
         $oTemplate = BxDolStudioTemplate::getInstance();

+ 2 - 2
template/scripts/BxBaseFunctions.php

@@ -31,10 +31,10 @@ class BxBaseFunctions extends BxDolFactory implements iBxDolSingleton
             trigger_error('Clone is not allowed for the class: ' . get_class($this), E_USER_ERROR);
     }
 
-    public static function getInstance()
+    public static function getInstance($oTemplate = null)
     {
         if(!isset($GLOBALS['bxDolClasses']['BxTemplFunctions']))
-            $GLOBALS['bxDolClasses']['BxTemplFunctions'] = new BxTemplFunctions();
+            $GLOBALS['bxDolClasses']['BxTemplFunctions'] = new BxTemplFunctions($oTemplate);
 
         return $GLOBALS['bxDolClasses']['BxTemplFunctions'];
     }

+ 3 - 2
template/scripts/BxBasePage.php

@@ -208,6 +208,7 @@ class BxBasePage extends BxDolPage
     protected function _getBlockCode($aBlock)
     {
         $sContentWithBox = '';
+        $oFunctions = $this->_oTemplate->getTemplateFunctions();
 
         if (isset($GLOBALS['bx_profiler'])) $GLOBALS['bx_profiler']->beginPageBlock(_t($aBlock['title']), $aBlock['id']);
 
@@ -219,7 +220,7 @@ class BxBasePage extends BxDolPage
             $sTitle = $this->getBlockTitle($aBlock);
 
             if (is_array($mixedContent) && !empty($mixedContent['content'])) {
-				$sContentWithBox = DesignBoxContent(
+				$sContentWithBox = $oFunctions->designBoxContent(
                 	isset($mixedContent['title']) ? $mixedContent['title'] : $sTitle,
                     $mixedContent['content'],
                     isset($mixedContent['designbox_id']) ? $mixedContent['designbox_id'] : $aBlock['designbox_id'],
@@ -227,7 +228,7 @@ class BxBasePage extends BxDolPage
 				);
             } 
             elseif (is_string($mixedContent) && !empty($mixedContent)) {                    
-                $sContentWithBox = DesignBoxContent($sTitle, $mixedContent, $aBlock['designbox_id']);
+                $sContentWithBox = $oFunctions->designBoxContent($sTitle, $mixedContent, $aBlock['designbox_id']);
             }
         }