php – 如何在Prestashop中为CMS页面添加特色图像

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 如何在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'])
                &amp;& !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/

脚本宝典总结

以上是脚本宝典为你收集整理的php – 如何在Prestashop中为CMS页面添加特色图像全部内容,希望文章能够帮你解决php – 如何在Prestashop中为CMS页面添加特色图像所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。