Перейти к содержанию
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

Поделиться сообщением


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

Предисловие

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

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

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

Поделиться сообщением


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

да бессмысленно это. тупиковый путь развития

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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