[Помогите] Вывод данных из бд в модуль

Тема в разделе "OpenCart", создана пользователем 130983, 24 дек 2016.

  1. 130983

    130983

    Регистрация:
    10 дек 2012
    Сообщения:
    172
    Симпатии:
    146
    Всем привет! Пытаюсь создать собственный модуль для ocstore 2.3.0.2. Есть необходимость в пределах одного модуля выводить разные группы товаров. С админкой и вводом данных разобрался - возникли сложности при выводе информации уже в пользовательскую часть магазина. Вот что у меня получилось в mymodule.php
    PHP:
    <?php
    class ControllerExtensionModuleMymodule extends Controller {
        public function 
    index($setting) {
            static 
    $module 0;
           
            
    $this->load->language('extension/module/mymodule');
            
    $this->load->model('catalog/product');
            
    $this->load->model('tool/image');
            
    $data['blocks'] = array();

            
    $results $setting['block_data'];
            
    $sort_order = array();
           
            foreach (
    $results as $sort_od){
                
    $sort_order[] = $sort_od['sort_order'];
            }
           
            
    array_multisort($sort_order$results);
           
            foreach (
    $results as $result) {
                    
    $data['blocks'][] = array(
                        
    'title'          => $result['title'],
                        
    'product'     => $result['product'],
                        
    'link'           => $result['link']
                    );
            }

            
    $data['module'] = $module++;

            return 
    $this->load->view('extension/module/mymodule'$data);
        }
    }
    а это уже сам шаблон модуля mymodule.tpl

    HTML:
    <div id="blockmodule<?php echo $module;?>">
       <ul>
          <?php foreach ($blocks as $block) { ?>
          <li>
             <?php echo $block['title'];?>
             <?php echo $block['link'];?>
             <ul>
                <?php echo $block['product'];?>
             </ul>
          </li>
          <?php } ?>        
       </ul>
    </div>
    На странице с размещенным модулем получаем вот такую вещь
    [​IMG]

    где цифры это id товаров. Хотелось бы привести товары к человеческому виду, как я понимаю в контроллере необходимо организовать еще один цикл с продуктами
    PHP:
            foreach ($results as $result) {
                    
    // Где-то здесь
                    
    $data['blocks'][] = array(
                        
    'title'          => $result['title'],
                        
    'product'     => $result['product'],
                        
    'link'           => $result['link']
                    );
            }
    Самому никак не получается, может кто подскажет? С меня на пиво!!! Спасибо.
     
  2. Dotrox

    Dotrox Команда форума

    Регистрация:
    27 ноя 2012
    Сообщения:
    3.198
    Симпатии:
    1.306
    Неправильно понимаете. Цикл у вас уже есть.
    Я так понимаю, что $result['product'] - это id товара (либо где-то рядом оно всё же есть). Соответственно, вам просто нужно по каждому id вытянуть информацию из базы:
    PHP:
    'product'  => $this->model_catalog_product->getProduct((int)$result['product']);
     
  3. ISomeInterface

    ISomeInterface

    Регистрация:
    4 окт 2016
    Сообщения:
    106
    Симпатии:
    76
    Как я понял, не совсем, $result['product'] это строка типа "12,43,20,14".
    Так что ее еще нужно разделить.
    PHP:
    //$results = [['title' => 'Первый заголовок','product' => '12,43,20,14','link' => 'http://vk.com/'] ];
    foreach ($results as $result) {
       
    $products_id explode(','$result['product']);
       
    $products = array();
       foreach (
    $products_id as $product_id) {
          
    $product_info $this->model_catalog_product->getProduct($product_id);
          if (
    $product_info['image']) {
             
    $image $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
          } else {
             
    $image $this->model_tool_image->resize('placeholder.png'$this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
          }

          if ((
    $this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
             
    $price $this->currency->format($this->tax->calculate($product_info['price'], $product_info['tax_class_id'], $this->config->get('config_tax')));
          } else {
             
    $price false;
          }

          if ((float)
    $product_info['special']) {
             
    $special $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));
          } else {
             
    $special false;
          }

          if (
    $this->config->get('config_tax')) {
             
    $tax $this->currency->format((float)$product_info['special'] ? $product_info['special'] : $product_info['price']);
          } else {
             
    $tax false;
          }

          if (
    $this->config->get('config_review_status')) {
             
    $rating = (int)$product_info['rating'];
          } else {
             
    $rating false;
          }

          
    $products[] = array(
             
    'product_id'  => $product_info['product_id'],
             
    'thumb'       => $image,
             
    'name'        => $product_info['name'],
             
    'description' => utf8_substr(strip_tags(html_entity_decode($product_info['description'], ENT_QUOTES'UTF-8')), 0$this->config->get('config_product_description_length')) . '..',
             
    'price'       => $price,
             
    'special'     => $special,
             
    'tax'         => $tax,
             
    'minimum'     => $product_info['minimum'] > $product_info['minimum'] : 1,
             
    'rating'      => $rating,
             
    'href'        => $this->url->link('product/product''path=' $this->request->get['path'] . '&product_id=' $product_info['product_id'] . $url)
          );
       }

       
    $data['blocks'][] = array(
          
    'title'          => $result['title'],
          
    'product'        => $products,
          
    'link'           => $result['link']
       );
    }
    А во вьюхе через цикл по $data['blocks']['product'] выводишь продукты как тебе нужно, основная информация о продукте там есть.
     
    Lasted edited by : 25 дек 2016
    settr нравится это.