在OpenCart 3中为开发禁用模板缓存

22

我正在修改OpenCart 3的主题模板。由于模板缓存,我每次都需要清除“storage/cache”目录下的缓存。在开发过程中频繁地进行工作和预览更改时,这非常令人困扰。请提供一些解决方案,我们如何根据生产和开发环境配置缓存。

注意:我已经在网上搜索过解决方案,但是没有与模板缓存相关的解决方案。虽然有一些可以禁用图像缓存的解决方案,但“图像缓存”和“模板缓存”是Opencart提供的不同功能。


4
不,这不是重复的,图像缓存是另一回事,在开发过程中并不会引起恐慌。 - Rajat Jain
完全正确。@RajatJain - HDP
你使用的是哪个确切的版本?我使用的是3.0.0.0,而且我认为模板缓存已经关闭了。 - Scott C Wilson
在Opencart 3.0.2.0版本中,您可以禁用缓存。 - Bipul Roy
8个回答

47

你可能需要升级到更新的OpenCart3版本-第一个版本(3.0.0.0)没有在图形用户界面中完成此操作的方法。

更近期的版本,例如3.0.2.0,在管理仪表板上有一个齿轮。点击齿轮,您将获得禁用缓存的选项。

输入图片描述


有时候如果在控制器和视图文件中进行了更改,则需要从缓存文件夹中删除。使用ftp。因为opencart最新版本将所有缓存都放在工作目录之外。 - Zohaib Yunis

6
另一种方法是: 打开 system\library\template\Twig\Cache\Filesystem.php 文件,找到以下代码行。
public function load($key)
{
    if (file_exists($key)) {
        @include_once $key;
    }
}

像下面的代码一样注释掉:

public function load($key)
{
    // if (file_exists($key)) {
    //      @include_once $key;
    // }
}

一旦开发完成,您需要删除注释,这将清除twig模板缓存并重新创建。


这个可以正常工作!只是不要忘记在结尾处删除注释!谢谢 @rupak-nepali - Stavros
你是救命恩人 :) +1 - hassanrazadev
只有一个问题。当我直接在twig文件中进行更改时,它没有在前端显示,但我的代码在主题编辑器中显示。当我从那里保存后,它才会在前端显示。 - hassanrazadev

2

Opencart版本3.0.2.0 我遇到了同样的问题,尝试在主题编辑器或实际的原始twig文件中工作,经过一两个小时的尝试,它奏效了。

删除主题编辑器中的更改并返回编辑实际的twig文件。 我的截图

最初的回答

如果您使用编辑器,那么请确保包含Randall提到的这一步骤。否则,所有其他选项,即“开发人员设置缓存关闭”都无关紧要。 - webbernaut

2

如果您有权限,您也可以直接从代码中进行此操作。通过ftp或cPanel转到下面的文件路径:

system\library\template\Twig\Environment.php

寻找

$this->debug = (bool) $options['debug'];

替换:

$this->debug = (bool) true;

1

我想你之前在路径为设计->主题编辑器中编辑了模板。

清空您的数据库中oc_theme数据表中的所有数据。


点赞了,这也是我的情况,不知道你为什么会被踩。 - BMH

1

Scott的回答是最好的,但如果由于版本原因不可用或者你想在程序中禁用它,你可以在twig渲染之前的任何地方执行以下操作:

$this->config->set('template_cache', false);

谢谢。我没注意到。 - egemen
$this 意味着这行代码必须在一个类或其继承中。那么这个类应该是哪个?或者更具体地说,应该在哪个文件中? - stackunderflow
$this->config 可以从任何控制器、模型和大多数库类中调用。对于控制器和模型,使用魔术方法 __get() 返回 $this->registry->get('config')。OP 在这里询问有关模板的问题,因此可以推断他们正在某个控制器内进行更改。 - But those new buttons though..

0
在OC 3.0.3.6中,如果您有一些Twig扩展,比如Twig管理器,在进行更改后,您应该在修改中选择该扩展并刷新右上角的推送按钮。
附言:为了找到这个问题,我浪费了整整一天的时间,希望能帮助到其他人。

0

这与Scott的答案类似,但仅限于数据库/后端。如果您无法依赖UI并且只能访问DB(就像我一样,我正在搞砸UI),则在设置表中搜索“developer_theme”key并将其设置为false或0。

UPDATE `oc_setting` SET `value` = '0' WHERE `oc_setting`.`key` = 'developer_theme';

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接