Перейти к содержанию

Рекомендуемые сообщения

Здравствуйте, есть функционал, который выводит поле и данные в карточке в опции, с одним языком работает все нормально. Пытаюсь сделать текстовые поле мультиязычным - но ничего не получается.

Код из модели опций

    public function getOptionValuesId($option_id) {
        $option_value_data = array();

        $option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "option_value ov LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE ov.option_id = '" . (int)$option_id . "' ORDER BY ov.sort_order, ovd.name");

        foreach ($option_value_query->rows as $option_value) {
            $option_value_data[$option_value['option_value_id']] = array(
                'option_value_id' => $option_value['option_value_id'],
                'name'            => $option_value['name'],
                'image'           => $option_value['image'],
                'sort_order'      => $option_value['sort_order']
            );
        }

        return $option_value_data;
    }
    
	public function getOptionValueIdByName($option_id, $name) {
		
        $query = $this->db->query("SELECT option_value_id FROM " . DB_PREFIX . "option_value_description WHERE option_id = '".(int)$option_id."' AND name LIKE '".$this->db->escape($name)."' AND language_id = '".(int)$this->config->get('config_language_id')."'");
 
        return isset($query->row['option_value_id']) ? $query->row['option_value_id'] : false;
    }		

    public function updateOptionValue($data) {

        $this->db->query("UPDATE " . DB_PREFIX . "option_value SET sort_order = '" . (int)$data['sort_order'] . "' WHERE option_value_id = '" . (int)$data['option_value_id'] . "'");

        $this->db->query("UPDATE " . DB_PREFIX . "option_value_description SET name = '" . $this->db->escape($data['name']) . "' WHERE option_value_id = '" . (int)$data['option_value_id'] . "' AND language_id = '" . (int)$this->config->get('config_language_id') . "'");

    }

    public function addOptionValue($data) {

        $this->db->query("INSERT INTO " . DB_PREFIX . "option_value SET option_id = '" . (int)$data['option_id'] . "', image = '', sort_order = '" . (int)$data['sort_order'] . "'");

        $option_value_id = $this->db->getLastId();

        $this->db->query("INSERT INTO " . DB_PREFIX . "option_value_description SET option_value_id = '" . (int)$option_value_id . "', language_id = '" . (int)$this->config->get('config_language_id') . "', option_id = '" . (int)$data['option_id'] . "', name = '" . $this->db->escape($data['name']) . "'");

        return $option_value_id;

    }

В контроллере продукта есть строчка, которая обращается к функции модели, которая выше.

$data['option_values'][$product_option['option_id']]['abs'] = $this->model_catalog_option->getOptionValuesId($product_option['option_id']);

Вот код контроллера продукта целиком, где эта строчка

		foreach ($data['product_options'] as $product_option) {
			if ($product_option['type'] == 'select' || $product_option['type'] == 'radio' || $product_option['type'] == 'checkbox' || $product_option['type'] == 'image') {
				if (!isset($data['option_values'][$product_option['option_id']])) {
					$data['option_values'][$product_option['option_id']] = $this->model_catalog_option->getOptionValues($product_option['option_id']);

        $data['option_values'][$product_option['option_id']]['abs'] = $this->model_catalog_option->getOptionValuesId($product_option['option_id']);
      
				}
			}
		}

Соответственно в product_form.tpl

                              <td class="text-left">
                                <?php if (isset($option_values[$product_option['option_id']])) { ?>
                                <?php if(array_key_exists($product_option_value['option_value_id'],$option_values[$product_option['option_id']]['abs'])) { ?>
                                    <input type="text" name="product_option[<?php echo $option_row; ?>][product_option_value][<?php echo $option_value_row; ?>][name]" value="<?php echo $option_values[$product_option['option_id']]['abs'][$product_option_value['option_value_id']]['name']; ?>" class="form-control">
                                    <input type="hidden" name="product_option[<?php echo $option_row; ?>][product_option_value][<?php echo $option_value_row; ?>][option_value_id]" value="<?php echo $option_values[$product_option['option_id']]['abs'][$product_option_value['option_value_id']]['option_value_id']; ?>"> 
                                <?php } ?>
                                <?php } ?>
                                <input type="hidden" name="product_option[<?php echo $option_row; ?>][product_option_value][<?php echo $option_value_row; ?>][product_option_value_id]" value="<?php echo $product_option_value['product_option_value_id']; ?>" /></td>	

Для мультиязычности я сделал вот так

                              <td class="text-left">
                                <?php if (isset($option_values[$product_option['option_id']])) { ?>
                                <?php if(array_key_exists($product_option_value['option_value_id'],$option_values[$product_option['option_id']]['abs'])) { ?>
								<?php foreach ($languages as $language) { ?>
								<div class="input-group"><span class="input-group-addon"><img src="language/<?php echo $language['code']; ?>/<?php echo $language['code']; ?>.png" title="<?php echo $language['name']; ?>" /></span>
                                    <input type="text" name="product_option[<?php echo $option_row; ?>][product_option_value][<?php echo $option_value_row; ?>][<?php echo $language['language_id']; ?>][name]" value="<?php echo isset($option_values[$product_option['option_id']]['abs'][$product_option_value['option_value_id']][$language['language_id']]) ? $option_values[$product_option['option_id']]['abs'][$product_option_value['option_value_id']][$language['language_id']]['name'] : ''; ?>" class="form-control">   	
									<input type="hidden" name="product_option[<?php echo $option_row; ?>][product_option_value][<?php echo $option_value_row; ?>][option_value_id]" value="<?php echo $option_values[$product_option['option_id']]['abs'][$product_option_value['option_value_id']]['option_value_id']; ?>">
								</div>
								<?php echo print_r($option_values[$product_option['option_id']]); ?> 
								
								
						        <?php } ?> 
								<?php } ?>
                                <?php } ?>
                                <input type="hidden" name="product_option[<?php echo $option_row; ?>][product_option_value][<?php echo $option_value_row; ?>][product_option_value_id]" value="<?php echo $product_option_value['product_option_value_id']; ?>" /></td>
								
$option_values[$product_option['option_id']]

в print_r выводит значения name для двух языков из базы данных, поля отображаются правильно для двух языков, ошибок нет, но не сохраняются данные, поля пустые. В чем еще может быть проблема, и что я упустил?

 

Изменено пользователем Stack
Ссылка на комментарий
Поделиться на другие сайты

<?php echo print_r($option_values[$product_option['option_id']]); ?>

 выводит сейчас вот что

 

123.png

Т.е.. name rus - 11111 и name en - 33333, которые в БД выводятся в дампе, но поля пустые, что мог упустить? 

Изменено пользователем Stack
Ссылка на комментарий
Поделиться на другие сайты

Есть хоть какие-то предположения, где загвоздка?

Убрал из модели из строки

$option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "option_value ov LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE ov.option_id = '" . (int)$option_id . "' AND language_id = '".(int)$this->config->get('config_language_id')."' ORDER BY ov.sort_order, ovd.name");

Вот этот код

AND language_id = '".(int)$this->config->get('config_language_id')."'

Так как с ним в дампе для двух языков значения не выводятся, а без него выводятся

В функциях

getOptionValueIdByName($option_id, $name)
updateOptionValue($data) {
addOptionValue($data)

Тоже такой код есть, пробовал заменять на 

language_id = '" . (int)$language_id . "'

Но ничего не дало, либо я в шаблоне  в input value не правильно isset прописал?

 

Изменено пользователем Stack
Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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