magento2 - 最近查看的产品在自定义容器中被缓存而不更新
问题描述
我添加了 /etc/widget.xml 来调用最近查看的页脚容器。最近查看的块是显示但它应用了缓存,因此新查看的产品不会更新。
最近查看的部分正在更新,仅在刷新缓存后。
<widgets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Widget:etc/widget.xsd">
<widget id="catalog_recently_viewed" class="Magento\Catalog\Block\Widget\RecentlyViewed"
placeholder_image="Magento_Catalog::images/product_widget_viewed.gif">
<containers>
<container name="footer">
<template name="grid" value="grid" />
<template name="list" value="list" />
</container>
</containers>
</widget>
</widgets>
解决方案
我通过使用小部件和 cms 块概念解决了这个问题。由于小部件是通过 ajax 请求工作的,这就是小部件的强大功能!
Magento 2.2.7 版本
第一步:模块文件路径:root/app/Code/Faceless/RecentlyViewed/Setup/UpgradeData.php
<?php
namespace Faceless\RecentlyViewed\Setup;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\UpgradeDataInterface;
class UpgradeData implements UpgradeDataInterface
{
private $blockFactory;
public function __construct(
\Magento\Cms\Model\BlockFactory $blockFactory
) {
$this->blockFactory = $blockFactory;
}
public function upgrade(
ModuleDataSetupInterface $setup,
ModuleContextInterface $context
) {
$setup->startSetup();
$cmsblockModel = $this->blockFactory->create()->load(
'recently_viewed', 'identifier'
);
$cmsblockModel->getId() ? $cmsblockModel->delete() : '';
if (version_compare($context->getVersion(), '1.0.1') < 0) {
$cmsBlockData = [
'title' => 'Recently viewed',
'identifier' => 'recently_viewed',
'content' => '{{widget type='
. '"Magento\Catalog\Block\Widget\RecentlyViewed"'
. ' uiComponent="widget_recently_viewed" page_size="5" '
. 'show_attributes="name,image,price" show_buttons="add_to_cart"'
. ' template="product/widget/viewed/grid.phtml"}}',
'is_active' => 1,
'stores' => [0, 1, 2],
'sort_order' => 0
];
$this->blockFactory->create()->setData($cmsBlockData)->save();
}
$setup->endSetup();
}
}
第二步:模块文件路径:root/app/Code/Faceless/RecentlyViewed/view/frontend/layout/default.xml
<?xml version="1.0" ?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="footer">
<container name="footer.recent" as="footerRecent" htmlTag="div" htmlClass="recently-viewed-wrap" before="-">
<block class="Magento\Cms\Block\Block" name="Recentlyviewed">
<arguments>
<argument name="block_id" xsi:type="string">recently_viewed</argument>
</arguments>
</block>
</container>
</referenceContainer>
</body>
</page>
第三步:模块文件路径:root/app/Code/Faceless/RecentlyViewed/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="Faceless_RecentlyViewed" setup_version="1.0.1" schema_version="1.0.1">
<sequence>
<module name="Magento_Catalog" />
</sequence>
</module>
</config>
第四步:模块文件路径:root/app/Code/Faceless/RecentlyViewed/registration.php
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Faceless_RecentlyViewed',
__DIR__
);
推荐阅读
- pytorch - 在 GoogleColab 中导入 fastai
- python - 使用python将登录详细信息保存到json
- javascript - 我可以获得一个日志功能来忽略某些服务器通道类别吗?
- javascript - 从 Javascript 中的 XPATH 获取数组中的所有文档值/文本
- python - 更改后如何设置对象位置?
- excel - 如何根据时间和分组excel求和
- python - 如何将查找应用于标签图像(超过 256 个标签)?
- javascript - 错误:数据未定义。这是如何解决的?
- java - kotlin 中的数据类和内联类有什么区别?
- javascript - LocalStorage 对象未呈现