2012-04-10 2 views
0

Как получить имя магазина, когда в классе Document. Это то, что я пытаюсь сделать:Ключ к метафору Opencart включает имя магазина

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

Проверьте файл ... где-нибудь вы можете найти это: '$ this-> config = New' ... вы увидите используемый класс. –

+0

Я добавил эту часть, чтобы показать, чего я пытаюсь достичь. '$ this-> config' не входит в класс. –

ответ

4

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

} 

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

// Registry 
$registry = new Registry(); 

[...] 

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

Perfect Я ждал ответа, который предоставил способ сделать это, только редактируя пару файлов. –

1

Вы не можете использовать $ this-> cofig внутри класса документа, потому что у него нет config property, также у него нет магии __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, вы можете использовать глобальную переменную:

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

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

+1

работает для 1.5.5.1 –

Смежные вопросы