Prestashop 1.7在自定义模块的tpl上提交表单

问题描述 投票:0回答:1

我创建了自己的模块cus_avatar,用于上传客户头像。我已经制作了一个tpl文件“uploader.tpl”,其中包含我需要提交的表单,并附在客户的个人资料页面中。我如何发布此表单?

这是我的代码:

根/模块/ cus_avatar / cus_avatar.php:

<?php

if (!defined('_PS_VERSION_')) {
    exit;
}

class Cus_Avatar extends Module
{
    public function __construct()
    {
        // the module's details and construct codes here
    }

    public function install()
    {
        return parent::install()
            && $this->registerHook('header')
            && $this->registerHook('displayEpAvatar')
            && $this->registerHook('displayEpAvatarSidebar')
            && $this->installDb();
    }

    public function uninstall()
    {
        return parent::uninstall() && $this->uninstallDb();
    }

    protected function installDb(){

        $alterDb = "CREATE TABLE mydb."._DB_PREFIX_."avatar (
                        avatar_id INT NOT NULL AUTO_INCREMENT,
                        id_customer INT NULL,
                        avatar_path VARCHAR(255) NULL,
                        PRIMARY KEY (avatar_id)
                    ) ENGINE = MyISAM";

        return Db::getInstance()->execute($alterDb);
    }

    protected function uninstallDb(){
        $revertDb = "DROP TABLE "._DB_PREFIX_."avatar";
        return Db::getInstance()->execute($revertDb);
    }

    public function hookHeader($params)
    {
        $this->context->controller->addCss($this->_path.'assets/css/style.css', 'all');
        $this->context->controller->addJS($this->_path.'assets/js/script.js');
    }

    public function hookDisplayEpAvatar($params)
    {
        if(isset($_POST['submit_avatar']))
        {
            // THIS CODE DOESNT SEEM TO WORK
            var_dump("HELLO WORLD!");
            die();
        }

        return $this->display(__FILE__, 'views/templates/hook/uploader.tpl');
    }

    public function hookDisplayEpAvatarSideBar($params)
    {
    }
}

根/模块/ cus_avatar /视图/模板/钩/ uploader.tpl:

<form name="form_avatar" method="post">
    <div class="row">
        <div class="col-xs-12 plr30">
            <label class="mt20">PROFILE AVATAR</label>
        </div>
        <div class="col-xs-12 col-md-4 col-lg-3 plr30">
            <div class="avatar-container">
                <label class="avatar">
                    <input type="file" accept="image/*">
                </label>
            </div>
            <button type="submit" name="submit-btn">SUBMIT</button>
        </div>
        <div class="col-xs-12 col-md-8 col-lg-9">
            <small class="text-warning">Avatar is updated seperately from the rest of the form.</small>
        </div>
    </div>
</form>

//忽略这些文本,这些只是为了使描述足够长以便提交。快速的棕色狐狸跳过河岸附近的懒狗。

php prestashop prestashop-1.7
1个回答
1
投票

所以我找到了一种方法,如果有人有更好的方法这样做,请告诉我。

我在root / modules / cus_avatar / controllers / front /中创建了一个名为“default.php”的控制器。此控制器将处理后期处理,因此我必须使用getModuleLink将表单操作链接到此控制器。

在我的root / modules / cus_avatar / views / templates / hook / uploader.tpl中:

//first parameter is the module name, second is the controller name.
<form action="$link->getModuleLink('cus_avatar', 'default')" method="post">

在我的root / modules / cus_avatar / controllers / front / default.php中:

include_once(dirname(__FILE__).'../../../cus_avatar.php');

class cus_avatarDefaultModuleFrontController extends ModuleFrontController
{
    public function __construct()
    {
        parent::__construct();

        $this->context = Context::getContext();
    }

    public function initContent()
    {
        parent::initContent();

        if(isset($_POST['submit-btn']))
        {
//HANDLE THE POST/UPLOAD PROCESS HERE

        }
// after handling the post process imidiately kill the page to reduce further loaading and then redirect the page back to the page where you originally is, in my case it's index.php?controller=identity.
        die(Tools::redirect('index.php?controller=identity'));
    }
}

然后在我的cus_avatar.php上删除了这个部分:

    public function hookDisplayEpAvatar($params)
    {
// remove the if condition now since it has no use. 
            if(isset($_POST['submit_avatar']))
            {
                // THIS CODE DOESNT SEEM TO WORK
                var_dump("HELLO WORLD!");
                die();
            }

            return $this->display(__FILE__, 'views/templates/hook/uploader.tpl');
    }
© www.soinside.com 2019 - 2024. All rights reserved.