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

Мини описание товара в категории (ошибка null) нужна помощь


kiggo

Recommended Posts

День добрый. 

 

Сразу прошу ногами не пинать - я только учусь :)

 

Есть необходимость добавить мини описание товара в категории.

 

в category.php

 

$this->data['products'][] = array(
'product_id'  => $result['product_id'],
'thumb'       => $image,
'thumbwidth'  => $imagewidth,
'thumbheight' => $imageheight,
'name'        => $result['name'],
'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',
'description_mini' => html_entity_decode ($result['description_mini']),
'price'       => $price,
'special'     => $special,
'tax'         => $tax,
'rating'      => $result['rating'],
'reviews'     => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
);
}
 
 
в category.tpl добавил по аналогии
html += '<div class="name">' + $(element).find('.name').html() + '</div>';
   html += '<div class="desc_mini">' + $(element).find('.description_mini').html() + '</div>';
var price = $(element).find('.price').html();
 
if (price != null) {
html += '<div class="price">' + price  + '</div>';
}
html += '<div class="description">' + $(element).find('.description').html() + '</div>';
 
 
в результате хотелось бы получить вывод мини описания а получаю null
 
Очень буду благодарен за помощь.
 

post-670964-0-20438700-1417609324_thumb.png

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


в category.tpl добавил по аналогии
html += '<div class="name">' + $(element).find('.name').html() + '</div>';
   html += '<div class="desc_mini">' + $(element).find('.description_mini').html() + '</div>';
var price = $(element).find('.price').html();

 

 

 

и для сетки и для списка?

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

Если вы не редактировали модель, то:

Ошибка для начала здесь:

'description_mini' => html_entity_decode ($result['description_mini']),

 

Должно быть, к примеру:

'description_mini' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 100) . '..',

 

И для тплки вы добавили див в нужное место ? <div class="description_mini"><?php echo $product['description_mini]; ?></div>

 

Я так понимаю будет еще вид отображения товаров списком с "полным" описанием?

Может тогда, чтобы не дублировать контент, пойти путем открывания в CSS отображения описания товара в виде сетка и ограничить просто видимую высоту блока описания?

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


1. Отредактировал модель:

'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300),

'description_mini' => utf8_substr(strip_tags(html_entity_decode($result['description_mini'], ENT_QUOTES, 'UTF-8')), 0, 15),
 
Ошибка не изменилась.
 
DIV стоит на своем месте.
 
Полое описание будет отображаться в виде сетка, вместе с мини описанием - контент не дублируется.
В моем случае выводиться описание до 15 знаков 
Надіслати
Поділитися на інших сайтах


Если интересно, я мини описание добавил отдельной переменной. Естественно, добавил в таблицу описаний новое поле (short_descr) и сделал его вывод именно в списке товаров категории. Правда у меня этот вывод для списка, а не для сетки. Условие - если короткое описание заполнено - выводится короткое описание, если не заполнено - выводится полное описание.

Необходимо редактировать несколько файлов:

 

Для вывода - сам шаблон вывода, контроллер в папке catalog

\catalog\view\theme\default\template\product\category.tpl

\catalog\controller\product\category.php

Для сохранения через карточку товара - сам шаблон карточки товара и контроллер этой карточки в папке admin

\admin\view\template\catalog\product_form.tpl

\admin\controller\catalog\product.php

Ну и, естественно, языковый файл в папке admin

\admin\language\russian\catalog\product.php

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


Для вывода я вам написал, какие файлы править.

Находите там место, куда надо выводить и вставляете код вывода.

Вот мой код из файла category.tpl:

<div class="description">
 <?php if (!isset($product['short_descr'])) { ?>
  <?php echo $product['description']; ?>
 <?php } else { ?>
  <?php echo $product['short_descr']; ?>
 <?php } ?>
</div>

У вас будет вместо short_descr description_mini

Ну и условие вывода надо прописывать для сетки, а не для списка

 

Тоже самое, кстати, для поиска не мешает сделать.

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


kiggo

 

Тогда выложите здесь под спойлером содержимое трех файлов:

catalog/model/catalog/product.php

catalog/controller/product/category.php

catalog/view/theme/*******/template/product/category.tpl

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


catalog/model/catalog/product.php

<?php

class ModelCatalogProduct extends Model {
 
private $FOUND_ROWS;
 
public function getFoundProducts() {
return $this->FOUND_ROWS;
}
 
public function updateViewed($product_id) {
$this->db->query("UPDATE " . DB_PREFIX . "product SET viewed = (viewed + 1) WHERE product_id = '" . (int)$product_id . "'");
}
 
public function getProduct($product_id) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
$query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order 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) WHERE p.product_id = '" . (int)$product_id . "' AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
 
if ($query->num_rows) {
return array(
'product_id'       => $query->row['product_id'],
'seo_title'        => $query->row['seo_title'],
'seo_h1'           => $query->row['seo_h1'],
'name'             => $query->row['name'],
'description'      => $query->row['description'],
'description_mini' => $query->row['description_mini'],
'meta_description' => $query->row['meta_description'],
'meta_keyword'     => $query->row['meta_keyword'],
'tag'              => $query->row['tag'],
'model'            => $query->row['model'],
'sku'              => $query->row['sku'],
'upc'              => $query->row['upc'],
'ean'              => $query->row['ean'],
'jan'              => $query->row['jan'],
'isbn'             => $query->row['isbn'],
'mpn'              => $query->row['mpn'],
'location'         => $query->row['location'],
'quantity'         => $query->row['quantity'],
'stock_status'     => $query->row['stock_status'],
'image'            => $query->row['image'],
'manufacturer_id'  => $query->row['manufacturer_id'],
'manufacturer'     => $query->row['manufacturer'],
'price'            => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']),
'special'          => $query->row['special'],
'reward'           => $query->row['reward'],
'points'           => $query->row['points'],
'tax_class_id'     => $query->row['tax_class_id'],
'date_available'   => $query->row['date_available'],
'weight'           => $query->row['weight'],
'weight_class_id'  => $query->row['weight_class_id'],
'length'           => $query->row['length'],
'width'            => $query->row['width'],
'height'           => $query->row['height'],
'length_class_id'  => $query->row['length_class_id'],
'subtract'         => $query->row['subtract'],
'rating'           => round($query->row['rating']),
'reviews'          => $query->row['reviews'] ? $query->row['reviews'] : 0,
'minimum'          => $query->row['minimum'],
'sort_order'       => $query->row['sort_order'],
'status'           => $query->row['status'],
'date_added'       => $query->row['date_added'],
'date_modified'    => $query->row['date_modified'],
'viewed'           => $query->row['viewed']
);
} else {
return false;
}
}
 
public function getProducts($data = array()) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
if (!empty($data['coolfilter'])) {
$coolfilter = $data['coolfilter'];
} else {
$coolfilter = 0;
}
 
// Start coolfilter
$currency_value = $this->currency->getValue();
$tax_rate = $this->tax->getTax(100, 9);
 
$sql_add_table_prices = '';
$sql_where_prices = '';
$sql_where_manufacteurs = '';
$sql_add_table_options = '';
$sql_where_options = '';
$sql_add_table_attributes = '';
$sql_where_attributes = '';
//standart filter
$sql_add_table_parameters = '';
$sql_where_parameters = '';
//standart filter
if ($coolfilter) {
 
 
 
 foreach (explode(';', $coolfilter) as $option) {
$values = explode(':', $option);
 
 
if ($values[0] == 'm' && preg_match('/^[\d\,]*$/', $values[1])) {
$sql_where_manufacteurs = ' AND p.manufacturer_id IN (' . $this->db->escape($values[1]) . ')';
}
if (preg_match('/o_\d+/', $values[0]) && preg_match('/^[\d\,]*$/', $values[1])) {
$option_id = $this->db->escape($values[0]);
$sql_add_table_options .= ' LEFT JOIN ' . DB_PREFIX . 'product_option_value pov' . $option_id . ' ON (p.product_id = pov' . $option_id . '.product_id)';
 
$sql_where_options .= ' AND pov' . $option_id . '.option_value_id IN (' . $this->db->escape($values[1]) .') AND (pov' . $option_id . '.subtract=0 OR pov' . $option_id . '.subtract=1 AND pov' . $option_id . '.quantity > 0)';
}
 
 
if (preg_match('/a_\d+/', $values[0])) {
 
 
 
$attribute_id = $this->db->escape($values[0]);
$sql_add_table_attributes .= " LEFT JOIN " . DB_PREFIX . "product_attribute atr" . $attribute_id . " ON (p.product_id = atr" . $attribute_id . ".product_id)";
$get_id = explode("_", $values[0]);
 
$values[1] = explode(",", $values[1]);
for ($i = 0; $i < count($values[1]); $i++) {
$values[1][$i] = $this->db->escape($values[1][$i]);
}
 
$values[1] = "'" . implode("','", $values[1]) . "'";
 
$sql_where_attributes .= " AND (atr" . $attribute_id . ".language_id = '" . (int)$this->config->get('config_language_id') . "' AND atr" . $attribute_id . ".attribute_id = '" . (int)$get_id[1] . "' AND atr" . $attribute_id . ".text IN (" . $values[1] . "))";
}
 
if ($values[0] == 'p') {
 
$values[1] = explode(",", $values[1]);
if (!isset($values[1][0])) {
$values[1][0] = 0;
} else {
$values[1][0] /= $currency_value;
}
 
if (!isset($values[1][1])) {
$values[1][1] = 9999999999;
} else {
$values[1][1] /= $currency_value;
}
 
for ($i = 0; $i < 2; $i++) {
$values[1][$i] = $this->db->escape($values[1][$i]);
}
 
if (!empty($data['coolfilter_category_id'])) {
$category_id = ' AND ct.category_id IN (' . $data['coolfilter_category_id'] . ')';
} else {
$category_id = '';
}
 
$sql_add_table_prices .= " LEFT JOIN (SELECT pr.product_id, pr.price, (SELECT pd2.price FROM `" . DB_PREFIX . "product_discount` pd2 WHERE pd2.product_id = pr.product_id AND pd2.customer_group_id = '" . $customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW()))  ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) discount, (SELECT ps.price FROM `" . DB_PREFIX . "product_special` ps WHERE ps.product_id = pr.product_id AND ps.customer_group_id = '" . $customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) special FROM `" . DB_PREFIX . "product` pr LEFT JOIN `" . DB_PREFIX . "product_to_category` ct ON (pr.product_id = ct.product_id) WHERE pr.status = '1'" . $category_id . ") tb ON (p.product_id = tb.product_id)";
$sql_where_prices .= "AND tb.price >= '" . $values[1][0] . "' AND (tb.discount IS NULL OR tb.discount >= '" . $values[1][0] . "') AND (tb.special IS NULL OR tb.special >= '" . $values[1][0] . "') AND tb.price <= '" . $values[1][1] . "' AND (tb.discount IS NULL OR tb.discount <= '" . $values[1][1] . "') AND (tb.special IS NULL OR tb.special <= '" . $values[1][1] . "')";
}
//standart filter
if (preg_match('/p_\d+/', $values[0]) && preg_match('/^[\d\,]*$/', $values[1])) {
 
$parameter_id = $this->db->escape($values[0]);
 
 
$sql_add_table_parameters .= " LEFT JOIN " . DB_PREFIX . "product_filter par" . $parameter_id . " ON (p.product_id = par" . $parameter_id . ".product_id) LEFT JOIN  " . DB_PREFIX . "filter_description fd" . $parameter_id . "  ON (par" . $parameter_id . ".filter_id = fd" . $parameter_id . ".filter_id) ";
$get_id = explode("_", $values[0]);
 
$values[1] = explode(",", $values[1]);
for ($i = 0; $i < count($values[1]); $i++) {
$values[1][$i] = $this->db->escape($values[1][$i]);
 
 
}
 
$values[1] = "'" . implode("','", $values[1]) . "'";
 
$sql_where_parameters .= " AND (fd" . $parameter_id . ".language_id = '" . (int)$this->config->get('config_language_id') . "' AND par" . $parameter_id . ".filter_id IN (" . $values[1] . "))";
 
 
}
//standart filter
}
 }
 
 
// End coolfilter
 
$sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special"; 
 
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (cp.category_id = p2c.category_id)";
} else {
$sql .= " FROM " . DB_PREFIX . "product_to_category p2c";
}
 
if (!empty($data['filter_filter'])) {
$sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)";
} else {
$sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)";
}
} else {
$sql .= " FROM " . DB_PREFIX . "product p";
}
 
// start coolfilter
$sql .= $sql_add_table_options;
$sql .= $sql_add_table_attributes;
$sql .= $sql_add_table_prices;
$sql .= $sql_add_table_parameters;
// End coolfilter
 
$sql .= " 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) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";
 
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'";
} else {
$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
}
 
if (!empty($data['filter_filter'])) {
$implode = array();
 
$filters = explode(',', $data['filter_filter']);
 
foreach ($filters as $filter_id) {
$implode[] = (int)$filter_id;
}
 
$sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")";
}
}
 
if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
$sql .= " AND (";
 
if (!empty($data['filter_name'])) {
$implode = array();
 
$words = explode(' ', trim(preg_replace('/\s\s+/', ' ', $data['filter_name'])));
 
foreach ($words as $word) {
$implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%'";
}
 
if ($implode) {
$sql .= " " . implode(" AND ", $implode) . "";
}
 
if (!empty($data['filter_description'])) {
$sql .= " OR pd.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
}
}
 
if (!empty($data['filter_name']) && !empty($data['filter_tag'])) {
$sql .= " OR ";
}
 
if (!empty($data['filter_tag'])) {
$sql .= "pd.tag LIKE '%" . $this->db->escape($data['filter_tag']) . "%'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.sku) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.upc) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.ean) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.jan) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.isbn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.mpn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
$sql .= ")";
}
 
if (!empty($data['filter_manufacturer_id'])) {
$sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'";
}
 
$sql .= $sql_where_manufacteurs;
$sql .= $sql_where_attributes;
$sql .= $sql_where_options;
$sql .= $sql_where_prices; //print_r($sql);
//standart filter
$sql .= $sql_where_parameters; //print_r($sql);
//standart filter
 
$sql .= " GROUP BY p.product_id";
 
$sort_data = array(
'pd.name',
'p.model',
'p.quantity',
'p.price',
'rating',
'p.sort_order',
'p.date_added'
);
 
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
} elseif ($data['sort'] == 'p.price') {
$sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)";
} else {
$sql .= " ORDER BY " . $data['sort'];
}
} else {
$sql .= " ORDER BY p.sort_order";
}
 
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC, LCASE(pd.name) DESC";
} else {
$sql .= " ASC, LCASE(pd.name) ASC";
}
 
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
 
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
 
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
 
$product_data = array();
 
$query = $this->db->query($sql);
 
foreach ($query->rows as $result) {
$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
}
 
return $product_data;
}
 
public function getProductSpecials($data = array()) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
$sql = "SELECT DISTINCT ps.product_id, (SELECT AVG(rating) FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = ps.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) 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) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) GROUP BY ps.product_id";
 
$sort_data = array(
'pd.name',
'p.model',
'ps.price',
'rating',
'p.sort_order'
);
 
if (isset($data['sort']) && in_array($data['sort'], $sort_data)) {
if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') {
$sql .= " ORDER BY LCASE(" . $data['sort'] . ")";
} else {
$sql .= " ORDER BY " . $data['sort'];
}
} else {
$sql .= " ORDER BY p.sort_order";
}
 
if (isset($data['order']) && ($data['order'] == 'DESC')) {
$sql .= " DESC, LCASE(pd.name) DESC";
} else {
$sql .= " ASC, LCASE(pd.name) ASC";
}
 
if (isset($data['start']) || isset($data['limit'])) {
if ($data['start'] < 0) {
$data['start'] = 0;
}
 
if ($data['limit'] < 1) {
$data['limit'] = 20;
}
 
$sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit'];
}
 
$product_data = array();
 
$query = $this->db->query($sql);
 
foreach ($query->rows as $result) {
$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
}
 
return $product_data;
}
 
public function getLatestProducts($limit) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
$product_data = $this->cache->get('product.latest.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . $customer_group_id . '.' . (int)$limit);
 
if (!$product_data) { 
$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.date_added DESC LIMIT " . (int)$limit);
 
foreach ($query->rows as $result) {
$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
}
 
$this->cache->set('product.latest.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id'). '.' . $customer_group_id . '.' . (int)$limit, $product_data);
}
 
return $product_data;
}
 
public function getPopularProducts($limit) {
$product_data = array();
 
$query = $this->db->query("SELECT p.product_id FROM " . DB_PREFIX . "product p LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' ORDER BY p.viewed, p.date_added DESC LIMIT " . (int)$limit);
 
foreach ($query->rows as $result) {
$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
}
 
return $product_data;
}
 
public function getBestSellerProducts($limit) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
$product_data = $this->cache->get('product.bestseller.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id'). '.' . $customer_group_id . '.' . (int)$limit);
 
if (!$product_data) { 
$product_data = array();
 
$query = $this->db->query("SELECT op.product_id, COUNT(*) AS total FROM " . DB_PREFIX . "order_product op LEFT JOIN `" . DB_PREFIX . "order` o ON (op.order_id = o.order_id) LEFT JOIN `" . DB_PREFIX . "product` p ON (op.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE o.order_status_id > '0' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' GROUP BY op.product_id ORDER BY total DESC LIMIT " . (int)$limit);
 
foreach ($query->rows as $result) {
$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
}
 
$this->cache->set('product.bestseller.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id'). '.' . $customer_group_id . '.' . (int)$limit, $product_data);
}
 
return $product_data;
}
 
public function getProductAttributes($product_id) {
$product_attribute_group_data = array();
 
$product_attribute_group_query = $this->db->query("SELECT ag.attribute_group_id, agd.name FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_group ag ON (a.attribute_group_id = ag.attribute_group_id) LEFT JOIN " . DB_PREFIX . "attribute_group_description agd ON (ag.attribute_group_id = agd.attribute_group_id) WHERE pa.product_id = '" . (int)$product_id . "' AND agd.language_id = '" . (int)$this->config->get('config_language_id') . "' GROUP BY ag.attribute_group_id ORDER BY ag.sort_order, agd.name");
 
foreach ($product_attribute_group_query->rows as $product_attribute_group) {
$product_attribute_data = array();
 
$product_attribute_query = $this->db->query("SELECT a.attribute_id, ad.name, pa.text FROM " . DB_PREFIX . "product_attribute pa LEFT JOIN " . DB_PREFIX . "attribute a ON (pa.attribute_id = a.attribute_id) LEFT JOIN " . DB_PREFIX . "attribute_description ad ON (a.attribute_id = ad.attribute_id) WHERE pa.product_id = '" . (int)$product_id . "' AND a.attribute_group_id = '" . (int)$product_attribute_group['attribute_group_id'] . "' AND ad.language_id = '" . (int)$this->config->get('config_language_id') . "' AND pa.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY a.sort_order, ad.name");
 
foreach ($product_attribute_query->rows as $product_attribute) {
$product_attribute_data[] = array(
'attribute_id' => $product_attribute['attribute_id'],
'name'         => $product_attribute['name'],
'text'         => $product_attribute['text']
);
}
 
$product_attribute_group_data[] = array(
'attribute_group_id' => $product_attribute_group['attribute_group_id'],
'name'               => $product_attribute_group['name'],
'attribute'          => $product_attribute_data
);
}
 
return $product_attribute_group_data;
}
 
public function getProductOptions($product_id) {
$product_option_data = array();
 
$product_option_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option po LEFT JOIN `" . DB_PREFIX . "option` o ON (po.option_id = o.option_id) LEFT JOIN " . DB_PREFIX . "option_description od ON (o.option_id = od.option_id) WHERE po.product_id = '" . (int)$product_id . "' AND od.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY o.sort_order");
 
foreach ($product_option_query->rows as $product_option) {
if ($product_option['type'] == 'select' || $product_option['type'] == 'radio' || $product_option['type'] == 'checkbox' || $product_option['type'] == 'image') {
$product_option_value_data = array();
 
$product_option_value_query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_option_value pov LEFT JOIN " . DB_PREFIX . "option_value ov ON (pov.option_value_id = ov.option_value_id) LEFT JOIN " . DB_PREFIX . "option_value_description ovd ON (ov.option_value_id = ovd.option_value_id) WHERE pov.product_id = '" . (int)$product_id . "' AND pov.product_option_id = '" . (int)$product_option['product_option_id'] . "' AND ovd.language_id = '" . (int)$this->config->get('config_language_id') . "' ORDER BY ov.sort_order");
 
foreach ($product_option_value_query->rows as $product_option_value) {
$product_option_value_data[] = array(
'product_option_value_id' => $product_option_value['product_option_value_id'],
'option_value_id'         => $product_option_value['option_value_id'],
'name'                    => $product_option_value['name'],
'image'                   => $product_option_value['image'],
'quantity'                => $product_option_value['quantity'],
'subtract'                => $product_option_value['subtract'],
'price'                   => $product_option_value['price'],
'price_prefix'            => $product_option_value['price_prefix'],
'weight'                  => $product_option_value['weight'],
'weight_prefix'           => $product_option_value['weight_prefix']
);
}
 
$product_option_data[] = array(
'product_option_id' => $product_option['product_option_id'],
'option_id'         => $product_option['option_id'],
'name'              => $product_option['name'],
'type'              => $product_option['type'],
'option_value'      => $product_option_value_data,
'required'          => $product_option['required']
);
} else {
$product_option_data[] = array(
'product_option_id' => $product_option['product_option_id'],
'option_id'         => $product_option['option_id'],
'name'              => $product_option['name'],
'type'              => $product_option['type'],
'option_value'      => $product_option['option_value'],
'required'          => $product_option['required']
);
}
}
 
return $product_option_data;
}
 
public function getProductDiscounts($product_id) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_discount WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND quantity > 1 AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY quantity ASC, priority ASC, price ASC");
 
return $query->rows;
}
 
public function getProductImages($product_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_image WHERE product_id = '" . (int)$product_id . "' ORDER BY sort_order ASC");
 
return $query->rows;
}
 
public function getProductRelated($product_id) {
$product_data = array();
 
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
 
foreach ($query->rows as $result) { 
$product_data[$result['related_id']] = $this->getProduct($result['related_id']);
}
 
return $product_data;
}
 
public function getProductRelated2($product_id) {
$product_data = array();
 
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related2 pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
 
foreach ($query->rows as $result) { 
$product_data[$result['related_id']] = $this->getProduct($result['related_id']);
}
 
return $product_data;
}
 
public function getArticleRelated($product_id) {
$article_data = array();
$this->load->model('blog/article');
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "blog_related_product np LEFT JOIN " . DB_PREFIX . "article p ON (np.article_id = p.article_id) LEFT JOIN " . DB_PREFIX . "article_to_store p2s ON (p.article_id = p2s.article_id) WHERE np.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");
 
foreach ($query->rows as $result) { 
$article_data[$result['article_id']] = $this->model_blog_article->getArticle($result['article_id']);
}
 
return $article_data;
}
 
public function getProductLayoutId($product_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_layout WHERE product_id = '" . (int)$product_id . "' AND store_id = '" . (int)$this->config->get('config_store_id') . "'");
 
if ($query->num_rows) {
return $query->row['layout_id'];
} else {
return false;
}
}
 
public function getCategories($product_id) {
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . (int)$product_id . "'");
 
return $query->rows;
}
 
public function getTotalProducts($data = array()) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
// Start coolfilter
if (!empty($data['coolfilter'])) {
$coolfilter = $data['coolfilter'];
} else {
$coolfilter = 0;
}
 
 
$currency_value = $this->currency->getValue();
 
$sql_add_table_prices = '';
$sql_where_prices = '';
$sql_where_manufacteurs = '';
$sql_add_table_options = '';
$sql_where_options = '';
$sql_add_table_attributes = '';
$sql_where_attributes = '';
//standart filter
$sql_add_table_parameters  = '';
$sql_where_parameters  = '';
//standart filter
 
if ($coolfilter) {
 
 foreach (explode(';', $coolfilter) as $option) {
$values = explode(':', $option);
 
 
if ($values[0] == 'm' && preg_match('/^[\d\,]*$/', $values[1])) {
$sql_where_manufacteurs = ' AND p.manufacturer_id IN (' . $this->db->escape($values[1]) . ')';
}
if (preg_match('/o_\d+/', $values[0]) && preg_match('/^[\d\,]*$/', $values[1])) {
$option_id = $this->db->escape($values[0]);
$sql_add_table_options .= ' LEFT JOIN ' . DB_PREFIX . 'product_option_value pov' . $option_id . ' ON (p.product_id = pov' . $option_id . '.product_id)';
$values[1] = preg_replace("/[^0-9\,]/", "", $values[1]);
$sql_where_options .= ' AND pov' . $option_id . '.option_value_id IN (' . $this->db->escape($values[1]) .') AND (pov' . $option_id . '.subtract=0 OR pov' . $option_id . '.subtract=1 AND pov' . $option_id . '.quantity > 0)';
}
if (preg_match('/a_\d+/', $values[0])) {
$attribute_id = $this->db->escape($values[0]);
$sql_add_table_attributes .= ' LEFT JOIN ' . DB_PREFIX . 'product_attribute atr' . $attribute_id . ' ON (p.product_id = atr' . $attribute_id . '.product_id)';
$get_id = explode("_", $values[0]);
 
$values[1] = explode(",", $values[1]);
for ($i = 0; $i < count($values[1]); $i++) {
$values[1][$i] = $this->db->escape($values[1][$i]);
}
 
$values[1] = "'" . implode("','", $values[1]) . "'";
 
$sql_where_attributes .= " AND (atr" . $attribute_id . ".language_id = '" . (int)$this->config->get('config_language_id') . "' AND atr" . $attribute_id . ".attribute_id = '" . (int)$get_id[1] . "' AND atr" . $attribute_id . ".text IN (" . $values[1] . "))";
}
if ($values[0] == 'p') {
 
if (isset($values[1])) {
   $values[1] = explode(",", $values[1]);
}
 
if (!isset($values[1][0])) {
$values[1][0] = 0;
} else {
$values[1][0] = $values[1][0]/$currency_value;
 
}
 
if (!isset($values[1][1])) {
$values[1][1] = 9999999;
} else {
$values[1][1] = $values[1][1]/$currency_value;
}
 
for ($i = 0; $i < 2; $i++) {
$values[1][$i] = (float)$values[1][$i];
}
 
if (!empty($data['coolfilter_category_id'])) {
$category_id = ' AND ct.category_id IN (' . $data['coolfilter_category_id'] . ')';
} else {
$category_id = '';
}
 
$sql_add_table_prices .= " LEFT JOIN (SELECT pr.product_id, pr.price, (SELECT pd2.price FROM `" . DB_PREFIX . "product_discount` pd2 WHERE pd2.product_id = pr.product_id AND pd2.customer_group_id = '" . $customer_group_id . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW()))  ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) discount, (SELECT ps.price FROM `" . DB_PREFIX . "product_special` ps WHERE ps.product_id = pr.product_id AND ps.customer_group_id = '" . $customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) special FROM `" . DB_PREFIX . "product` pr LEFT JOIN `" . DB_PREFIX . "product_to_category` ct ON (pr.product_id = ct.product_id) WHERE pr.status = '1'" . $category_id . ") tb ON (p.product_id = tb.product_id)";
$sql_where_prices .= "AND tb.price >= '" . $values[1][0] . "' AND (tb.discount IS NULL OR tb.discount >= '" . $values[1][0] . "') AND (tb.special IS NULL OR tb.special >= '" . $values[1][0] . "') AND tb.price <= '" . $values[1][1] . "' AND (tb.discount IS NULL OR tb.discount <= '" . $values[1][1] . "') AND (tb.special IS NULL OR tb.special <= '" . $values[1][1] . "')";
}
 
 
//standart filter
 
if (preg_match('/p_\d+/', $values[0]) && preg_match('/^[\d\,]*$/', $values[1])) {
$parameter_id = $this->db->escape($values[0]);
 
$sql_add_table_parameters .= " LEFT JOIN " . DB_PREFIX . "product_filter par" . $parameter_id . " ON (p.product_id = par" . $parameter_id . ".product_id) LEFT JOIN  " . DB_PREFIX . "filter_description fd" . $parameter_id . "  ON (par" . $parameter_id . ".filter_id = fd" . $parameter_id . ".filter_id) ";
$get_id = explode("_", $values[0]);
 
$values[1] = explode(",", $values[1]);
for ($i = 0; $i < count($values[1]); $i++) {
$values[1][$i] = $this->db->escape($values[1][$i]);
 
 
}
 
$values[1] = "'" . implode("','", $values[1]) . "'";
 
$sql_where_parameters .= " AND (fd" . $parameter_id . ".language_id = '" . (int)$this->config->get('config_language_id') . "' AND par" . $parameter_id . ".filter_id IN (" . $values[1] . "))";// 
}
}
 
// End coolfilter
 
$sql = "SELECT COUNT(DISTINCT p.product_id) AS total"; 
 
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (cp.category_id = p2c.category_id)";
} else {
$sql .= " FROM " . DB_PREFIX . "product_to_category p2c";
}
 
if (!empty($data['filter_filter'])) {
$sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)";
} else {
$sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)";
}
} else {
$sql .= " FROM " . DB_PREFIX . "product p";
}
 
// start coolfilter
$sql .= $sql_add_table_options;
$sql .= $sql_add_table_attributes;
$sql .= $sql_add_table_prices;
// End coolfilter
//standart filter
$sql .= $sql_add_table_parameters;
//standart filter
 
$sql .= " 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) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";
 
if (!empty($data['filter_category_id'])) {
if (!empty($data['filter_sub_category'])) {
$sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'";
} else {
$sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'";
}
 
if (!empty($data['filter_filter'])) {
$implode = array();
 
$filters = explode(',', $data['filter_filter']);
 
foreach ($filters as $filter_id) {
$implode[] = (int)$filter_id;
}
 
$sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")";
}
}
 
if (!empty($data['filter_name']) || !empty($data['filter_tag'])) {
$sql .= " AND (";
 
if (!empty($data['filter_name'])) {
$implode = array();
 
$words = explode(' ', trim(preg_replace('/\s\s+/', ' ', $data['filter_name'])));
 
foreach ($words as $word) {
$implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%'";
}
 
if ($implode) {
$sql .= " " . implode(" AND ", $implode) . "";
}
 
if (!empty($data['filter_description'])) {
$sql .= " OR pd.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'";
}
}
 
if (!empty($data['filter_name']) && !empty($data['filter_tag'])) {
$sql .= " OR ";
}
 
if (!empty($data['filter_tag'])) {
$sql .= "pd.tag LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_tag'])) . "%'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.sku) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.upc) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.ean) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.jan) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.isbn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
if (!empty($data['filter_name'])) {
$sql .= " OR LCASE(p.mpn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'";
}
 
$sql .= ")";
}
 
if (!empty($data['filter_manufacturer_id'])) {
$sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'";
}
 
$sql .= $sql_where_manufacteurs;
$sql .= $sql_where_attributes;
$sql .= $sql_where_options;
$sql .= $sql_where_prices; //print_r($sql.'<br><br>');
//standart filter
$sql .= $sql_where_parameters;
//standart filter
 
 
$query = $this->db->query($sql);
 
return $query->row['total'];
}
 
public function getProfiles($product_id) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
return $this->db->query("SELECT `pd`.* FROM `" . DB_PREFIX . "product_profile` `pp` JOIN `" . DB_PREFIX . "profile_description` `pd` ON `pd`.`language_id` = " . (int)$this->config->get('config_language_id') . " AND `pd`.`profile_id` = `pp`.`profile_id` JOIN `" . DB_PREFIX . "profile` `p` ON `p`.`profile_id` = `pd`.`profile_id` WHERE `product_id` = " . (int)$product_id . " AND `status` = 1 AND `customer_group_id` = " . (int)$customer_group_id . " ORDER BY `sort_order` ASC")->rows;
 
}
 
public function getProfile($product_id, $profile_id) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
return $this->db->query("SELECT * FROM `" . DB_PREFIX . "profile` `p` JOIN `" . DB_PREFIX . "product_profile` `pp` ON `pp`.`profile_id` = `p`.`profile_id` AND `pp`.`product_id` = " . (int)$product_id . " WHERE `pp`.`profile_id` = " . (int)$profile_id . " AND `status` = 1 AND `pp`.`customer_group_id` = " . (int)$customer_group_id)->row;
}
 
public function getProductRelated_by_category($category_id, $limit) {
 
$product_data = array();
 
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related_wb pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.category_id = '" . (int)$category_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' LIMIT " . (int)$limit); 
 
foreach ($query->rows as $result) { 
$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
}
return $product_data;
}
 
public function getProductRelated_by_manufacturer($manufacturer_id, $limit) {
 
$product_data = array();
 
$query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related_mn pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.manufacturer_id = '" . (int)$manufacturer_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' LIMIT " . (int)$limit); 
 
foreach ($query->rows as $result) { 
$product_data[$result['product_id']] = $this->getProduct($result['product_id']);
}
return $product_data;
}
 
public function getTotalProductSpecials() {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
 
$query = $this->db->query("SELECT COUNT(DISTINCT ps.product_id) AS total FROM " . DB_PREFIX . "product_special ps LEFT JOIN " . DB_PREFIX . "product p ON (ps.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND ps.customer_group_id = '" . (int)$customer_group_id . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW()))");
 
if (isset($query->row['total'])) {
return $query->row['total'];
} else {
return 0;
}
}
}

?>

 

 

catalog/controller/product/category.php

<?php 
class ControllerProductCategory extends Controller {  
public function index() { 
$this->language->load('product/category');
 
$this->load->model('catalog/category');
 
$this->load->model('catalog/product');
 
$this->load->model('tool/image'); 
 
if (isset($this->request->get['filter'])) {
$filter = $this->request->get['filter'];
$this->document->setRobots('noindex,follow');
} else {
$filter = '';
}
 
if (isset($this->request->get['sort'])) {
$sort = $this->request->get['sort'];
$this->document->setRobots('noindex,follow');
} else {
$sort = 'p.sort_order';
}
 
if (isset($this->request->get['order'])) {
$order = $this->request->get['order'];
} else {
$order = 'ASC';
}
 
if (isset($this->request->get['coolfilter'])) {
       $coolfilter = $this->request->get['coolfilter'];
$this->document->setRobots('noindex,follow');
} else {
       $coolfilter = '';
}
 
if (isset($this->request->get['page'])) {
$page = $this->request->get['page'];
$this->document->setRobots('noindex,follow');
} else { 
$page = 1;
}
 
if (isset($this->request->get['limit'])) {
$limit = $this->request->get['limit'];
$this->document->setRobots('noindex,follow');
} else {
$limit = $this->config->get('config_catalog_limit');
}
 
$this->data['breadcrumbs'] = array();
 
$this->data['breadcrumbs'][] = array(
'text'      => $this->language->get('text_home'),
'href'      => $this->url->link('common/home'),
'separator' => false
);
 
if (isset($this->request->get['path'])) {
$url = '';
 
if (isset($this->request->get['sort'])) {
$url .= '&sort=' . $this->request->get['sort'];
}
 
if (isset($this->request->get['order'])) {
$url .= '&order=' . $this->request->get['order'];
}
 
if (isset($this->request->get['coolfilter'])) {
         $url .= '&coolfilter=' . $this->request->get['coolfilter'];
       }
 
if (isset($this->request->get['limit'])) {
$url .= '&limit=' . $this->request->get['limit'];
}
 
$path = '';
 
$parts = explode('_', (string)$this->request->get['path']);
 
$category_id = (int)array_pop($parts);
 
foreach ($parts as $path_id) {
if (!$path) {
$path = (int)$path_id;
} else {
$path .= '_' . (int)$path_id;
}
 
$category_info = $this->model_catalog_category->getCategory($path_id);
 
if ($category_info || $path_id == 0) {
 
if ($path_id == 0) {
$category_info['name'] = $this->language->get('text_all_products');
}
$this->data['breadcrumbs'][] = array(
'text'      => $category_info['name'],
'href'      => $this->url->link('product/category', 'path=' . $path . $url),
'separator' => $this->language->get('text_separator')
);
}
}
} else {
$category_id = 0;
}
 
$category_info = $this->model_catalog_category->getCategory($category_id);
 
if ($category_info || $category_id == 0) {
if ($category_id == 0) {
$category_info = array('name' => $this->language->get('text_all_products'),
'seo_title' => '',
'meta_description' => '',
'meta_keyword' => '',
'seo_h1' => $this->language->get('text_all_products'),
'image' => '',
'description' => '');
//india style fix
$this->request->get['path'] = 0;
//india style fix
}
 
if ($category_info['seo_title']) {
  $this->document->setTitle($category_info['seo_title']);
} else {
  $this->document->setTitle($category_info['name']);
}
 
$this->document->setDescription($category_info['meta_description']);
$this->document->setKeywords($category_info['meta_keyword']);
 
if ($category_info['seo_h1']) {
$this->data['heading_title'] = $category_info['seo_h1'];
} else {
$this->data['heading_title'] = $category_info['name'];
}
 
$this->document->addScript('catalog/view/javascript/jquery/jquery.total-storage.min.js');
$this->document->addScript('catalog/view/javascript/jquery/jail/jail.min.js');
 
$this->data['text_refine'] = $this->language->get('text_refine');
$this->data['text_empty'] = $this->language->get('text_empty');
$this->data['text_quantity'] = $this->language->get('text_quantity');
$this->data['text_manufacturer'] = $this->language->get('text_manufacturer');
$this->data['text_model'] = $this->language->get('text_model');
$this->data['text_price'] = $this->language->get('text_price');
$this->data['text_tax'] = $this->language->get('text_tax');
$this->data['text_points'] = $this->language->get('text_points');
$this->data['text_compare'] = sprintf($this->language->get('text_compare'), (isset($this->session->data['compare']) ? count($this->session->data['compare']) : 0));
$this->data['text_display'] = $this->language->get('text_display');
$this->data['text_list'] = $this->language->get('text_list');
$this->data['text_grid'] = $this->language->get('text_grid');
$this->data['text_sort'] = $this->language->get('text_sort');
$this->data['text_limit'] = $this->language->get('text_limit');
 
$this->data['button_cart'] = $this->language->get('button_cart');
$this->data['button_wishlist'] = $this->language->get('button_wishlist');
$this->data['button_compare'] = $this->language->get('button_compare');
$this->data['button_continue'] = $this->language->get('button_continue');
 
// Set the last category breadcrumb
$url = '';
 
if (isset($this->request->get['sort'])) {
$url .= '&sort=' . $this->request->get['sort'];
}
 
if (isset($this->request->get['order'])) {
$url .= '&order=' . $this->request->get['order'];
}
 
if (isset($this->request->get['coolfilter'])) {
         $url .= '&coolfilter=' . $this->request->get['coolfilter'];
       }
 
if (isset($this->request->get['page'])) {
$url .= '&page=' . $this->request->get['page'];
}
 
if (isset($this->request->get['coolfilter'])) {
         $url .= '&coolfilter=' . $this->request->get['coolfilter'];
       }
 
if (isset($this->request->get['limit'])) {
$url .= '&limit=' . $this->request->get['limit'];
}
 
$this->data['breadcrumbs'][] = array(
'text'      => $category_info['name'],
'href'      => $this->url->link('product/category', 'path=' . $this->request->get['path']),
'separator' => $this->language->get('text_separator')
);
 
if ($category_info['image']) {
$this->data['thumb'] = $this->model_tool_image->resize($category_info['image'], $this->config->get('config_image_category_width'), $this->config->get('config_image_category_height'));
$this->document->setOgImage($this->data['thumb']);
} else {
$this->data['thumb'] = '';
}
 
$this->data['description'] = html_entity_decode($category_info['description'], ENT_QUOTES, 'UTF-8');
$this->data['compare'] = $this->url->link('product/compare');
 
$url = '';
 
if (isset($this->request->get['filter'])) {
$url .= '&filter=' . $this->request->get['filter'];
}
 
if (isset($this->request->get['sort'])) {
$url .= '&sort=' . $this->request->get['sort'];
}
 
if (isset($this->request->get['order'])) {
$url .= '&order=' . $this->request->get['order'];
}
 
if (isset($this->request->get['coolfilter'])) {
         $url .= '&coolfilter=' . $this->request->get['coolfilter'];
       }
 
if (isset($this->request->get['limit'])) {
$url .= '&limit=' . $this->request->get['limit'];
}
 
$this->data['categories'] = array();
 
$results = $this->model_catalog_category->getCategories($category_id);
 
foreach ($results as $result) {
$data = array(
'filter_category_id'  => $result['category_id'],
'filter_sub_category' => true,
'coolfilter'         => $coolfilter
);
 
$product_total = $this->model_catalog_product->getTotalProducts($data);
 
$this->data['categories'][] = array(
'name'  => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $product_total . ')' : ''),
'count' => $product_total,
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url)
);
}
 
$this->data['products'] = array();
 
$data = array(
'filter_category_id' => $category_id,
'filter_filter'      => $filter, 
'sort'               => $sort,
'order'              => $order,
'start'              => ($page - 1) * $limit,
'limit'              => $limit,
'coolfilter'         => $coolfilter
);
 
$product_total = $this->model_catalog_product->getTotalProducts($data); 
 
$results = $this->model_catalog_product->getProducts($data);
 
foreach ($results as $result) {
if ($result['image']) {
$image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height'));
$imagewidth = $this->config->get('config_image_product_width');
$imageheight = $this->config->get('config_image_product_height');
} else {
$image = false;
$imagewidth = '';
$imageheight = '';
}
 
if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) {
$price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$price = false;
}
 
if ((float)$result['special']) {
$special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax')));
} else {
$special = false;
}
 
if ($this->config->get('config_tax')) {
$tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']);
} else {
$tax = false;
}
 
if ($this->config->get('config_review_status')) {
$rating = (int)$result['rating'];
} else {
$rating = false;
}
 
$this->data['products'][] = array(
'product_id'  => $result['product_id'],
'thumb'       => $image,
'thumbwidth'  => $imagewidth,
'thumbheight' => $imageheight,
'name'        => $result['name'],
'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300),
/*'description_mini' => utf8_substr(strip_tags(html_entity_decode($result['description_mini'], ENT_QUOTES, 'UTF-8')), 0, 15),*/
'description_mini' => html_entity_decode ($result['description_mini']),
'price'       => $price,
'special'     => $special,
'tax'         => $tax,
'rating'      => $result['rating'],
'reviews'     => sprintf($this->language->get('text_reviews'), (int)$result['reviews']),
'href'        => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url)
);
}
 
$url = '';
 
if (isset($this->request->get['filter'])) {
$url .= '&filter=' . $this->request->get['filter'];
}
 
if (isset($this->request->get['coolfilter'])) {
$url .= '&coolfilter=' . $this->request->get['coolfilter'];
}
 
if (isset($this->request->get['limit'])) {
$url .= '&limit=' . $this->request->get['limit'];
}
 
if (isset($this->request->get['coolfilter'])) {
$url .= '&coolfilter=' . $this->request->get['coolfilter'];
}
 
$this->data['sorts'] = array();
 
$this->data['sorts'][] = array(
'text'  => $this->language->get('text_default'),
'value' => 'p.sort_order-ASC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.sort_order&order=ASC' . $url)
);
 
$this->data['sorts'][] = array(
'text'  => $this->language->get('text_name_asc'),
'value' => 'pd.name-ASC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=pd.name&order=ASC' . $url)
);
 
$this->data['sorts'][] = array(
'text'  => $this->language->get('text_name_desc'),
'value' => 'pd.name-DESC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=pd.name&order=DESC' . $url)
);
 
$this->data['sorts'][] = array(
'text'  => $this->language->get('text_price_asc'),
'value' => 'p.price-ASC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=ASC' . $url)
); 
 
$this->data['sorts'][] = array(
'text'  => $this->language->get('text_price_desc'),
'value' => 'p.price-DESC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.price&order=DESC' . $url)
); 
 
if ($this->config->get('config_review_status')) {
$this->data['sorts'][] = array(
'text'  => $this->language->get('text_rating_desc'),
'value' => 'rating-DESC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=rating&order=DESC' . $url)
); 
 
$this->data['sorts'][] = array(
'text'  => $this->language->get('text_rating_asc'),
'value' => 'rating-ASC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=rating&order=ASC' . $url)
);
}
 
$this->data['sorts'][] = array(
'text'  => $this->language->get('text_model_asc'),
'value' => 'p.model-ASC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.model&order=ASC' . $url)
);
 
$this->data['sorts'][] = array(
'text'  => $this->language->get('text_model_desc'),
'value' => 'p.model-DESC',
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '&sort=p.model&order=DESC' . $url)
);
 
$url = '';
 
if (isset($this->request->get['filter'])) {
$url .= '&filter=' . $this->request->get['filter'];
}
 
if (isset($this->request->get['sort'])) {
$url .= '&sort=' . $this->request->get['sort'];
}
 
if (isset($this->request->get['order'])) {
$url .= '&order=' . $this->request->get['order'];
}
 
if (isset($this->request->get['coolfilter'])) {
$url .= '&coolfilter=' . $this->request->get['coolfilter'];
}
 
$this->data['limits'] = array();
 
$limits = array_unique(array($this->config->get('config_catalog_limit'), 25, 50, 75, 100));
 
sort($limits);
 
foreach($limits as $value){
$this->data['limits'][] = array(
'text'  => $value,
'value' => $value,
'href'  => $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&limit=' . $value)
);
}
 
$url = '';
 
if (isset($this->request->get['filter'])) {
$url .= '&filter=' . $this->request->get['filter'];
}
 
if (isset($this->request->get['sort'])) {
$url .= '&sort=' . $this->request->get['sort'];
}
 
if (isset($this->request->get['order'])) {
$url .= '&order=' . $this->request->get['order'];
}
 
if (isset($this->request->get['limit'])) {
$url .= '&limit=' . $this->request->get['limit'];
}
 
if (isset($this->request->get['coolfilter'])) {
$url .= '&coolfilter=' . $this->request->get['coolfilter'];
}
 
$pagination = new Pagination();
$pagination->total = $product_total;
$pagination->page = $page;
$pagination->limit = $limit;
$pagination->text = $this->language->get('text_pagination');
$pagination->url = $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url . '&page={page}');
 
$this->data['pagination'] = $pagination->render();
 
$this->data['sort'] = $sort;
$this->data['order'] = $order;
$this->data['limit'] = $limit;
 
$this->data['continue'] = $this->url->link('common/home');
 
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/product/category.tpl')) {
$this->template = $this->config->get('config_template') . '/template/product/category.tpl';
} else {
$this->template = 'default/template/product/category.tpl';
}
 
$this->children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/footer',
'common/header'
);
 
$this->response->setOutput($this->render());
} else {
$url = '';
 
if (isset($this->request->get['path'])) {
$url .= '&path=' . $this->request->get['path'];
}
 
if (isset($this->request->get['filter'])) {
$url .= '&filter=' . $this->request->get['filter'];
}
 
if (isset($this->request->get['sort'])) {
$url .= '&sort=' . $this->request->get['sort'];
}
 
if (isset($this->request->get['order'])) {
$url .= '&order=' . $this->request->get['order'];
}
 
if (isset($this->request->get['page'])) {
$url .= '&page=' . $this->request->get['page'];
}
 
if (isset($this->request->get['limit'])) {
$url .= '&limit=' . $this->request->get['limit'];
}
 
$this->data['breadcrumbs'][] = array(
'text'      => $this->language->get('text_error'),
'href'      => $this->url->link('product/category', $url),
'separator' => $this->language->get('text_separator')
);
 
$this->document->setTitle($this->language->get('text_error'));
 
$this->data['heading_title'] = $this->language->get('text_error');
 
$this->data['text_error'] = $this->language->get('text_error');
 
$this->data['button_continue'] = $this->language->get('button_continue');
 
$this->data['continue'] = $this->url->link('common/home');
 
$this->response->addHeader($this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found');
 
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/error/not_found.tpl')) {
$this->template = $this->config->get('config_template') . '/template/error/not_found.tpl';
} else {
$this->template = 'default/template/error/not_found.tpl';
}
 
$this->children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/footer',
'common/header'
);
 
$this->response->setOutput($this->render());
}
}
}
?>

 

 

catalog/view/theme/*******/template/product/category.tpl

<?php echo $header; ?>
<div class="<?php if ($column_right) { ?>span9<?php } else {?>span12<?php } ?>">
<div class="row">
<div class="<?php if ($column_left or $column_right) { ?>span9<?php } ?> <?php if ($column_left and $column_right) { ?>span6<?php } ?> <?php if (!$column_right and !$column_left) { ?>span12 <?php } ?>" id="content"><?php echo $content_top; ?>
  <div class="breadcrumb">
<?php foreach ($breadcrumbs as $breadcrumb) { ?>
<?php echo $breadcrumb['separator']; ?><a href="<?php echo $breadcrumb['href']; ?>"><?php echo $breadcrumb['text']; ?></a>
<?php } ?>
  </div>
  <h1 class="style-1"><?php echo $heading_title; ?></h1>
  <?php if ($thumb || $description) { ?>
  <div class="category-info">
<!--<?php if ($thumb) { ?>
<div class="image"><img src="<?php echo $thumb; ?>" alt="<?php echo $heading_title; ?>" /></div>
<?php } ?>-->
<?php if ($description) { ?>
<?php echo $description; ?>
<?php } ?>
</div>
  <?php } ?>
  <?php if ($categories) { ?>
  <div class="box subcat">
<div class="box-heading"><?php echo $text_refine; ?></div>
<div class="box-content">
 
<div class="box-product box-subcat">
<ul class="row"><?php $i=0;?>
<?php foreach ($categories as $category) { $i++; ?>
<?php 
if ($i%3==1) {
$a='first-in-line';
}
elseif ($i%3==0) {
$a='last-in-line';
}
else {
$a='';
}
?>
<li class="cat-height  span2">
<?php if ($category['thumb']) { ?>
<div class="image"><a href="<?php echo $category['href']; ?>"><img src="<?php echo $category['thumb']; ?>" alt="<?php echo $category['name']; ?>" /></a></div>
<?php } ?>
<div class="name subcatname"><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></div>
</li>
<?php } ?>
</ul>
</div>
</div>
  </div>
  <?php } ?>
  <?php if ($products) { ?>
  <div class="product-filter">
<div class="sort"><b><?php echo $text_sort; ?></b>
 <select onchange="location = this.value;">
<?php foreach ($sorts as $sorts) { ?>
<?php if ($sorts['value'] == $sort . '-' . $order) { ?>
<option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option>
<?php } else { ?>
<option value="<?php echo $sorts['href']; ?>"><?php echo $sorts['text']; ?></option>
<?php } ?>
<?php } ?>
 </select>
</div>
<div class="limit"><b><?php echo $text_limit; ?></b>
 <select onchange="location = this.value;">
<?php foreach ($limits as $limits) { ?>
<?php if ($limits['value'] == $limit) { ?>
<option value="<?php echo $limits['href']; ?>" selected="selected"><?php echo $limits['text']; ?></option>
<?php } else { ?>
<option value="<?php echo $limits['href']; ?>"><?php echo $limits['text']; ?></option>
<?php } ?>
<?php } ?>
 </select>
</div>
  <div class="product-compare"><a href="<?php echo $compare; ?>" id="compare-total"><?php echo $text_compare; ?></a></div>
<div class="display"><b><?php echo $text_display; ?></b> <?php echo $text_list; ?>  <a onclick="display('grid');"><?php echo $text_grid; ?></a></div>
  </div>
 
  <div class="product-grid">
<ul class="row">
<?php $i=0; foreach ($products as $product) { $i++; ?>
<?php 
if ($i%3==1) {
$a='first-in-line';
}
elseif ($i%3==0) {
$a='last-in-line';
}
else {
$a='';
}
?>
<li class="span3 <?php echo $a?>">
<?php if ($product['thumb']) { ?>
<div class="image"><a href="<?php echo $product['href']; ?>"><img id="img_<?php echo $product['product_id']; ?>" src="<?php echo $product['thumb']; ?>" title="<?php echo $product['name']; ?>" alt="<?php echo $product['name']; ?>" /></a></div>
 <?php } ?>
<div class="name"><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></div>
<div class="description"><?php echo $product['description']; ?></div>
<?php if ($product['price']) { ?>
<div class="price">
<?php if ($product['tax']) { ?>
<span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span>
<?php } ?>
<?php if (!$product['special']) { ?>
<?php echo $product['price']; ?>
<?php } else { ?><span class="price-new"><?php echo $product['special']; ?></span>
<span class="price-old"><?php echo $product['price']; ?></span> 
<?php } ?>
</div>
<?php } ?>
<div class="cart-button">
<div class="cart"><a onclick="addToCart('<?php echo $product['product_id']; ?>');" class="button" title="<?php echo $button_cart; ?>"><!--<i class="icon-shopping-cart"></i>--><span><?php echo $button_cart; ?></span></a></div>
<div class="wishlist"><a class="tooltip-1 " title="<?php echo $button_wishlist; ?>"  onclick="addToWishList('<?php echo $product['product_id']; ?>');"><i class="icon-star"></i></a></div>
<div class="compare"><a class="tooltip-1" title="<?php echo $button_compare; ?>"  onclick="addToCompare('<?php echo $product['product_id']; ?>');"><i class="icon-bar-chart"></i></a></div>
<div class="clear"></div>
</div>
<div class="rating">
<?php if ($product['rating']) { ?>
<img height="13" src="catalog/view/theme/kitchen/image/stars-<?php echo $product['rating']; ?>.png" alt="<?php echo $product['reviews']; ?>" />
<?php } ?>
</div>
</li>
<?php } ?>
</ul>
  </div>
  
  <div class="pagination"><?php echo $pagination; ?></div>
  <?php } ?>
  <?php if (!$categories && !$products) { ?>
  <div class="box-container">
 <div class="content"><?php echo $text_empty; ?></div>
 <div class="buttons">
<div class="right"><a href="<?php echo $continue; ?>" class="button"><span><?php echo $button_continue; ?></span></a></div>
 </div>
  </div>
  <?php } ?>
  <?php echo $content_bottom; ?></div>
  <?php echo $column_left; ?>
</div>
</div>
<?php echo $column_right; ?>
 
<script type="text/javascript"><!--
function display(view) {
if (view == 'list') {
$('.product-grid ').attr('class', 'product-list');
$('.product-list ul').removeClass('row');
$('.product-list ul li').removeClass('span3');
$('.product-list ul li').each(function(index, element) {
html = '';
html += '<div class="row">';
var image = $(element).find('.image').html();
 
if (image != null) {
html += '<div class="image span2">' + image + '</div>';
}
html += '<div class="left span7">';
html += '<div class="name">' + $(element).find('.name').html() + '</div>';
html += '<div class="description">' + $(element).find('.description').html() + '</div>';
var price = $(element).find('.price').html();
if (price != null) {
html += '<div class="price">' + price  + '</div>';
}
html += '<div class="cart-button">';
html += '<div class="cart">' + $(element).find('.cart').html() + '</div>';
html += '<div class="wishlist">' + $(element).find('.wishlist').html() + '</div>';
html += '<div class="compare">' + $(element).find('.compare').html() + '</div>';
html += '<div class="clear">' + $(element).find('.clear').html() + '</div>';
html += '</div>';
var rating = $(element).find('.rating').html();
if (rating != null) {
html += '<div class="rating">' + rating + '</div>';
}
html += '</div>';
html += '</div>';
 
 
 
$(element).html(html);
});
 
$('.display').html('<b><?php echo $text_display; ?></b> <div id="list_b"><i class="icon-list"></i></div> <a id="grid_a" onclick="display(\'grid\');"><i class="icon-th"></i></a>');
 
$.totalStorage('display', 'list'); 
} else {
$('.product-list').attr('class', 'product-grid');
$('.product-grid ul').addClass('row');
$('.product-grid ul li').addClass('span3');
$('.product-grid ul li').each(function(index, element) {
html = '';
 
var image = $(element).find('.image').html();
 
if (image != null) {
html += '<div class="image">' + image + '</div>';
}
html += '<div class="left">';
html += '<div class="name">' + $(element).find('.name').html() + '</div>';
   html += '<div class="desc_mini">' + $(element).find('description_mini').html() + '</div>';
var price = $(element).find('.price').html();
if (price != null) {
html += '<div class="price">' + price  + '</div>';
}
html += '<div class="description">' + $(element).find('.description').html() + '</div>';
 
html += '<div class="cart-button">';
html += '<div class="cart">' + $(element).find('.cart').html() + '</div>';
html += '<div class="wishlist">' + $(element).find('.wishlist').html() + '</div>';
html += '<div class="compare">' + $(element).find('.compare').html() + '</div>';
html += '<div class="clear">' + $(element).find('.clear').html() + '</div>';
html += '</div>';
var rating = $(element).find('.rating').html();
 
if (rating != null) {
html += '<div class="rating">' + rating + '</div>';
}
 
html += '</div>';
$(element).html(html);
});
 
$('.display').html('<b><?php echo $text_display; ?></b> <a id="list_a" onclick="display(\'list\');"><i class="icon-list"></i></a>  <div id="grid_b"><i class="icon-th"></i></i></div>');
 
$.totalStorage('display', 'grid');
}
if ($('body').width() > 940) {
// tooltip demo
$('.tooltip-toggle').tooltip({
selector: "a[data-toggle=tooltip]"
})
$('.tooltip-1').tooltip({
placement:'bottom'
})
$('.tooltip-2').tooltip({
placement:'top'
})
}
 
}
 
view = $.totalStorage('display');
 
if (view) {
display(view);
} else {
display('grid');
}
//--></script> 
<!--<script type="text/javascript">
(function($){$.fn.equalHeights=function(minHeight,maxHeight){tallest=(minHeight)?minHeight:0;this.each(function(){if($(this).height()>tallest){tallest=$(this).height()}});if((maxHeight)&&tallest>maxHeight)tallest=maxHeight;return this.each(function(){$(this).height(tallest)})}})(jQuery)
$(window).load(function(){
if($(".cat-height").length){
$(".cat-height").equalHeights()}
})
</script>-->
 
<?php echo $footer; ?>

 

 

Буду весьма благодарен за помощь.

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


catalog/controller/product/category.php

заменить:

'description_mini' => html_entity_decode ($result['description_mini']),

на:

'description_mini' => html_entity_decode($result['description_mini'], ENT_QUOTES, 'UTF-8'),

 

catalog/view/theme/*******/template/product/category.tpl

после:

<div class="description"><?php echo $product['description']; ?></div>

добавить:

<div class="description_mini"><?php echo $product['description_mini']; ?></div>

 

убрать:

html += '<div class="desc_mini">' + $(element).find('description_mini').html() + '</div>';

 

в 2-х местах, после:

html += '<div class="name">' + $(element).find('.name').html() + '</div>';

добавить:

html += '<div class="description_mini">' + $(element).find('.description_mini').html() + '</div>';

 

в CSS добавить стили :

.product-list .description_mini {

display: none;

}

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


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

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

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

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

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

Вхід

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

Вхід зараз

×
×
  • Створити...

Important Information

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