Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Разработчикам на заметку: улучшенная работа с текстами локализации


aVadim
 Поделиться

Рекомендованные сообщения

Предисловие

Решил начать публиковать свои наработки по движку. Ковыряю движок совсем недавно, меньше трех недель. Но в свой проект внес уже немало улучшений, которые:

а) ускоряют разработку

б) уменьшают объем кода, улучшая, в то же время, его читаемость

в) просто облегчают мне жизнь, как разработчику

Т.к. эти мои доработки часто касаются непосредственно ядра движка, то маловероятно, что они будут просто внесены в русскую сборку ocStore. Возможно, команда, работающая над ocStore сможет донести мои идеи до основных разработчиков OpenCart, и они будут учтены в последующих версиях. Но если тут есть разработчики, которые самостоятельно активно пилят движок под свои нужды, то они могут внедрять эти фичи уже сейчас.

А теперь приступаю к сути первой фичи.

Меня очень удручает частая повторяемость одного и того же кода в скриптах. И я всегда стремлюсь этого избежать. И одним из самых раздражающих факторов в этом движке была необходимость языковые тексты в коде контроллера переносить в $this->data[], и только потом их юзать в шаблонах.

Т.е. мы в контроллерах пишем тонны строк кода типа:

$this->data['text_blablabla'] = $this->language->get('text_blablabla');
и все это только для того, чтобы я мог в шаблоне обратиться к этому тексту:

<?php echo $text_blablabla;?>

И я сделал так: в классе Controller в метод __construct() добавил

public function __construct($registry)
    {
        /* здесь имеющийся код
        ...
        */
        $this->data['t'] = $this->language;
    }
А в класс Language добавил "магический" метод __get():

public function __get($key)
    {
        if (preg_match('/^_[^_]/', $key))
                return $this->get(substr($key, 1));
    }
И теперь мне не нужно никаких $this->data['text_blablabla']=..., я в любом шаблоне вывод текстовых строк делаю так:

<?php echo $t->_text_blablabla; ?>
Ну, или можно сокращенную запись использовать:

<?=$t->_text_blablabla; ?>

Профит, который я при этом получаю:

1) Значительно уменьшается объем кода в контроллерах и уменьшается (пусть и незначительно) объем потребляемой памяти

2) Уменьшается количество ошибок, связанных с тем, что в контроллере забыл в $this->data[] загнать какой-то текст

3) Уменьшается время на разработку - достаточно новый текст в языковом файле добавить, и сразу его можно в шаблоне юзать, в контроллере ничего менять не надо

При этом все старые шаблоны работают, как прежде, можно ничего не трогать и не менять. А вот если вам приходится свои шаблоны писать или просто их править основательно, то забудьте про добавление текстов в контроллере - работайте только с файлом локализации и самим шаблоном, и будет вам щастье! :)

  • +1 6
Ссылка на комментарий
Поделиться на других сайтах


  • 5 лет спустя...

Предисловие

Решил начать публиковать свои наработки по движку.

Я так понимаю, сразу же и решили закончить публиковать?

Для 15512 не работает данная инструкция.

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.