Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

header.tpl получить массив всех товаров магазина


DEATH

Recommended Posts

В контроллере catalog/controller/common/header.phpпишите $this->load->model('catalog/product'); $this->data['titleCount'] = count($this->model_catalog_product->getProducts());и соответственно доступно в в шаблоне common/header

Надіслати
Поділитися на інших сайтах


в ..catalogmodelcatalogproduct.php

добавим функцию

public function getProductsRandom() {	$query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, wcd.unit AS weight_class FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) LEFT JOIN " . DB_PREFIX . "stock_status ss ON (p.stock_status_id = ss.stock_status_id) LEFT JOIN " . DB_PREFIX . "weight_class_description wcd ON (p.weight_class_id = wcd.weight_class_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.date_available <= NOW() AND p.status = '1' ORDER BY RAND() LIMIT 2");		return $query->rows;}

в ..catalogcontrollercommonheader.php

$this->load->model('catalog/product');$results = $this->model_catalog_product->getProductsRandom();foreach ($results AS $result) {	if ($result['image']) {		$image = $result['image'];	} else {		$image = 'no_image.jpg';	}			$this->data['products'][] = array(		'name'    => $result['name'],		'model'   => $result['model'],		'thumb'   => $this->model_tool_image->resize($image, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')),		'href'    => $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/product&product_id=' . $result['product_id']),	);}

в ..catalogviewthemedefaulttemplatecommonheader.tpl

<div class="div7">    <?php if ($products) { ?>    <table class="list">      <?php for ($i = 0; $i < sizeof($products); $i = $i + 4) { ?>      <tr>        <?php for ($j = $i; $j < ($i + 4); $j++) { ?>        <td width="25%"><?php if (isset($products[$j])) { ?>          <a href="<?php echo $products[$j]['href']; ?>"><img src="<?php echo $products[$j]['thumb']; ?>" title="<?php echo $products[$j]['name']; ?>" alt="<?php echo $products[$j]['name']; ?>" /></a>          <a href="<?php echo $products[$j]['href']; ?>"><?php echo $products[$j]['name']; ?></a>          [color= #999; font-size: 11px;]<?php echo $products[$j]['model']; ?>[/color]          <?php } ?></td>        <?php } ?>      </tr>      <?php } ?>    </table>    <?php } ?>     </div>

для рандомной выборки используется ORDER BY RAND() , что при большом количестве товара (4-5 тысяч) будет, достаточно жестоко, напрягать базу данных, как оптимизировать можно найти кучу статей в интернете, но основной принцип работает =)

Надіслати
Поділитися на інших сайтах


  • 6 months later...

для рандомной выборки используется ORDER BY RAND() , что при большом количестве товара (4-5 тысяч) будет, достаточно жестоко, напрягать базу данных, как оптимизировать можно найти кучу статей в интернете, но основной принцип работает =)

А что мешает сначала выборку сделать просто по количеству (Select Count, вроде) и затем только делать выборку с описанием только нужных 10 товаров?
Надіслати
Поділитися на інших сайтах


А что мешает сначала выборку сделать просто по количеству (Select Count, вроде) и затем только делать выборку с описанием только нужных 10 товаров?

здравый смысл.

Надіслати
Поділитися на інших сайтах


А что мешает сначала выборку сделать просто по количеству (Select Count, вроде) и затем только делать выборку с описанием только нужных 10 товаров?

Если я правильно понял - предлагается выяснить количество записей, потом сгенерить рандомом 10 product_id из интервала от 1 до COUNT и потом выдернуть из БД эти товары по product_id...

Этот вариант не так прост как кажется на первый взгляд.

Надіслати
Поділитися на інших сайтах

Рекомендую для этой задачи вплотную использовать кэшь. Думаю, имеет смысл в нем хранить не только количество товаров, но и их идентификаторы, кто-бы выбирать нужные товары без обращения к базе.

Надіслати
Поділитися на інших сайтах


дур дом какой-то: один через COUNT (может, конечно, имелось ввиду через MAX() тогда еще реально) рандомные товары искать собрался, другой через кэширование.

Надіслати
Поділитися на інших сайтах


объясню.

Вот как раз и вспоминал Max... но макс выдаст последний номер, а что если товар с этим ID удален?

А селект как раз сохранит набор и можно будет сразу фильтровать по значению есть ли товар (кол-во больше нуля или вообще не удален ли из базы)

А вот с кешем – здравая мысль. Тот же самый Select, только уже выполненный недавно. (интересно, как часто кеш у покупателя будет меняться, а то добавишь товар, а он не сразу отобразится)

А как работать с этим самым кешем?

Надіслати
Поділитися на інших сайтах


  • 5 months later...

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.