Stack Опубликовано 12.03.2024 в 00:35 Поделиться Опубликовано 12.03.2024 в 00:35 (изменено) Здравствуйте, есть функционал, который выводит поле и данные в карточке в опции, с одним языком работает все нормально. Пытаюсь сделать текстовые поле мультиязычным - но ничего не получается. Код из модели опций 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 для двух языков из базы данных, поля отображаются правильно для двух языков, ошибок нет, но не сохраняются данные, поля пустые. В чем еще может быть проблема, и что я упустил? Изменено 12.03.2024 в 14:53 пользователем Stack 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Stack Опубликовано 12.03.2024 в 15:01 Автор Поделиться Опубликовано 12.03.2024 в 15:01 (изменено) <?php echo print_r($option_values[$product_option['option_id']]); ?> выводит сейчас вот что Т.е.. name rus - 11111 и name en - 33333, которые в БД выводятся в дампе, но поля пустые, что мог упустить? Изменено 12.03.2024 в 15:05 пользователем Stack 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Stack Опубликовано 15.03.2024 в 08:00 Автор Поделиться Опубликовано 15.03.2024 в 08:00 (изменено) Есть хоть какие-то предположения, где загвоздка? Убрал из модели из строки $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 прописал? Изменено 15.03.2024 в 08:37 пользователем Stack 0 Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.