如何在 Magento 中重新加载块?

Posted

技术标签:

【中文标题】如何在 Magento 中重新加载块?【英文标题】:How to reload block in Magento? 【发布时间】:2016-02-27 02:48:06 【问题描述】:

我正在为 Magento 开发一个圣诞节模块。 每天都会在网站的索引页面上出现一个弹出窗口。 此弹出窗口将包含一张图片和一个链接。

为了加载弹出窗口,我定义了要使用的 css (module.phtml):

<?php
    $today = explode(".",date("d.m.y")); 
    $month = $today[1];
    $day = $today[0];
    $file = 'POP UP '.$day.'.jpg';      
    $class = 'block block-AdventCalendar'.$day; 
?>

<div class="<?php echo $class ?>">
</div>

CSS 文件 (app-base.css) 中的示例:

.block-AdventCalendar1 
 background-image: url('../images/popupAdvent/POP UP 1.jpg');
 background-size: 100% 100%;
 color: #fff;
 margin: 0;
 height:350px;
 width :700px;

这段代码可以正常工作,但是当时间发生变化时,Magento 会加载错误的 CSS 类。 为了显示正确的图像,我必须每天清除 Magento 缓存。

但是,当我修改 phtml 文件中的某些内容时,更改会立即显示,只有内联 CSS 不会重新加载。

有人想强制 phtml 加载正确的 css 吗?

【问题讨论】:

【参考方案1】:

问题不是由 CSS 引起的。 如果我更改它或 phtml,所有更改都是立即的。

只有 div 类保持不变

<div class="<?php echo $class ?>">

【讨论】:

【参考方案2】:

您也可以尝试 javascript 替代方案:

<script>
  var dateObj = new Date();
  var month = dateObj.getUTCMonth() + 1; //months from 1-12
  var day = dateObj.getUTCDate();
  var element = document.getElementById('your_div_id');

  if (element) 
    element.className += element.className ? ' block-AdventCalendar'+day : 'block-AdventCalendar'+day;
  
</script>

在要添加类的 div 之后添加它。另外,给你的 div 一个唯一的 ID (&lt;div id="your_div_id"&gt;...&lt;/div&gt;)

【讨论】:

感谢亚历克斯的回答。我试过用JS,probème是一样的。所有 phtml 文件都重新加载,除了这一行,而缓存不为空。 这很奇怪。 Javascript 在浏览器中执行,缓存对它几乎没有影响:/【参考方案3】:

尝试使用这个:

Mage::app()->cleanCache();

在代码加载后清除 Magento 缓存。

【讨论】:

以上是关于如何在 Magento 中重新加载块?的主要内容,如果未能解决你的问题,请参考以下文章

在 Magento 1.8.1 中编辑/自定义购物车块

在 Magento 中,块如何从模型中获取数据?

Magento:添加了捆绑项目,但重新加载时它们是空的

如何在magento管理站点块中翻译变量

如何在类别产品列表底部的 magento 2.1.8 中移动静态块

Magento 2 - 如何在另一个 phtml 文件、xml 布局、静态块和 cms 页面中调用自定义 phtml 文件?