Stack Posted March 12, 2024 at 12:35 AM Share Posted March 12, 2024 at 12:35 AM (edited) Здравствуйте, есть функционал, который выводит поле и данные в карточке в опции, с одним языком работает все нормально. Пытаюсь сделать текстовые поле мультиязычным - но ничего не получается. Код из модели опций 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 для двух языков из базы данных, поля отображаются правильно для двух языков, ошибок нет, но не сохраняются данные, поля пустые. В чем еще может быть проблема, и что я упустил? Edited March 12, 2024 at 02:53 PM by Stack 0 Quote Link to comment Share on other sites More sharing options...
Stack Posted March 12, 2024 at 03:01 PM Author Share Posted March 12, 2024 at 03:01 PM (edited) <?php echo print_r($option_values[$product_option['option_id']]); ?> выводит сейчас вот что Т.е.. name rus - 11111 и name en - 33333, которые в БД выводятся в дампе, но поля пустые, что мог упустить? Edited March 12, 2024 at 03:05 PM by Stack 0 Quote Link to comment Share on other sites More sharing options...
Stack Posted March 15, 2024 at 08:00 AM Author Share Posted March 15, 2024 at 08:00 AM (edited) Есть хоть какие-то предположения, где загвоздка? Убрал из модели из строки $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 прописал? Edited March 15, 2024 at 08:37 AM by Stack 0 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.