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

+ 12 - 0
inc/classes/BxDolPage.php

@@ -243,6 +243,7 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
 
         $oTemplate->setPageNameIndex (BX_PAGE_DEFAULT);
         $oTemplate->setPageType ($this->getType());
+        $oTemplate->setPageInjections ($this->getInjections());
         $oTemplate->setPageContent ('page_main_code', $this->getCode());
         $oTemplate->getPageCode();
     }
@@ -266,6 +267,17 @@ class BxDolPage extends BxDolFactory implements iBxDolFactoryObject, iBxDolRepla
     {
     	return $this->_sObject;
     }
+    
+    public function getInjections()
+    {
+        $aResult = array();
+
+        foreach($this->_aObject as $sKey => $sValue)
+            if(strpos($sKey, 'inj_') === 0)
+                $aResult[substr($sKey, 4)] = $sValue;
+
+        return $aResult;
+    }
 
     /**
      * Add replace markers. Markers are replaced in raw, html, lang blocks and page title, description, keywords and block titles.

+ 14 - 0
inc/classes/BxDolTemplate.php

@@ -667,6 +667,20 @@ class BxDolTemplate extends BxDolFactory implements iBxDolSingleton
         $this->aPage['robots'] = $s;
     }
 
+    /**
+     * Set page injections.
+     *
+     * @param array $aInjections name => value injections.
+     */
+    function setPageInjections($aInjections)
+    {
+        if(empty($aInjections) || !is_array($aInjections))
+            return;
+
+        foreach($aInjections as $sName => $sValue)
+            $this->addInjection('injection_' . $sName, 'text', $sValue);
+    }
+    
     /**
      * Set page content for some variable.
      * @param string $sVar     name of content variable

+ 3 - 0
install/sql/system.sql

@@ -4645,6 +4645,9 @@ CREATE TABLE IF NOT EXISTS `sys_objects_page` (
   `meta_robots` varchar(255) NOT NULL,
   `cache_lifetime` int(11) NOT NULL DEFAULT '0',
   `cache_editable` tinyint(4) NOT NULL DEFAULT '1',
+  `inj_head` text NOT NULL,
+  `inj_footer` text NOT NULL,
+  `meta_description` text NOT NULL,
   `deletable` tinyint(1) NOT NULL,
   `override_class_name` varchar(255) NOT NULL,
   `override_class_file` varchar(255) NOT NULL,

+ 5 - 0
modules/boonex/english/data/langs/system/en.xml

@@ -473,6 +473,8 @@
 	<string name="_adm_bp_dsc_block_title"><![CDATA[Short name for the block, visible in block header.]]></string>
 	<string name="_adm_bp_dsc_block_visible_for_levels"><![CDATA[Select user levels that can see this block]]></string>
 	<string name="_adm_bp_dsc_page_cache_lifetime"><![CDATA[Store page in cache for this number of seconds]]></string>
+        <string name="_adm_bp_dsc_page_inj_footer"><![CDATA[Just before BODY tag]]></string>
+        <string name="_adm_bp_dsc_page_inj_head"><![CDATA[In HEAD tag]]></string>
 	<string name="_adm_bp_dsc_page_meta_description"><![CDATA[Use 10-50 words to tell search engines what the page is about.]]></string>
 	<string name="_adm_bp_dsc_page_meta_keywords"><![CDATA[Use 5-10 keywords, separated by comma, associated with page content.]]></string>
 	<string name="_adm_bp_dsc_page_meta_robots"><![CDATA[Standard commands for search engine robots. Example: noindex, nofollow.]]></string>
@@ -501,6 +503,7 @@
 	<string name="_adm_bp_err_save"><![CDATA[Cannot save or nothing was changed.]]></string>
 	<string name="_adm_bp_mi_page_cache"><![CDATA[Cache]]></string>
 	<string name="_adm_bp_mi_page_cover"><![CDATA[Cover]]></string>
+        <string name="_adm_bp_mi_page_injections"><![CDATA[Injections]]></string>
 	<string name="_adm_bp_mi_page_layout"><![CDATA[Layout]]></string>
 	<string name="_adm_bp_mi_page_options"><![CDATA[Options]]></string>
 	<string name="_adm_bp_mi_page_seo"><![CDATA[SEO]]></string>
@@ -546,6 +549,8 @@
         <string name="_adm_bp_txt_page_cover_1"><![CDATA[Enabled for all]]></string>
         <string name="_adm_bp_txt_page_cover_2"><![CDATA[Enabled for visitors only]]></string>
         <string name="_adm_bp_txt_page_cover_3"><![CDATA[Enabled for members only]]></string>
+        <string name="_adm_bp_txt_page_inj_footer"><![CDATA[In Footer]]></string>
+        <string name="_adm_bp_txt_page_inj_head"><![CDATA[In Head]]></string>
 	<string name="_adm_bp_txt_page_layout"><![CDATA[Layout]]></string>
 	<string name="_adm_bp_txt_page_layout_empty"><![CDATA[Select Layout...]]></string>
 	<string name="_adm_bp_txt_page_meta_description"><![CDATA[Page (Meta) Description]]></string>

+ 5 - 0
modules/boonex/russian/data/langs/system/ru.xml

@@ -473,6 +473,8 @@
 	<string name="_adm_bp_dsc_block_title"><![CDATA[Короткое название для блока, отображаемое в заголовке блока.]]></string>
 	<string name="_adm_bp_dsc_block_visible_for_levels"><![CDATA[Выбрать уровни пользователей, которые могут видеть этот блок]]></string>
 	<string name="_adm_bp_dsc_page_cache_lifetime"><![CDATA[Сохранять страницу в кэше в течение данного количества секунд]]></string>
+        <string name="_adm_bp_dsc_page_inj_footer"><![CDATA[Перед тэгом BODY]]></string>
+        <string name="_adm_bp_dsc_page_inj_head"><![CDATA[Внутри тэга HEAD]]></string>
 	<string name="_adm_bp_dsc_page_meta_description"><![CDATA[Используйте 10-50 слов, чтобы описать назначение страницы для поисковых машин.]]></string>
 	<string name="_adm_bp_dsc_page_meta_keywords"><![CDATA[Используйте 5-10 ключевых слов, разделённых запятыми, связанных с содержимым страницы.]]></string>
 	<string name="_adm_bp_dsc_page_meta_robots"><![CDATA[Стандартные команды для поисковых роботов. Например: noindex, nofollow.]]></string>
@@ -501,6 +503,7 @@
 	<string name="_adm_bp_err_save"><![CDATA[Невозможно сохранить или ничего не изменилось.]]></string>
 	<string name="_adm_bp_mi_page_cache"><![CDATA[Кэш]]></string>
 	<string name="_adm_bp_mi_page_cover"><![CDATA[Обложка]]></string>
+        <string name="_adm_bp_mi_page_injections"><![CDATA[Вставки]]></string>
 	<string name="_adm_bp_mi_page_layout"><![CDATA[Отображение]]></string>
 	<string name="_adm_bp_mi_page_options"><![CDATA[Опции]]></string>
 	<string name="_adm_bp_mi_page_seo"><![CDATA[Оптимизация для поисковых машин]]></string>
@@ -546,6 +549,8 @@
         <string name="_adm_bp_txt_page_cover_1"><![CDATA[Включен для всех]]></string>
         <string name="_adm_bp_txt_page_cover_2"><![CDATA[Включен только для гостей]]></string>
         <string name="_adm_bp_txt_page_cover_3"><![CDATA[Включен только для пользователей]]></string>
+        <string name="_adm_bp_txt_page_inj_footer"><![CDATA[В основание]]></string>
+        <string name="_adm_bp_txt_page_inj_head"><![CDATA[В заголовок]]></string>
 	<string name="_adm_bp_txt_page_layout"><![CDATA[Отображение]]></string>
 	<string name="_adm_bp_txt_page_layout_empty"><![CDATA[Выбрать отображение...]]></string>
 	<string name="_adm_bp_txt_page_meta_description"><![CDATA[Мета-описание страницы]]></string>

+ 2 - 0
studio/classes/BxDolStudioBuilderPageQuery.php

@@ -133,6 +133,8 @@ class BxDolStudioBuilderPageQuery extends BxDolStudioPageQuery
                 `tp`.`meta_robots` AS `meta_robots`,
                 `tp`.`cache_lifetime` AS `cache_lifetime`,
                 `tp`.`cache_editable` AS `cache_editable`,
+                `tp`.`inj_head` AS `inj_head`,
+                `tp`.`inj_footer` AS `inj_footer`,
                 `tp`.`deletable` AS `deletable`,
                 `tp`.`override_class_name` AS `override_class_name`,
                 `tp`.`override_class_file` AS `override_class_file`" . $sSelectClause . "

+ 56 - 5
studio/template/scripts/BxBaseStudioBuilderPage.php

@@ -46,14 +46,15 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
         'layout_id' => 'adm-bpl-',
     );
 
-	protected $aPageSettings = array(
-		array('name' => 'options', 'title' => '_adm_bp_mi_page_options', 'active' => 1),
-		array('name' => 'cover', 'title' => '_adm_bp_mi_page_cover', 'active' => 0),
+    protected $aPageSettings = array(
+        array('name' => 'options', 'title' => '_adm_bp_mi_page_options', 'active' => 1),
+        array('name' => 'cover', 'title' => '_adm_bp_mi_page_cover', 'active' => 0),
         array('name' => 'layout', 'title' => '_adm_bp_mi_page_layout', 'active' => 0),
         array('name' => 'visibility', 'title' => '_adm_bp_mi_page_visibility', 'active' => 0),
         array('name' => 'cache', 'title' => '_adm_bp_mi_page_cache', 'active' => 0),
-        array('name' => 'seo', 'title' => '_adm_bp_mi_page_seo', 'active' => 0)
-	);
+        array('name' => 'seo', 'title' => '_adm_bp_mi_page_seo', 'active' => 0),
+        array('name' => 'injections', 'title' => '_adm_bp_mi_page_injections', 'active' => 0)
+    );
 
     function __construct($sType = '', $sPage = '')
     {
@@ -1327,6 +1328,56 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
     	return $this->getSettingsSeo($aPage, $bCreate, true);
     }
 
+    protected function getSettingsInjections($aPage = array(), $bCreate = true, $bInputsOnly = false)
+    {
+        $aForm = array(
+            'form_attrs' => array(
+                'id' => 'adm-bp-injections-seo',
+            ),
+            'params' => array (
+                'remove_form' => '1',
+                'csrf' => array(
+                    'disable' => true
+                )
+            ),
+            'inputs' => array (
+                'inj_head' => array(
+                    'type' => 'textarea',
+                    'name' => 'inj_head',
+                    'caption' => _t('_adm_bp_txt_page_inj_head'),
+                    'info' => _t('_adm_bp_dsc_page_inj_head'),
+                    'value' => isset($aPage['inj_head']) ? $aPage['inj_head'] : '',
+                    'code' => 1,
+                    'db' => array (
+                        'pass' => 'XssHtml',
+                    ),
+                ),
+                'inj_footer' => array(
+                    'type' => 'textarea',
+                    'name' => 'inj_footer',
+                    'caption' => _t('_adm_bp_txt_page_inj_footer'),
+                    'info' => _t('_adm_bp_dsc_page_inj_footer'),
+                    'value' => isset($aPage['inj_footer']) ? $aPage['inj_footer'] : '',
+                    'code' => 1,
+                    'db' => array (
+                        'pass' => 'XssHtml',
+                    ),
+                )
+            )
+        );
+
+        if($bInputsOnly)
+            return $aForm['inputs'];
+
+        $oForm = new BxTemplStudioFormView($aForm);
+        return $oForm->getCode();
+    }
+
+    protected function getSettingsInjectionsFields($aPage = array(), $bCreate = true)
+    {
+    	return $this->getSettingsInjections($aPage, $bCreate, true);
+    }
+
     protected function getBlockIcon($aBlock)
     {
         $sIcon = $sIconUrl = "";