2013-12-04 3 views
1

Недавно я купил расширение для создания настраиваемых полей для моих продуктов. Это расширение отлично работает на моей странице продуктов, отображает всю информацию, которую я положил на admin. Но мне нужно также отображать эти настраиваемые поля на странице категории, поэтому я могу перечислить некоторые данные.Получить пользовательские поля в категории Страница

Я попытался скопировать код и поставить на категории (контроллер и View), но он возвращает пустой - не отображается ничего: никаких ошибок, никаких предупреждений .. и нет информации.

Расширение поставляется с файлом vqmod, в основном, с операциями в каталоге папки:

Изменения в каталоге: Продукт/Controller:

$this->data['text_download'] = $this->language->get('text_download'); 

     if ($this->config->get('cpf_fields')) { 
      $fields = $this->config->get('cpf_fields'); 
     } else { 
      $fields = array(); 
     } 

     $field_data = array(); 

     if (!empty($product_info['cpf'])) { 
      $cpf = unserialize($product_info['cpf']); 
     } else { 
      $cpf = array(); 
     } 

     $this->load->model('catalog/option'); 

     foreach ($fields as $field) { 
      $option = $this->model_catalog_option->getOption($field['option_id']); 

      if ($option) { 
       if ($option['type'] == 'select' || $option['type'] == 'radio') { 
       $values = array(); 

       $option_values = $this->model_catalog_option->getOptionValues($field['option_id']); 

       foreach ($option_values as $option_value) { 
        $selected = (!empty($cpf[$field['option_id']])) ? $cpf[$field['option_id']] : 0; 

        $values[] = array(
         'option_value_id'  => $option_value['option_value_id'], 
         'name'    => $option_value['name'], 
         'selected'   => $selected 
        ); 
       } 

       $field_data[] = array(
        'name'   => $option['name'], 
        'type'   => $option['type'], 
        'status'  => $field['status'], 
        'sort_order' => $field['sort_order'], 
        'values'  => $values 
       ); 
       } elseif ($option['type'] == 'checkbox') { 
       $values = array(); 

       $option_values = $this->model_catalog_option->getOptionValues($field['option_id']); 

       foreach ($option_values as $option_value) { 
        $selected = (!empty($cpf[$field['option_id']]) && is_array($cpf[$field['option_id']]) && in_array($option_value['option_value_id'], $cpf[$field['option_id']])) ? $option_value['option_value_id'] : 0; 

        $values[] = array(
         'option_value_id'  => $option_value['option_value_id'], 
         'name'    => $option_value['name'], 
         'selected'   => $selected 
        ); 
       } 

       $field_data[] = array(
        'name'   => $option['name'], 
        'type'   => $option['type'], 
        'status'  => $field['status'], 
        'sort_order' => $field['sort_order'], 
        'values'  => $values 
       ); 
       } else { 
       $value = (!empty($cpf[$field['option_id']])) ? $cpf[$field['option_id']] : '';; 

       $field_data[] = array(
        'name'   => $option['name'], 
        'type'   => $option['type'], 
        'status'  => $field['status'], 
        'sort_order' => $field['sort_order'], 
        'value'   => $value 
       ); 
       } 
      } 
     } 

     $sort_order = array(); 

     foreach ($field_data as $key => $value) { 
      $sort_order[$key] = $value['sort_order']; 
     } 

     array_multisort($sort_order, SORT_ASC, $field_data); 

     $this->data['fields'] = array(); 

     foreach ($field_data as $field) { 
      $this->data['fields'][] = $field; 
     } 

Продукт Вид:

<?php foreach ($fields as $field) { ?> 
      <?php if ($field['status'] && (!empty($field['value']) || !empty($field['values']))) { ?> 
      <?php $selected = false; ?> 
      <?php if ($field['type'] == 'select' || $field['type'] == 'radio') { ?> 
       <?php foreach ($field['values'] as $value) { ?> 
       <?php if ($value['selected'] && !$selected) { ?> 
        <?php $selected = true; ?> 
       <span><?php echo $field['name']; ?></span> 
       <?php } ?> 
       <?php if ($value['selected'] == $value['option_value_id']) { ?> 
       <?php echo $value['name']; ?> 
       <?php } ?> 
       <?php } ?><?php if ($selected) { ?><br /><?php } ?> 
      <?php } elseif ($field['type'] == 'checkbox') { ?> 
       <?php $checkbox_value = ''; ?> 
       <?php foreach ($field['values'] as $value) { ?> 
       <?php if ($value['selected'] && !$selected) { ?> 
        <?php $selected = true; ?> 
       <span><?php echo $field['name']; ?></span> 
       <?php } ?> 
       <?php if ($value['selected'] == $value['option_value_id']) { ?> 
       <?php $checkbox_value .= $value['name'] . ', '; ?> 
       <?php } ?> 
       <?php } ?> 
       <?php echo substr($checkbox_value, 0, -2); ?><?php if ($selected) { ?><br /><?php } ?> 
      <?php } elseif ($field['type'] == 'file') { ?> 
       <span><?php echo $field['name']; ?></span> 
       <a href="index.php?route=product/product/download&file=<?php echo $field['value']; ?>"><?php echo $text_download; ?></a><br /> 
      <?php } else { ?> 
       <span><?php echo $field['name']; ?></span> 
       <?php echo $field['value']; ?><br /> 
      <?php } ?> 
      <?php } ?> 
     <?php } ?> 

Модель продукта только:

'cpf'  => $query->row['cpf'] 

Однако в ADMIN модели продукта следующий код вводится:

if (isset($data['cpf'])) {   
       foreach ($data['cpf'] as $language_id => $cpf) { 
        $cpf = serialize($cpf); 

        $this->db->query("UPDATE " . DB_PREFIX . "product_description SET cpf = '" . $this->db->escape($cpf) . "' WHERE product_id = '" . (int)$product_id . "' AND language_id = '" . (int)$language_id . "'"); 
       } 
      } else { 
       $this->db->query("UPDATE " . DB_PREFIX . "product_description SET cpf = '' WHERE product_id = '" . (int)$product_id . "'"); 
      } 

Мой вопрос, как я могу получить эти же данные и отобразить его в другой точке зрения, как категории или поиск, или производитель?

Большое спасибо заранее.

ответ

0

Возможно, это связано с тем, что расширение хранит эти значения настраиваемого поля в отдельной таблице DB, которая не заполняется при загрузке продуктов для категорий, производителей, поиска, последних, связанных, бестселлеров и т. Д. Листинга.

Ваша ставка должна исследовать также модель класс (ы) внутреннего абонента и убедитесь, что соответствующий стол (ы) соединены и необходимые столбцы загружаются при получении списка продуктов ...

После правильные данные заполнены. Ваш контроллер и представление должны работать так, как вы их подготовили для ...

+0

Привет @shadyyx благодарю вас за ответ. Я думаю, мне не повезло, потому что единственный код, введенный в модель каталога, - это простая строка, которую я предоставил. Однако я редактировал вопрос, добавляя Admin/Model. Это единственный код модели *, который я нашел в файле vqmod. Я видел, что расширение использует OPTIONS для добавления этих настраиваемых полей, и я предполагаю, что он не использует другую таблицу :) – Carol

Смежные вопросы