AntonLV 10 ani în urmă
părinte
comite
464a00dbd3

+ 9 - 3
inc/classes/BxDolTemplate.php

@@ -1155,9 +1155,15 @@ class BxDolTemplate extends BxDol implements iBxDolSingleton
             		break;
 
             	$bCover = true;
-            	if(bx_get('i') !== false)
-					$bCover = BxDolPage::getObjectInstanceByURI(bx_process_input(bx_get('i')))->isPageCover();
-                
+            	if(bx_get('i') !== false) {
+            		$oPage = BxDolPage::getObjectInstanceByURI(bx_process_input(bx_get('i')));
+
+					$bCover = $oPage->isPageCover();
+					$aCover = $oPage->getPageCoverImage();
+					if($bCover && !empty($aCover))
+						$oCover->setCoverImageUrl($aCover);
+            	}
+
                 $sRet = $bCover ? $oCover->display() : $oCover->displayEmpty();
                 break;
             case 'dol_images':

+ 1 - 0
install/sql/system.sql

@@ -3276,6 +3276,7 @@ CREATE TABLE IF NOT EXISTS `sys_objects_page` (
   `title` varchar(255) NOT NULL,
   `module` varchar(32) NOT NULL,
   `cover` tinyint(4) NOT NULL DEFAULT '1',
+  `cover_image` int(11) NOT NULL DEFAULT '0',
   `layout_id` int(11) NOT NULL,
   `visible_for_levels` int(11) NOT NULL DEFAULT '2147483647',
   `visible_for_levels_editable` tinyint(4) NOT NULL DEFAULT '1',

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

@@ -480,6 +480,7 @@
 	<string name="_adm_bp_err_page_visible_for_levels"><![CDATA[Visibility setting are determined by custom code or not applicable here.]]></string>
 	<string name="_adm_bp_err_save"><![CDATA[Cannot save]]></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_layout"><![CDATA[Layout]]></string>
 	<string name="_adm_bp_mi_page_options"><![CDATA[Options]]></string>
 	<string name="_adm_bp_mi_page_seo"><![CDATA[SEO]]></string>
@@ -519,6 +520,7 @@
 	<string name="_adm_bp_txt_new_block_popup"><![CDATA[Add New Block]]></string>
 	<string name="_adm_bp_txt_page_cache_lifetime"><![CDATA[Cache]]></string>
 	<string name="_adm_bp_txt_page_cover"><![CDATA[Cover]]></string>
+	<string name="_adm_bp_txt_page_cover_image"><![CDATA[Custom Cover]]></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>

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

@@ -480,6 +480,7 @@
 	<string name="_adm_bp_err_page_visible_for_levels"><![CDATA[Настройки видимости определяются индивидуальным кодом или не применимы в данном случае.]]></string>
 	<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_layout"><![CDATA[Отображение]]></string>
 	<string name="_adm_bp_mi_page_options"><![CDATA[Опции]]></string>
 	<string name="_adm_bp_mi_page_seo"><![CDATA[Оптимизация для поисковых машин]]></string>
@@ -519,6 +520,7 @@
 	<string name="_adm_bp_txt_new_block_popup"><![CDATA[Добавить новый Блок]]></string>
 	<string name="_adm_bp_txt_page_cache_lifetime"><![CDATA[Кэш]]></string>
 	<string name="_adm_bp_txt_page_cover"><![CDATA[Обложка]]></string>
+	<string name="_adm_bp_txt_page_cover_image"><![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>

+ 1 - 0
studio/classes/BxDolStudioBuilderPageQuery.php

@@ -80,6 +80,7 @@ class BxDolStudioBuilderPageQuery extends BxDolStudioPageQuery
                 `tp`.`title` AS `title`,
                 `tp`.`module` AS `module`,
                 `tp`.`cover` AS `cover`,
+                `tp`.`cover_image` AS `cover_image`,
                 `tp`.`layout_id` AS `layout_id`,
                 `tp`.`visible_for_levels` AS `visible_for_levels`,
                 `tp`.`visible_for_levels_editable` AS `visible_for_levels_editable`,

+ 0 - 0
studio/template/bp_form_ghost_template.html → studio/template/bp_fgt_attachments.html


+ 11 - 0
studio/template/bp_fgt_cover.html

@@ -0,0 +1,11 @@
+<div id="bx-uploader-file-{storage_object}-{file_id}" class="bx-uploader-ghost bx-def-margin-sec-top bx-clearfix">
+    <input type="hidden" name="__name__" value="{file_id}" />
+    <div class="bx-ug-icon bx-def-margin-sec-right">
+        <img src="{file_icon}" class="bx-def-round-corners bx-base-text-icon bx-base-text-icon-{file_id}" />
+    </div>
+    <div class="bx-ug-content">
+		<div>
+	        <a class="bx-btn bx-btn-small bx-def-margin-sec-right" href="javascript:void(0);" onclick="javascript: {js_instance_name}.deleteGhost('{file_id}');"><bx_text:_sys_txt_form_entry_input_picture_delete /></a>
+		</div>
+    </div>
+</div>

+ 6 - 5
studio/template/css/builder_page.css

@@ -166,22 +166,23 @@ div.adm-bp-edit-block-form {
 	margin-top: 0px;
 }
 
-div.adm-bp-edit-block-form .bx-uploader-ghost .bx-ug-icon {
+/*--- Uploader Ghost in Popup style ---*/
+div.bx-popup .bx-uploader-ghost .bx-ug-icon {
     float: left;
 }
 
-div.adm-bp-edit-block-form .bx-uploader-ghost .bx-ug-icon img {
+div.bx-popup .bx-uploader-ghost .bx-ug-icon img {
     max-height: 8rem;
 }
-div.adm-bp-edit-block-form .bx-uploader-ghost .bx-btn {
+div.bx-popup .bx-uploader-ghost .bx-btn {
 	float: none;
 	display: inline-block;
 	vertical-align: top; 
 }
-div.adm-bp-edit-block-form .bx-ug-content input.bx-ug-url.bx-form-input-text {
+div.bx-popup .bx-uploader-ghost .bx-ug-content input.bx-ug-url.bx-form-input-text {
     width: 18.0rem;
 }
-div.adm-bp-edit-block-form .bx-ug-content input.bx-ug-dimension.bx-form-input-text {
+div.bx-popup .bx-uploader-ghost .bx-ug-content input.bx-ug-dimension.bx-form-input-text {
 	width: 4.0rem;
 }
 

+ 63 - 17
studio/template/scripts/BxBaseStudioBuilderPage.php

@@ -44,7 +44,8 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
     );
 
 	protected $aPageSettings = array(
-		array('name' => 'options', 'title' => '_adm_bp_mi_page_options', 'active' => 1),
+		array('name' => 'options', 'title' => '_adm_bp_mi_page_options', 'active' => 0),
+		array('name' => 'cover', 'title' => '_adm_bp_mi_page_cover', 'active' => 1),
         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),
@@ -376,7 +377,8 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
                 }
 
                 return array();
-            } else
+            } 
+            else
                 return array('msg' => _t('_adm_bp_err_save'));
         }
 
@@ -864,7 +866,7 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
     {
         $aForm = array(
             'form_attrs' => array(
-                'id' => 'adm-bp-settings-seo',
+                'id' => 'adm-bp-settings-options',
             ),
             'params' => array (
                 'remove_form' => '1',
@@ -917,17 +919,6 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
 						'disabled' => 'disabled'
 					),
 				),
-				'cover' => array(
-                    'type' => 'switcher',
-                    'name' => 'cover',
-                    'caption' => _t('_adm_bp_txt_page_cover'),
-                    'info' => '',
-                    'value' => '1',
-                    'checked' => $aPage['cover'] == '1',
-                    'db' => array (
-                        'pass' => 'Int',
-                    )
-                ),
             )
         );
 
@@ -967,11 +958,66 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
         return $oForm->getCode();
     }
 
-    protected function getSettingsOptionsFields($aPage = array(), $bCreate = true, $bInputsOnly = false)
+    protected function getSettingsOptionsFields($aPage = array(), $bCreate = true)
     {
     	return $this->getSettingsOptions($aPage, $bCreate, true);
     }
 
+	protected function getSettingsCover($aPage = array(), $bCreate = true, $bInputsOnly = false)
+    {
+        $aForm = array(
+            'form_attrs' => array(
+                'id' => 'adm-bp-settings-cover',
+            ),
+            'params' => array (
+                'remove_form' => '1',
+                'csrf' => array(
+                    'disable' => true
+                )
+            ),
+            'inputs' => array (
+				'cover' => array(
+                    'type' => 'switcher',
+                    'name' => 'cover',
+                    'caption' => _t('_adm_bp_txt_page_cover'),
+                    'info' => '',
+                    'value' => '1',
+                    'checked' => $aPage['cover'] == '1',
+                    'db' => array (
+                        'pass' => 'Int',
+                    )
+                ),
+				'cover_image' => array(
+					'type' => 'files',
+					'name' => 'cover_image',
+					'storage_object' => $this->sStorage,
+					'images_transcoder' => $this->sTranscoder,
+					'uploaders' => array ('sys_html5'),
+					'multiple' => false,
+					'content_id' => $aPage['id'],
+					'ghost_template' => BxDolStudioTemplate::getInstance()->parseHtmlByName('bp_fgt_cover.html', array(
+						'name' => 'cover_image',
+					)),
+					'caption' => _t('_adm_bp_txt_page_cover_image'),
+					'db' => array (
+                        'pass' => 'Int',
+                    )
+				)
+            )
+        );
+
+        if($bInputsOnly)
+            return $aForm['inputs'];
+
+        $oForm = new BxTemplStudioFormView($aForm);
+        return $oForm->getCode();
+    }
+
+    protected function getSettingsCoverFields($aPage = array(), $bCreate = true)
+    {
+    	return $this->getSettingsCover($aPage, $bCreate, true);
+    }
+
     protected function getSettingsLayout($aPage = array(), $bCreate = true, $bInputsOnly = false)
     {
         $sJsObject = $this->getPageJsObject();
@@ -1002,7 +1048,7 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
 
         $aForm = array(
             'form_attrs' => array(
-                'id' => 'adm-bp-settings-seo',
+                'id' => 'adm-bp-settings-layout',
             ),
             'params' => array (
                 'remove_form' => '1',
@@ -1307,7 +1353,7 @@ class BxBaseStudioBuilderPage extends BxDolStudioBuilderPage
 	 					'uploaders' => $this->aUploaders,
 						'multiple' => true,
 	 					'content_id' => $aBlock['id'],
-	 					'ghost_template' => BxDolStudioTemplate::getInstance()->parseHtmlByName('bp_form_ghost_template.html', array(
+	 					'ghost_template' => BxDolStudioTemplate::getInstance()->parseHtmlByName('bp_fgt_attachments.html', array(
                     		'js_object' => $this->getPageJsObject(),
                     		'name' => 'attachments',
 							'editor_id' => $this->aHtmlIds['edit_block_editor_id'],

+ 15 - 0
template/scripts/BxBasePage.php

@@ -16,6 +16,8 @@ require_once(BX_DIRECTORY_PATH_INC . 'design.inc.php');
 class BxBasePage extends BxDolPage
 {
     protected $_oTemplate;
+
+    protected $_sStorage; //--- Storage object for page's images like custom cover, HTML block attachments, etc.
     protected $_oPageCacheObject = null;
 
     public function __construct ($aObject, $oTemplate)
@@ -26,6 +28,8 @@ class BxBasePage extends BxDolPage
             $this->_oTemplate = $oTemplate;
         else
             $this->_oTemplate = BxDolTemplate::getInstance();
+
+		$this->_sStorage = 'sys_images';
     }
 
     /**
@@ -96,6 +100,17 @@ class BxBasePage extends BxDolPage
     	return (int)$this->_aObject['cover'] == 1;
     }
 
+	public function getPageCoverImage()
+    {
+    	if(empty($this->_aObject['cover_image']))
+    		return array();
+
+    	return array(
+    		'id' => (int)$this->_aObject['cover_image'], 
+    		'object' => $this->_sStorage
+    	);
+    }
+
     /**
      * Get block title.
      * @return string