OpenCart откуда %s в языковых файлах берет значение

Если вы не заказывали создание веб сайта в какой-то компании, то рано или поздно вас может удивить что в языковых файлах которые хранятся по пути:

1
/catalog/language/english

или

1
/catalog/language/russian

пробегает значение %s которое не понятно откуда берет значение. И чтобы поменять его, или подставить свое какое-то, к примеру ссылку необходимо знать где-же находиться участок php кода, с которого языковый файл подтягивает значение.

На самом деле все довольно просто. Данные подтягивает контроллер который находится по пути:

1
/catalog/language/controller

Давайте, чтобы было понятно, рассмотрим на примере. Есть языковый файл для карточек товара. Он находится по пути:

/catalog/language/russian/product/product.php

В этом файле есть много %s, но мы возьмем самый популярный, а именно строчку:

1
$_['text_reviews']      = 'Отзывов: %s';

Давайте разберемся откуда берется значение. Поскольку мы рассматриваем product.php то надо найти его контроллер. Это очень просто,  идем по пути:

/catalog/controller/product/product.php

и находим строчку.

1
$this->data['reviews'] = sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']);

Именно она подгружает переменную. Таким образом вы можете найти буквально любой вывод переменных который вызывается из языковых файлов с помощью  %s.

Также, чтобы облегчить поиск это функции хочу обратить внимание что opencart для этих целей использует php функцию sprintf(), поэтому, чтобы облегчать себе поиск кода в контроллере, вы можете искать именно эту функцию.

Но бывает такое что языковый файл подгружает не одну переменную а две. Как быть в этом случае? Давайте рассмотрим пример. Файл:

/catalog/language/russian/account/register.php

В нем есть строчка:

1
$_['text_agree']           = 'Я прочитал <a class="fancybox" href="%s" alt="%s"><b>%s</b></a> и согласен с условиями';

В ней, как мы видим вызываются две переменные. Давайте найдем участок кода в контроллере который отвечает за это. Идем по пути:

/catalog/controller/account/register.php

Понимая что нам надо искать функцию sprintf() и переменную text_agree мы быстро находим соответствующую строчку

1
	$this->data['text_agree'] = sprintf($this->language->get('text_agree'), $this->url->link('information/information/info', 'information_id=' . $this->config->get('config_account_id'), 'SSL'), $information_info['title'], $information_info['title']);

В ней сначала погружаться первая переменная, а затем другая.

На этом все, но если у вас остались вопросы, напишите в комментариях, попробую вам помочь.

загрузка...
2 комментария

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *