Jump to content

Мультиязычное поле


Stack
 Share

Recommended Posts

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

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

    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 by Stack
Link to comment
Share on other sites

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

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

 

123.png

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

Edited by Stack
Link to comment
Share on other sites

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

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

$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 by Stack
Link to comment
Share on other sites

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.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...