Prestashop:禁用联系表
Prestashop: Disable contact form
我想在我的 prestashop 安装中禁用联系表单,但是没有插件可以这样做。有什么建议吗?
取决于您所说的禁用联系表单的意思,但这里有几种可能性。
- 修改核心触点控制器(不推荐,因为更新 Prestashop 时会丢失自定义代码)
打开文件 controllers/front/ContactController.php
并在 ContactControllerCode
class.
中添加此代码
public function init()
{
Tools::redirect('pagenotfound'); // redirect contact page to 404 page
}
- 覆盖接触控制器
创建一个新文件ContactController.php
并将其放入文件夹overrides/controllers/front/
并添加以下代码
class ContactController extends ContactControllerCore {
public function init()
{
Tools::redirect('pagenotfound'); // redirect contact page to 404 page
}
}
- 创建一个小模块
在文件夹 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');
}
}
}
我想在我的 prestashop 安装中禁用联系表单,但是没有插件可以这样做。有什么建议吗?
取决于您所说的禁用联系表单的意思,但这里有几种可能性。
- 修改核心触点控制器(不推荐,因为更新 Prestashop 时会丢失自定义代码)
打开文件 controllers/front/ContactController.php
并在 ContactControllerCode
class.
public function init()
{
Tools::redirect('pagenotfound'); // redirect contact page to 404 page
}
- 覆盖接触控制器
创建一个新文件ContactController.php
并将其放入文件夹overrides/controllers/front/
并添加以下代码
class ContactController extends ContactControllerCore {
public function init()
{
Tools::redirect('pagenotfound'); // redirect contact page to 404 page
}
}
- 创建一个小模块
在文件夹 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');
}
}
}