Перейти к содержанию
DEATH

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

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

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

Поделиться сообщением


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

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

Поделиться сообщением


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

Если не секрет зачем Вам все товары в header.tpl

Спасибо! вывести в шапке пару случайных товаров!

Поделиться сообщением


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

тогда это не правильно решение надо из БД выбирать случайные товары если надо решение пишите сделаю

Поделиться сообщением


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

А что если массив перебирать и потом рандомом выбрать случайные товары, не вариант? что вы предложите?

Поделиться сообщением


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

в ..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 тысяч) будет, достаточно жестоко, напрягать базу данных, как оптимизировать можно найти кучу статей в интернете, но основной принцип работает =)

Поделиться сообщением


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

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

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

Поделиться сообщением


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

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

Поделиться сообщением


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

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

Поделиться сообщением


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

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

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

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

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