0

How to get the store name when in the Document class. This is what I am trying to do:

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;
    }
}

Although the $this is referring to the document class. How to I get the config?

Using the latest version of opencart 1.5.2.1

When you check the index.php file to see how config is loaded

// 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 は、ある種の依存性注入を使用して、ライブラリ クラスからレジストリにアクセスします。この手法は、customer、affiliate、currency、tax、weight、length、cart クラスなど、多くのライブラリ クラスに適用されます。驚いたことに、ドキュメント クラスは、レジストリ オブジェクトが渡されない数少ないクラスの 1 つです。

この規則に従いたい場合は、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->config->get("store_name")への変更に取り組んだOpencart 1.5.1.3で$this->config->get("config_name")

于 2012-07-19T18:52:31.363 に答える
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 に答える