You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCart 3.x中PHP转Twig求助:DOMDocument相关代码转换

嘿,我来帮你解决OpenCart 3.x里这段PHP转Twig的问题!

首先拆解下你原来的PHP代码核心作用:它用DOMDocument处理博客描述的HTML内容,先将UTF-8编码转成HTML实体避免乱码,再重新保存为规范的HTML结构后输出。

在OpenCart的Twig生态里,我们可以分两种场景实现:

方法1:推荐(控制器处理逻辑,模板专注展示)

这是OpenCart遵循的MVC最佳实践,把数据处理逻辑放在控制器中,模板只负责渲染内容。

  1. 在你的博客控制器(比如catalog/controller/blog/blog.php)里找到获取博客数据的代码块,添加这段处理逻辑:
$doc = new DOMDocument();
$doc->loadHTML(mb_convert_encoding($blog['description'], 'HTML-ENTITIES', 'UTF-8'));
$data['blog_clean_description'] = $doc->saveHTML();
  1. 然后在对应的Twig模板(比如catalog/view/theme/你的主题/template/blog/blog.twig)里直接输出处理好的内容:
{{ blog_clean_description|raw }}

这里的|raw必须加——因为Twig默认会自动转义HTML内容,不加的话标签会被当成纯文本输出。

方法2:自定义Twig过滤器(适合多处复用场景)

如果你的多个模板都需要处理类似的HTML内容,可以自定义一个Twig过滤器,避免重复写控制器逻辑:

  1. 打开system/library/twig/extension.php,在__construct方法中添加这个过滤器:
$this->twig->addFilter(new \Twig\TwigFilter('clean_html', function($html) {
    $doc = new DOMDocument();
    $doc->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));
    return $doc->saveHTML();
}));
  1. 之后在任意Twig模板里,直接用这个过滤器处理博客描述:
{{ blog.description|clean_html|raw }}

两种方法都能实现你原PHP代码的效果,个人更推荐第一种,符合职责分离的开发原则哦!

内容的提问来源于stack exchange,提问作者Radhika

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:34:30