Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


aVadim

Recommended Posts

Предисловие

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

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

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

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

Т.к. эти мои доработки часто касаются непосредственно ядра движка, то маловероятно, что они будут просто внесены в русскую сборку 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 years later...

Предисловие

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

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

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку

×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.