Вопрос по php – Мета-заголовок Opencart включает название магазина

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);
Проверьте в файле ... где-то вы можете найти это:$this->config = New ... вы увидите используемый класс. David Bélanger
Я добавил эту часть, чтобы показать, чего я пытаюсь достичь.$this->config не в классе. John Magnolia

Ваш Ответ

3   ответа
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;
   }

   // ....
}

-------- ОБНОВЛЕНО --------

Если вы хотите использовать $ config внутри класса Document, вы можете использовать глобальную переменную:

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

Но я рекомендую вам этого не делать.

1

$this->config->get("store_name") в$this->config->get("config_name")

работает на 1.5.5.1
4

еестру из библиотечных классов. Этот метод применяется во многих классах библиотеки, таких как клиент, партнер, валюта, налог, вес, длина и класс корзины. Удивительно, но класс документа является одним из немногих классов, в которые не передается объект реестра.

Если вы хотите следовать этому соглашению, я предлагаю вам изменить 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;
            }
        }

}

Теперь вам нужно только внедрить объект реестра в класс Document в index.php следующим образом:

// Registry
$registry = new Registry();

[...]

// Document
$registry->set('document', new Document($registry));
Отлично, я ждал ответа, который предоставил способ сделать это, только отредактировав пару файлов. John Magnolia

Похожие вопросы