Названия метаданных Opencart включают название магазина

Как получить имя магазина в классе 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); 

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

Если вы хотите следовать этому соглашению, я предлагаю вам изменить index.php и library / document.php, чтобы конструктор документа принял реестр в качестве аргумента:

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

Вы не можете использовать $ 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; } } 

Но я рекомендую, чтобы вы этого не делали.

В Opencart 1.5.1.3, который работал с изменением $this->config->get("store_name") на $this->config->get("config_name")