Предисловие
Решил начать публиковать свои наработки по движку. Ковыряю движок совсем недавно, меньше трех недель. Но в свой проект внес уже немало улучшений, которые:
а) ускоряют разработку
б) уменьшают объем кода, улучшая, в то же время, его читаемость
в) просто облегчают мне жизнь, как разработчику
Т.к. эти мои доработки часто касаются непосредственно ядра движка, то маловероятно, что они будут просто внесены в русскую сборку 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) Уменьшается время на разработку - достаточно новый текст в языковом файле добавить, и сразу его можно в шаблоне юзать, в контроллере ничего менять не надо
При этом все старые шаблоны работают, как прежде, можно ничего не трогать и не менять. А вот если вам приходится свои шаблоны писать или просто их править основательно, то забудьте про добавление текстов в контроллере - работайте только с файлом локализации и самим шаблоном, и будет вам щастье! :)