Opencart 3 мультиязычных поля в настройках магазина - PullRequest
2 голосов
/ 14 июля 2020

Я хочу сделать поле "open" в настройках магазина Opencart 3 многоязычным.

В admin \ view \ template \ setting \ setting.twig. Я нашел эти строки:

<div class="form-group">
    <label class="col-sm-2 control-label" for="input-open"><span data-toggle="tooltip" data-container="#tab-general" title="{{ help_open }}"> {{ entry_open }}</span></label>
    <div class="col-sm-10">
      <textarea name="config_open" rows="5" placeholder="{{ entry_open }}" id="input-open" class="form-control">{{ config_open }}</textarea>
    </div>
</div>

Я сделал из textarea - введите и добавьте {% for language in languages %}, языковые флаги и идентификатор языка.

image

После этого в магазине В настройках у меня есть "открытое" поле на двух языках. И информация в этих полях теперь хранится.

Я сделал это во внешнем контроллере

$data['open'] = nl2br($this->config->get('config_open'));

Когда был один язык, все работало, но теперь у меня ошибка:

Warning: nl2br() expects parameter 1 to be string, array given in /var/www/fastuser/data/www/localstite.loc/storage/modification/catalog/controller/common/header.php on line 81

1 Ответ

2 голосов
/ 14 июля 2020

EDITED ...

Соответствующий файл контроллера должен содержать этот код:

$this->load->model('localisation/language');
    $languages = $this->model_localisation_language->getLanguages();
        
            foreach ($languages as $language) {
                if (isset($this->request->post[config_open' . $language['language_id']])) {
                    $data['config_open'][$language['language_id']] = $this->request->post['config_open' . $language['language_id']];
                } else {
                    $data['config_open'][$language['language_id']] = $this->config->get('config_open' . $language['language_id']);
                }   
            }

строка:

 <input type="text" name="config_open[{{ language.language_id }}][title]" placeholder="{{ entry_open }}" id="input-open{{ language.language_id }}" value="{{ config_open[language.language_id] ? config_open[language.language_id].title }}" class="form-control" />

заменить на:

 <input type="text" name="config_open{{ language.language_id }}" placeholder="{{ entry_open }}" id="input-open{{ language.language_id }}" value="{% if config_open[language.language_id] %}{{ config_open[language.language_id] }}{% endif %}" class="form-control" />

и строка внешнего интерфейса:

$data['open'] = nl2br($this->config->get('config_open'));

замените на:

$data['open'] = nl2br($this->config->get('config_open' . $this->config->get('config_language_id')));
...