向 Prestashop 1.6 中的特定客户发送带有 BO link 的邮件给管理员
Send a mail to Admin with a BO link to specific customer in Prestashop 1.6
在 Prestashop 1.6 中,我必须从 FrontController 向商店管理员发送邮件。
这部分工作正常,但我在将 link 添加到特定客户的管理页面时遇到了问题。
我唯一想念的是管理目录的名称。我将能够解析和连接 PS_ADMIN_DIR
常量,但它在 FrontController 中不可用。
我有点卡在这里了。
这是代码:
$admin_customer_link =
_PS_BASE_URL_
.__PS_BASE_URI__
/* Missing the Administration directory name here */
.$this->context->link->getAdminLink('AdminCustomers', false)
."&id_customer=".(int)$customer->id."&viewcustomer";
我得到的输出:
http://127.0.0.1:8080/prestashop/index.php?controller=AdminCustomers&id_customer=2&viewcustomer
我需要的输出:
http://127.0.0.1:8080/prestashop/administration/index.php?controller=AdminCustomers&id_customer=2&viewcustomer
如有任何帮助,我们将不胜感激。
没有(标准的)方法可以从前端控制器知道管理文件夹,否则所有的安全措施都会冲进马桶:)。
你可以做的是从模块 'configuration' 或安装它时检索管理文件夹,并将其保存在某个地方,目前我建议进入数据库,但也许有更安全的模式.
类似于:
public function install()
{
// your stuff
$current_dir = $_SERVER['PHP_SELF']; // this give you the current dir (administration folder included)
$administration_folder = /* Clean your string with a string replace or preg */
Configuration::updateValue('PS_MYMOD_ADMIN_DIR', $administration_folder);
return true;
}
然后在您的前端控制器中通过以下方式检索它:
$adminfolder = Configuration::get('PS_MYMOD_ADMIN_DIR');
但是我希望您知道您正在通过电子邮件制造安全漏洞...
希望对您有所帮助
由于从前端使用管理目录名称并在电子邮件中向管理发送 link 出于安全目的并不是一个好主意,我选择以另一种方式实现。
我没有通过电子邮件将管理客户的页面 link 发送给网站管理员,而是创建了一个新的客户线程和消息。之后,我给客户服务发了一封电子邮件。因此,当他们登录后台时,他们会看到一条新通知,将他们引导至特定用户。
这是代码:
ModuleFrontController
// Create a new Customer Thread
$ct = new CustomerThread();
if (isset($customer->id)) {
$ct->id_customer = (int)$customer->id;
}
$ct->id_shop = (int)$this->context->shop->id;
$ct->id_contact = $contact->id;
$ct->id_lang = (int)$this->context->language->id;
$ct->email = $customer->email;
$ct->status = 'open';
$ct->token = Tools::passwdGen(12);
$ct->add();
// Add a new message to the Customer Thread
if ($ct->id) {
$cm = new CustomerMessage();
$cm->id_customer_thread = $ct->id;
$cm->message = $message;
$cm->ip_address = (int)ip2long(Tools::getRemoteAddr());
$cm->user_agent = $_SERVER['HTTP_USER_AGENT'];
$cm->add();
}
希望对遇到同样情况的人有所帮助。
在 Prestashop 1.6 中,我必须从 FrontController 向商店管理员发送邮件。
这部分工作正常,但我在将 link 添加到特定客户的管理页面时遇到了问题。
我唯一想念的是管理目录的名称。我将能够解析和连接 PS_ADMIN_DIR
常量,但它在 FrontController 中不可用。
我有点卡在这里了。
这是代码:
$admin_customer_link =
_PS_BASE_URL_
.__PS_BASE_URI__
/* Missing the Administration directory name here */
.$this->context->link->getAdminLink('AdminCustomers', false)
."&id_customer=".(int)$customer->id."&viewcustomer";
我得到的输出:
http://127.0.0.1:8080/prestashop/index.php?controller=AdminCustomers&id_customer=2&viewcustomer
我需要的输出:
http://127.0.0.1:8080/prestashop/administration/index.php?controller=AdminCustomers&id_customer=2&viewcustomer
如有任何帮助,我们将不胜感激。
没有(标准的)方法可以从前端控制器知道管理文件夹,否则所有的安全措施都会冲进马桶:)。
你可以做的是从模块 'configuration' 或安装它时检索管理文件夹,并将其保存在某个地方,目前我建议进入数据库,但也许有更安全的模式.
类似于:
public function install()
{
// your stuff
$current_dir = $_SERVER['PHP_SELF']; // this give you the current dir (administration folder included)
$administration_folder = /* Clean your string with a string replace or preg */
Configuration::updateValue('PS_MYMOD_ADMIN_DIR', $administration_folder);
return true;
}
然后在您的前端控制器中通过以下方式检索它:
$adminfolder = Configuration::get('PS_MYMOD_ADMIN_DIR');
但是我希望您知道您正在通过电子邮件制造安全漏洞...
希望对您有所帮助
由于从前端使用管理目录名称并在电子邮件中向管理发送 link 出于安全目的并不是一个好主意,我选择以另一种方式实现。
我没有通过电子邮件将管理客户的页面 link 发送给网站管理员,而是创建了一个新的客户线程和消息。之后,我给客户服务发了一封电子邮件。因此,当他们登录后台时,他们会看到一条新通知,将他们引导至特定用户。
这是代码:
ModuleFrontController
// Create a new Customer Thread
$ct = new CustomerThread();
if (isset($customer->id)) {
$ct->id_customer = (int)$customer->id;
}
$ct->id_shop = (int)$this->context->shop->id;
$ct->id_contact = $contact->id;
$ct->id_lang = (int)$this->context->language->id;
$ct->email = $customer->email;
$ct->status = 'open';
$ct->token = Tools::passwdGen(12);
$ct->add();
// Add a new message to the Customer Thread
if ($ct->id) {
$cm = new CustomerMessage();
$cm->id_customer_thread = $ct->id;
$cm->message = $message;
$cm->ip_address = (int)ip2long(Tools::getRemoteAddr());
$cm->user_agent = $_SERVER['HTTP_USER_AGENT'];
$cm->add();
}
希望对遇到同样情况的人有所帮助。