如何在Document类中获取商店名称。这就是我想要做的事情:
public function setTitle($title) {
// Append store name if small title
if(strlen($title) < 30){
$this->title = $title . ' - ' . $this->config->get("store_name");
} else {
$this->title = $title;
}
}
虽然$this
指的是文档类。如何获得配置?
使用最新版本的opencart 1.5.2.1
检查index.php
文件以查看配置的加载方式
// Registry
$registry = new Registry();
// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);
// Config
$config = new Config();
$registry->set('config', $config);
答案 0 :(得分:4)
Opencart使用某种依赖注入来从库类访问注册表。此技术适用于许多库类,如客户,会员,货币,税,重量,长度和购物车类。令人惊讶的是,文档类是少数几个没有传入注册表对象的类之一。
如果您想遵循此约定,我建议您修改index.php和library / document.php,以便Document构造函数将注册表作为参数:
class Document {
[...]
// Add the constructor below
public function __construct($registry) {
$this->config = $registry->get('config');
}
[...]
public setTitle($title) {
if(strlen($title) < 30){
$this->title = $title . ' - ' . $this->config->get("store_name");
} else {
$this->title = $title;
}
}
}
现在您只需要将注册表对象注入index.php中的Document类,如下所示:
// Registry
$registry = new Registry();
[...]
// Document
$registry->set('document', new Document($registry));
答案 1 :(得分:1)
你不能在文档类中使用 $ this-&gt; cofig ,因为它没有 config 属性,也没有魔法 __ get 方法,就像控制器类一样。
您可以尝试更改标头控制器。
public function index() {
$title = $this->document->getTitle();
if(strlen($title) < 30){
$this->data['title'] = $title . ' - ' . $this->config->get("store_name");
} else {
$this->data['title'] = $title;
}
// ....
}
--------更新--------
如果你想在Document类中使用$ config,你可以使用全局变量:
public function setTitle($title) {
global $config;
// Append store name if small title
if(strlen($title) < 30){
$this->title = $title . ' - ' . $config->get("store_name");
} else {
$this->title = $title;
}
}
但我建议你不要这样做。
答案 2 :(得分:1)
在Opencart 1.5.1.3上,将$this->config->get("store_name")
更改为$this->config->get("config_name")