Языковые константы
Если открыть практически любой контроллер opencart, можно увидеть
как после загрузки языка
$this->load->language('catalog/product');
подгружаются языковые константы
$data['text_list'] = $this->language->get('text_list'); $data['text_no_results'] = $this->language->get('text_no_results'); $data['text_confirm'] = $this->language->get('text_confirm'); $data['column_name'] = $this->language->get('column_name'); $data['column_attribute_group'] = $this->language->get('column_attribute_group'); $data['column_sort_order'] = $this->language->get('column_sort_order'); $data['column_action'] = $this->language->get('column_action');
и так для каждой константы.
что бы не прописывать каждый перевод можно было сделать такой трюк
$data = array(); // тут мы инициируем переменную $data если она не задана ранее $data += $this->load->language('catalog/attribute'); // а тут копируем в неё все языковые константы
но это имело смысл только до версии 3.0
потому как с версии 3.0 добавили такую интересную штуку controller\event\language.php
public function index(&$route, &$args) { foreach ($this->language->all() as $key => $value) { if (!isset($args[$key])) { $args[$key] = $value; } } }
сами event'ы были и раньше, но language event добавили только в 3.0
а как же это работает? довольно просто:
всё начинается с того что в файле framework.php создается и регистрируется event, который в свою очередь регистрирует все ивенты из конфига
// Event $event = new Event($registry); $registry->set('event', $event); // Event Register if ($config->has('action_event')) { foreach ($config->get('action_event') as $key => $value) { foreach ($value as $priority => $action) { $event->register($key, new Action($action), $priority); } } }
в конфиге среди прочих есть такие строчки
$_['action_event'] = array( ... 'view/*/before' => array( 999 => 'event/language', ...
таким образом перед каждым вызовом $this->load->view загружаются соответствующие языковые константы
1 Комментарий
Рекомендуемые комментарии