Magento2.1.8访客订阅:邮箱已订阅时显示自定义提示信息
嘿,针对你在Magento 2.1.8里的访客订阅模块需求——用户重复用同一邮箱订阅时显示自定义提示“您已订阅,感谢您的支持”,我给你整理了两种实用方案,按需选择就行:
方案1:直接修改主题模板(快速上手)
这种方法适合不想折腾模块开发的场景,直接修改订阅模块的前端模板:
- 找到主题下的订阅模板文件:
app/design/frontend/[你的主题包]/[主题名]/Magento_Newsletter/templates/subscribe.phtml
如果你的主题没有这个文件,就从Magento核心模块复制一份到上述路径:vendor/magento/module-newsletter/view/frontend/templates/subscribe.phtml - 找到模板中处理成功提示的代码块,替换成以下内容:
<?php if ($block->getSuccessMessage()): ?> <?php $successMsg = $block->getSuccessMessage(); ?> <div class="message-success success message"> <?php // 检测是否是默认的重复订阅提示(默认提示含"already subscribed"关键词) if (strpos($successMsg, 'already subscribed') !== false) { /* @escapeNotVerified */ echo __('您已订阅,感谢您的支持'); } else { /* @escapeNotVerified */ echo $successMsg; } ?> </div> <?php endif; ?>
- 最后清理缓存生效:
php bin/magento cache:clean
方案2:自定义插件(规范持久)
如果希望修改不受主题更新影响,更符合Magento开发规范,推荐用插件重写消息逻辑:
- 创建自定义模块(假设模块名为
Vendor_NewsletterCustom)- 注册模块文件
app/code/Vendor/NewsletterCustom/etc/module.xml:
<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd"> <module name="Vendor_NewsletterCustom" setup_version="1.0.0"> <sequence> <module name="Magento_Newsletter"/> </sequence> </module> </config>- 模块注册文件
app/code/Vendor/NewsletterCustom/registration.php:
<?php \Magento\Framework\Component\ComponentRegistrar::register( \Magento\Framework\Component\ComponentRegistrar::MODULE, 'Vendor_NewsletterCustom', __DIR__ ); - 注册模块文件
- 配置插件
创建插件配置文件app/code/Vendor/NewsletterCustom/etc/frontend/di.xml:<?xml version="1.0"?> <config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd"> <type name="Magento\Newsletter\Controller\Subscriber\NewAction"> <plugin name="vendor_newslettercustom_subscriber_newaction" type="Vendor\NewsletterCustom\Plugin\SubscriberNewActionPlugin" /> </type> </config> - 编写插件逻辑
创建插件类文件app/code/Vendor/NewsletterCustom/Plugin/SubscriberNewActionPlugin.php:<?php namespace Vendor\NewsletterCustom\Plugin; use Magento\Newsletter\Controller\Subscriber\NewAction; use Magento\Framework\Message\ManagerInterface; class SubscriberNewActionPlugin { protected $messageManager; public function __construct(ManagerInterface $messageManager) { $this->messageManager = $messageManager; } public function afterExecute(NewAction $subject, $result) { // 获取所有成功类型的消息 $successMessages = $this->messageManager->getMessages()->getItemsByType('success'); foreach ($successMessages as $msg) { // 判断是否是重复订阅的默认提示 if (strpos($msg->getText(), 'already subscribed') !== false) { // 删除默认消息,添加自定义提示 $this->messageManager->getMessages()->deleteMessageByIdentifier($msg->getIdentifier()); $this->messageManager->addSuccessMessage(__('您已订阅,感谢您的支持')); break; } } return $result; } } - 启用模块并清理缓存
php bin/magento module:enable Vendor_NewsletterCustom php bin/magento setup:upgrade php bin/magento cache:clean
两种方案都能完美实现你的需求:方案1适合快速定制,方案2更利于长期维护,不会因为主题升级丢失修改内容。
内容的提问来源于stack exchange,提问作者Awais Khan
相关产品推荐
相关产品推荐

