Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

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


DEATH
 Поделиться

Рекомендованные сообщения

Здравствуйте, подскажите что прописать в контролере header чтобы получить массив всех товаров магазина на странице header.tpl?

Ссылка на комментарий
Поделиться на других сайтах


В контроллере 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 месяцев спустя...

для рандомной выборки используется 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 месяцев спустя...

А как можно сделать чтобы зайдя в категорию видеть допустим 9 случайных товаров категории ?

Ссылка на комментарий
Поделиться на других сайтах


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
 Поделиться

  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.