Всем привет! Пытаюсь создать собственный модуль для ocstore 2.3.0.2. Есть необходимость в пределах одного модуля выводить разные группы товаров. С админкой и вводом данных разобрался - возникли сложности при выводе информации уже в пользовательскую часть магазина. Вот что у меня получилось в mymodule.php PHP: <?phpclass 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> На странице с размещенным модулем получаем вот такую вещь где цифры это id товаров. Хотелось бы привести товары к человеческому виду, как я понимаю в контроллере необходимо организовать еще один цикл с продуктами PHP: foreach ($results as $result) { // Где-то здесь $data['blocks'][] = array( 'title' => $result['title'], 'product' => $result['product'], 'link' => $result['link'] ); } Самому никак не получается, может кто подскажет? С меня на пиво!!! Спасибо.
Неправильно понимаете. Цикл у вас уже есть. Я так понимаю, что $result['product'] - это id товара (либо где-то рядом оно всё же есть). Соответственно, вам просто нужно по каждому id вытянуть информацию из базы: PHP: 'product' => $this->model_catalog_product->getProduct((int)$result['product']);
Как я понял, не совсем, $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'] > 0 ? $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'] выводишь продукты как тебе нужно, основная информация о продукте там есть.