php – 如何在Prestashop中为CMS页面添加特色图像
发布时间:2020-12-13 17:48:47 所属栏目:PHP教程 来源:网络整理
导读:我想在后端为我在Prestashop中添加的每个CMS页面添加一个图像,就像我们在Wordpress中为帖子/页面添加特色图像一样. 我在prestashop中找不到任何支持此功能的代码/模块. 解决方法 这是可能的,但并不简单.以下是将图像上载到CMS页面模块所需执行的步骤.这种方
我想在后端为我在Prestashop中添加的每个CMS页面添加一个图像,就像我们在Wordpress中为帖子/页面添加特色图像一样.
我在prestashop中找不到任何支持此功能的代码/模块. 解决方法
这是可能的,但并不简单.以下是将图像上载到CMS页面模块所需执行的步骤.这种方法不是在PrestaShop中实现这一点的最优雅的方法,但我希望它可以帮助您前进.
步骤1,更新模型,使其包含图像: 首先将’classes / CMS.php’覆盖为’override / classes / CMS.php’. class CMS extends CMSCore { // add a public field to store the CMS image public $CMS_IMG; /** * @see ObjectModel::$definition */ public static $definition = array( 'table' => 'cms','primary' => 'id_cms','multilang' => true,'fields' => array( 'id_cms_category' => array('type' => self::TYPE_INT,'validate' => 'isUnsignedInt'),'position' => array('type' => self::TYPE_INT),'active' => array('type' => self::TYPE_BOOL),// Lang fields 'meta_description' => array('type' => self::TYPE_STRING,'lang' => true,'validate' => 'isGenericName','size' => 255),'meta_keywords' => array('type' => self::TYPE_STRING,'meta_title' => array('type' => self::TYPE_STRING,'required' => true,'size' => 128),'content' => array('type' => self::TYPE_HTML,'validate' => 'isString','size' => 3999999999999),// add one image per page 'CMS_IMG' => array('type' => self::TYPE_STRING,),); } 步骤2,实现在后台上传图像所需的代码: 覆盖’override / controllers / admin / AdminCmsController.php’中的’controllers / admin / AdminCmsController.php’ class AdminCmsController extends AdminCmsControllerCore { public function renderForm() { $this->display = 'edit'; $this->toolbar_btn['save-and-preview'] = array( 'href' => '#','desc' => $this->l('Save and preview') ); $this->initToolbar(); if (!$this->loadObject(true)) return; $categories = CMSCategory::getCategories($this->context->language->id,false); $html_categories = CMSCategory::recurseCMSCategory($categories,$categories[0][1],1,$this->getFieldValue($this->object,'id_cms_category'),1); // Add code to get image url $image_url = ''; $imgName = $this->getImageValue($this->object); if($imgName) { $image = _PS_IMG_DIR_ . 'cms/' . $imgName; $image_url = ImageManager::thumbnail($image,$this->table.'_'.(int)$this->object->id.'.'.$this->imageType,350,$this->imageType,true,true); } $this->fields_form = array( 'tinymce' => true,'legend' => array( 'title' => $this->l('CMS Page'),'image' => '../img/admin/tab-categories.gif' ),'input' => array( // custom template array( 'type' => 'select_category','label' => $this->l('CMS Category'),'name' => 'id_cms_category','options' => array( 'html' => $html_categories,array( 'type' => 'text','label' => $this->l('Meta title:'),'name' => 'meta_title','id' => 'name',// for copy2friendlyUrl compatibility 'lang' => true,'class' => 'copy2friendlyUrl','hint' => $this->l('Invalid characters:').' <>;=#{}','size' => 50 ),'label' => $this->l('Meta description'),'name' => 'meta_description','size' => 70 ),array( 'type' => 'tags','label' => $this->l('Meta keywords'),'name' => 'meta_keywords','size' => 70,'desc' => $this->l('To add "tags" click in the field,write something,then press "Enter"') ),'label' => $this->l('Friendly URL'),'name' => 'link_rewrite','hint' => $this->l('Only letters and the minus (-) character are allowed') ),array( 'type' => 'textarea','label' => $this->l('Page content'),'name' => 'content','autoload_rte' => true,'rows' => 5,'cols' => 40,'hint' => $this->l('Invalid characters:').' <>;=#{}' ),/* Add an fileupload component to the form */ array( 'type' => 'file','label' => $this->l('Page image'),'name' => 'CMS_IMG','desc' => $this->l('Upload an image for this page'),'display_image' => true,'image' => $image_url ? $image_url : false,array( 'type' => 'radio','label' => $this->l('Displayed:'),'name' => 'active','required' => false,'class' => 't','is_bool' => true,'values' => array( array( 'id' => 'active_on','value' => 1,'label' => $this->l('Enabled') ),array( 'id' => 'active_off','value' => 0,'label' => $this->l('Disabled') ) ),'submit' => array( 'title' => $this->l(' Save '),'class' => 'button' ) ); if (Shop::isFeatureActive()) { $this->fields_form['input'][] = array( 'type' => 'shop','label' => $this->l('Shop association:'),'name' => 'checkBoxShopAsso',); } $this->tpl_form_vars = array( 'active' => $this->object->active ); return AdminControllerCore::renderForm(); } public function postProcess() { $languages = Language::getLanguages(false); $update_images_values = false; foreach ($languages as $lang) { if (isset($_FILES['CMS_IMG']) && isset($_FILES['CMS_IMG']['tmp_name']) && !empty($_FILES['CMS_IMG']['tmp_name'])) { if ($error = ImageManager::validateUpload($_FILES['CMS_IMG'],4000000)) return $error; else { $ext = substr($_FILES['CMS_IMG']['name'],strrpos($_FILES['CMS_IMG']['name'],'.') + 1); $file_name = md5($_FILES['CMS_IMG']['name']).'.'.$ext; if (!move_uploaded_file($_FILES['CMS_IMG']['tmp_name'],_PS_IMG_DIR_ .'cms'.DIRECTORY_SEPARATOR.$file_name)) return Tools::displayError($this->l('An error occurred while attempting to upload the file.')); else { $values['CMS_IMG'][$lang['id_lang']] = $file_name; } } $update_images_values = true; $cms = new CMS((int)Tools::getValue('id_cms')); $cms->CMS_IMG = $file_name; $cms->update(); } } parent::postProcess(); } public function getImageValue() { $db = Db::getInstance(); $sql = 'SELECT CMS_IMG FROM '._DB_PREFIX_.'cms_lang WHERE id_cms = ' . $this->object->id; return $db->getValue($sql); } } 第3步,实现前端的代码 覆盖’override / controllers / front / CmsController.php’中的’controllers / front / CmsController.php’ class CmsController extends CmsControllerCore { /** * Assign template vars related to page content * @see CmsControllerCore::initContent() */ public function initContent() { if(!empty($this->cms->CMS_IMG)) { $this->context->smarty->assign('cms_image',_PS_IMG_ . 'cms/' . $this->cms->CMS_IMG); } parent::initContent(); } } 第4步,在模板中使用您的图像 现在你可以,例如在cms.tpl中使用以下代码: {if $cms_image != ''} <img src="{$cms_image}"> {/if} 基于:https://www.prestashop.com/forums/topic/141903-add-custom-field-to-cms-module/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |