Prestashop:禁用联系表

Prestashop: Disable contact form

我想在我的 prestashop 安装中禁用联系表单,但是没有插件可以这样做。有什么建议吗?

取决于您所说的禁用联系表单的意思,但这里有几种可能性。

  1. 修改核心触点控制器(不推荐,因为更新 Prestashop 时会丢失自定义代码)

打开文件 controllers/front/ContactController.php 并在 ContactControllerCode class.

中添加此代码
public function init()
{
    Tools::redirect('pagenotfound'); // redirect contact page to 404 page
}
  1. 覆盖接触控制器

创建一个新文件ContactController.php并将其放入文件夹overrides/controllers/front/并添加以下代码

class ContactController extends ContactControllerCore {
    public function init()
    {
        Tools::redirect('pagenotfound'); // redirect contact page to 404 page
    }
}
  1. 创建一个小模块

在文件夹 modules 中创建一个新目录 contactpagedisabler 并在里面创建一个文件 contactpagedisabler.php 并将此代码放入

class ContactPageDisabler extends Module 
{
    public function __construct() 
    {
        $this->name = 'contactpagedisabler';
        $this->tab = 'front_office_features';
        $this->version = '1.0';
        $this->author = 'whatever';

        parent::__construct();

        $this->displayName = $this->l('Contact page disabler');
        $this->description = $this->l('Disables contact page.');
    }

    public function install() 
    {
        return parent::install() && $this->registerHook('actionDispatcher');
    }

    // hook runs just after controller has been instantiated
    public function hookActionDispatcher($params) 
    {
        if ($params['controller_type'] === 1 && $params['controller_class'] === 'ContactController') {
            Tools::redirect('pagenotfound'); // redirect contact page to 404 page
        }
    }
}

然后从后台安装这个模块。

第二个选项最简单,不会干扰核心文件。

第三个选项对于这么小的东西可能有点矫枉过正,但它不需要覆盖,如果您或商店经理需要返回联系页面,他可以从后台禁用该模块。 该模块也可以是带有配置页面的 expanded/modified,例如,您可以在其中获取商店中所有页面的列表,并让用户决定要 enable/disable 等

2018 年 4 月更新

忘记前两个选项,使用第三个。修改您的商店时始终使用模块(如果可能)。

如果你只想阻止联系表单但你想显示联系页面你可以输入 override\controllers\front\ContactController.php:

<?php
class ContactController extends ContactControllerCore
{
 public function postProcess()
 {
  if (Tools::isSubmit('submitMessage'))
   {die('Form disabled');}
  else 
   parent::postProcess();
  //return null;

 }
 
}
这将禁用发送邮件的能力。

然后您可以从主题中剪切联系表:/themes/YOUR-THEME/contact-form.tpl 根本不显示联系表

在此之后您必须删除文件 /cache/class_index。php 以在 prestashop 中刷新 类。

无需覆盖也可以实现 Barto 的解决方案。

创建另一个模块contactformdisabler

class ContactFormDisabler extends Module 
{
    public function __construct() 
    {
        $this->name = 'contactformdisabler';
        $this->tab = 'front_office_features';
        $this->version = '1.0';
        $this->author = 'whatever';

        parent::__construct();

        $this->displayName = $this->l('Contact form disabler');
        $this->description = $this->l('Disables contact form submission.');
    }

    public function install() 
    {
        return parent::install() && $this->registerHook('actionDispatcher');
    }

    public function hookActionDispatcher($params) 
    {
        if ($params['controller_type'] === 1 
            && $params['controller_class'] === 'ContactController'
            && Tools::isSubmit('submitMessage')) {
               die('Contact form submission disabled');
        }
    }
}