KoaRT

[Решено] Изменение Модуля Latest. Как?

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

KoaRT    0

В общем искал-искал.. в поиске не нашел.

Идея такая, нужно отобразить на главное в модуле latest не последние 8 или сколько по лимиту, а все. а уж по лимиту нужно разбивать на страницы. понимаю что решение можно найти в самом движке магаза, например в показе товара по категории. а вот как это применить в тот модуль? с движком магазина знаком чуть меньше недели, поэтому со многим ещё не разобрался.

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


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

простите, а на кой черт "на главной страницы" ?

к тому же

не последние 8 или сколько по лимиту, а все.

выдаст вам все ваши "десятки-сотни-тысячи-десяткитысяч" товаров.

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


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

данный ответ был прогнозируем. "на кой черт" - это мои заморочки. мне нужно это дело разбить на страницы. ведь в конечном запросе к базе "LIMIT $start_rec, $finish_rec" никто не отменяет.

Изменено пользователем afwollis
overquote detected :o)

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


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

Мы несколько о разном говорим...

Ну да ладно, вот вам решение:

Открываем

catalog/controller/module/latest.php
1. После

$this->data['products'] = array();
вставляем

/* webme - latest ALL - mod - part_#1 - start */
		if (isset($this->request->get['page'])) {
			$page = $this->request->get['page'];
		} else {
			$page = 1;
		}
		
		$w_startFrom = ($page - 1) * $this->config->get('latest_limit'); /* start from */
		$w_limit = $this->config->get('latest_limit'); /* products per page */
		
		$latest_total = $this->model_catalog_product->w_getTotalLatestProducts();
		/* webme - latest ALL - mod - part_#1 - end */
2. Меняем

$results = $this->model_catalog_product->getLatestProducts($this->config->get('latest_limit'));
на

//$results = $this->model_catalog_product->getLatestProducts($this->config->get('latest_limit'));
		$results = $this->model_catalog_product->w_getLatestProducts($w_startFrom, $w_limit);
3. Перед

if ($this->config->get('latest_position') == 'home') {
			$this->data['heading_title'] .= (' ' . $this->language->get('text_products'));
вставляем

/* webme - latest ALL - mod - part_#3 - start */
		$pagination = new Pagination();
		$pagination->total = $latest_total;
		$pagination->page = $page;
		$pagination->limit = $this->config->get('latest_limit');
		$pagination->text = $this->language->get('text_pagination');
		$pagination->url = $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?page={page}');
		$this->data['pagination'] = $pagination->render();
		/* webme - latest ALL - mod - part_#3 - end */

Открываем

catalog/view/theme/default/template/module/latest_home.tpl
4. Вставляем

<div class="pagination"><?php echo $pagination; ?></div>
у меня так

</tr>
    <?php } ?>
  </table>
    <div class="pagination"><?php echo $pagination; ?></div>
</div>

<div class="bottom">
  <div class="left"></div>
  <div class="right"></div>
  <div class="center"></div>
</div>
<?php } ?>

Открываем

catalog/model/catalog/product.php
5. После

public function getLatestProducts($limit) {
		$product_data = $this->cache->get('product.latest.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $limit);
		
		if (!$product_data) {
			$query = $this->db->query("SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating 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) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit);
			
			$product_data = $query->rows;
			
			$this->cache->set('product.latest.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $limit, $product_data);
		}
		
		return $product_data;
	}
вставляем

/* webme - latest ALL - mod - part_#1 - start */
	public function w_getTotalLatestProducts() {
		$wTotalLatest = $this->cache->get('product.wTotalLatest.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id'));
		
		if (!$wTotalLatest) {
			$query = $this->db->query("SELECT COUNT(*) AS wTotalLatest 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) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY p.date_added DESC");
			
			$wTotalLatest = $query->row["wTotalLatest"];
			
			$this->cache->set('product.wTotalLatest.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id'), $wTotalLatest);
		}
		
		return $wTotalLatest;
	}
	
	public function w_getLatestProducts($start=0, $limit=8) {
		$product_data = $this->cache->get('product.wLatest.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.'.$start.'.'.$limit);
		
		if (!$product_data) {
			$query = $this->db->query("SELECT *, pd.name AS name, p.image, m.name AS manufacturer, ss.name AS stock, (SELECT AVG(r.rating) FROM " . DB_PREFIX . "review r WHERE p.product_id = r.product_id GROUP BY r.product_id) AS rating 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) WHERE p.status = '1' AND p.date_available <= NOW() AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$start .", ". (int)$limit);
			
			$product_data = $query->rows;
			
			$this->cache->set('product.wLatest.' . $this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.'.$start.'.'.$limit, $product_data);
		}
		
		return $product_data;
	}
	/* webme - latest ALL - mod - part_#1 - end */

Все равно считаю это дикостью... https://opencartforum.com/public/style_emoticons/default/dry.gif

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


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

Благодарствую. утром попробую.. а на счёт дикости... ну дык. я тока с гор спустился. ещё мех не облысел :)

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


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

помогло.

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


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

Здравствуйте,

О какой версии движка идет речь?

У меня почему-то нет некоторых строк, если точнее то 2 и 3 пункт не могу найти.

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


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

opencart 149x

ocstore 017-022

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


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

Можно довести работоспособность этой фичы до актуальной версии?
Заранее Благодарю.

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


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

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

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