Opencart meta title include store name

橙三吉。 提交于 2019-12-04 06:15:57

问题


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

回答1:


Opencart uses some kind of dependency injection to access the registry from library classes. This technique is applied in many library classes, like the customer, affiliate, currency, tax, weight, length and cart class. Surprisingly, the document class is one of the few classes that don't get the registry object passed in.

If you'd like to follow this convention, I'd suggest you modify index.php and library/document.php so that the Document constructor takes the registry as an argument:

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

}

Now you only need to inject the registry object into the Document class in index.php, as follows:

// Registry
$registry = new Registry();

[...]

// Document
$registry->set('document', new Document($registry));



回答2:


You cannot use $this->cofig inside document class, because it has not config property, also it has not magic __get method, like controller class.

You can try to change your header controller.

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

   // ....
}

-------- UPDATED --------

If you want use $config inside Document class, you may use global variable:

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

But I recommend you don't do this.




回答3:


On Opencart 1.5.1.3 that worked changing $this->config->get("store_name") to $this->config->get("config_name")



来源:https://stackoverflow.com/questions/10086942/opencart-meta-title-include-store-name

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!