0

在 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);
4

3 回答 3

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));
于 2012-04-19T09:02:52.383 回答
1

你不能在文档类中使用$this->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;
    }
}

但我建议你不要这样做。

于 2012-04-17T08:57:08.223 回答
1

在 Opencart 1.5.1.3 上工作更改$this->config->get("store_name")$this->config->get("config_name")

于 2012-07-19T18:52:31.363 回答