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

halfhope

Користувачі
  
  • Публікації

    1 750
  • З нами

  • Відвідування

Повідомлення, опубліковані користувачем halfhope

  1. Если конкретней, то

    Модель:

    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');
    	}	
    
    	$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";
    	}
    
    	$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 .= " 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;
    } 

     

    Получение товаров в контроллере:

    $data = array(
    	'filter_manufacturer_id' => $manufacturer_id, 
    	'sort'                   => $sort,
    	'order'                  => $order,
    	'start'                  => ($page - 1) * $limit,
    	'limit'                  => $limit
    );
    
    $results = $this->model_catalog_product->getProducts($data);
    
  2. Очевидно же, смотрите контроллер/модель производителя, там все есть.

     

    UPD: Сорри, поторопился. В витрине магазина есть раздел производителя, где показаны товары конкретного производителя, можно выдернуть оттуда.

  3. Вот бы было бы здорово, если бы под фото можно было бы ссылку на товар сделать..Типа купить этот товар в магазине... Пример - фотосессия с одеждой, а из нее ссылка на товар....

    Если название галереи слишком длинное, то картинка не поцентру. И нельзя перенести тест, html почему то не отрабатывается. 

     

    Фотогалерея предназначена для отображения фотографий, а не товаров. Вам же нужно просто создать модифицированный раздел категорий, где будет фотосет и ссылка на товар. Все остальное сейчас пытаюсь исправить.

  4. 2megrel, спасибо, взял за основу пока последний комментарий из ссылки, которую Вы дали.

    А так очень странно, что CMSка заточена под интернет-магазины, а такая проблема с модулями...

     

    Могу на платной основе доработать свой бесплатный модуль "Персонализованные шаблоны", чтобы можно было выбирать шаблон для модуля категорий.

  5. snastik

    из версии ocstore 1.5.4 например

     

    В точку.

     

    Нехорошо воровать чужой код!

    Могу тыкнуть пальцем откуда!

     

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

    vqmod_mcj_cacher.xml

  6. вы правы. я ошибся

    в другом файле нет условия

    https://github.com/myopencart/ocStore/blob/master/catalog/controller/product/category.php

     

    Бывает. А я с кэшированием запроса getTotalProducts ошибся, не знаю откуда его стянул, думал, что с ocStore, оказывается его там нет. 

  7. будет в любом случае. в том то и дело.

     

    Вот что вижу я

    //Показывать или нет количество товаров
    $show_product_count = $this->config->get('config_product_count');
    if ($show_product_count) { //если в настройках стоит подсчет кол-ва, то высчитываем
      $data = array(
        'filter_category_id'  => $child['category_id'],
        'filter_sub_category' => true
      );
      $product_total = $this->model_catalog_product->getTotalProducts($data);
      $total += $product_total;
    }
    

    Ткните носом если не прав

  8. патч не идеален

    выделенная строчка будет безусловно выполняться 

     

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

     

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

     

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

  9. Скорей всего проблема была в XML файле, который добавлял время генерации страницы. По скриншотам видно же, что он есть в JSON данных, где его быть не должно.

    <!-- time_gen- 0.08000 -/time_gen -->
    
×
×
  • Створити...

Important Information

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