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

SooR

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

    1 508
  • З нами

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

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

  1. LiS, сравните код с вашим в category.php

    if (isset($this->request->get['filter'])) {
      $url .= '&filter=' . $this->request->get['filter'];
    }
    
    $this->data['sorts'] = array();

    И стоит ли переменная $url во всех элементах массива sorts?

    Должно быть так:

    if (isset($this->request->get['filter'])) {

    $url .= '&filter=' . $this->request->get['filter'];

    }

    $this->data['sorts'] = array();

    $this->data['sorts'][] = array('text' => $this->language->get('text_name_asc'), 'value' => 'pd.name-ASC', 'href' => $this->model_tool_seo_url->rewrite($this->url->http('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->model_tool_seo_url->rewrite($this->url->http('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->model_tool_seo_url->rewrite($this->url->http('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->model_tool_seo_url->rewrite($this->url->http('product/category&path=' . $this->request->get['path'] . '&sort=p.price&order=DESC' . $url)));

    $this->data['sorts'][] = array('text' => $this->language->get('text_rating_desc'), 'value' => 'rating-DESC', 'href' => $this->model_tool_seo_url->rewrite($this->url->http('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->model_tool_seo_url->rewrite($this->url->http('product/category&path=' . $this->request->get['path'] . '&sort=rating&order=ASC' . $url)));

    Внимание, состав элементов массива sorts в вашей версии OpenCart может отличаться! Так что не копируйте данный код, а просто исправьте при необходимости свой.

  2. hotep, уж лучше мужчин и женщин разбить на категории, или под видом брендов. Или же делать зависимые опции (от выбранных значений), но это отдельная тема.

    Trance around the world) скиньте полный код ошибки или страницу с ошибкой. Я написал о полной совместимости с версией, указанной по ссылке.

  3. Идентичны, меняется только вид.

    Можно вытащить первые n слов из описания и управлять ним с CSS.

    Вот обрезка по словам:

    private function cropTextByWord($text, $counttext = 10, $sep = ' ') { // исходный текст, сколько слов выводить, какой разделитель для слов
        $words = split($sep, $text);
        if ( count($words) > $counttext )
        $text = join($sep, array_slice($words, 0, $counttext));
        return $text;
      }
  4. Да просто, эту строчку

    $this->data['view_mode'] = (isset($this->session->data['view_mode']) ? $this->session->data['view_mode'] : 'grid');

    Меняем на

    $this->data['view_mode'] = (isset($this->session->data['view_mode']) ? $this->session->data['view_mode'] : 'list');

    Найди 1 отличие)

    • +1 1
  5. Нисколько не против, всё на благо развития.

    Другое дело, что надо добавить еще диапазон по цене, поле для выбора где размещать опцию (везде, только в фильтре, только в характеристиках), ну и еще пару мелочей... есть идеи.

  6. Попробуйте...

    product.php

    PS>> уже залил пива, возможно где-то косяк.

    Основные методы для фильтра в категории:

    public function getProductsByCategoryId($category_id, $filter = 0, $sort = 'p.sort_order', $order = 'ASC', $start = 0, $limit = 20) {
    		$sql = "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) LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_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') . "' AND p2c.category_id = '" . (int)$category_id . "'";
    
        // Start filter
        if ($filter) {
          foreach (explode(';', $filter) as $option) {
            $values = explode('=', $option);
            $data = array();
            foreach (explode(',', $values[1]) as $value_id) {
              $query = $this->db->query("SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE value_id='" . (int)$value_id . "'");
              if ($query->rows) {
                foreach($query->rows as $row) {
                  $data[] = $row['product_id'];
                }
              } else {
                unset($data);
              }
            }
            if (!empty($data)) {
              $sql .= " AND p.product_id IN (" . implode(",", $data) . ")";
            }
          }
        }
        // End filter
    
        $sql .= " GROUP BY p.product_id";
    
    		$sort_data = array(
    			'pd.name',
    			'p.sort_order',
    			'special',
    			'rating',
    			'p.price',
    			'p.model'
    		);
    
    		if (in_array($sort, $sort_data)) {
    			if ($sort == 'pd.name' || $sort == 'p.model') {
    				$sql .= " ORDER BY LCASE(" . $sort . ")";
    			} else {
    				$sql .= " ORDER BY " . $sort;
    			}
    		} else {
    			$sql .= " ORDER BY p.sort_order";
    		}
    
    		if ($order == 'DESC') {
    			$sql .= " DESC";
    		} else {
    			$sql .= " ASC";
    		}
    
    		if ($start < 0) {
    			$start = 0;
    		}
    
    		$sql .= " LIMIT " . (int)$start . "," . (int)$limit;
    
    		$query = $this->db->query($sql);
    
    		return $query->rows;
    	}
    
    	public function getTotalProductsByCategoryId($category_id = 0, $filter = 0) {
    
        $sql = "SELECT COUNT(DISTINCT p.product_id) AS total FROM " . DB_PREFIX . "product_to_category p2c LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_value p2v ON (p.product_id = p2v.product_id) WHERE p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND p2c.category_id = '" . (int)$category_id . "'";
    
        // Start filter
        if ($filter) {
          foreach (explode(';', $filter) as $option) {
            $values = explode('=', $option);
            $data = array();
            foreach (explode(',', $values[1]) as $value_id) {
              $query = $this->db->query("SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE value_id='" . (int)$value_id . "'");
              if ($query->rows) {
                foreach($query->rows as $row) {
                  $data[] = $row['product_id'];
                }
              } else {
                unset($data);
              }
            }
            if (!empty($data)) {
              $sql .= " AND p.product_id IN (" . implode(",", $data) . ")";
            } else {
              return 0; // запрос на строке 88 ничего не вернул, а общее количество в категории нам не интересно
            }
          }
        }
        // End filter
    
        $query = $this->db->query($sql);
    
        return $query->row['total'];
      }
    
  7. Доступ к ФТП - хранятся файлы сайта и сам сайт

    Доступ к базе данных - phpMyAdmin или панель хостинга

    Доступ к хостингу и его конфигурации

    Доступ к домену и его конфигурации

  8. afwollis, уже разобрались, т.к. делался update модуля, то многие option_id в product_to_value остались в нулевом значении, что недопустимо при выборке с данным запросом

    if ($filter) {
          $options = array();
          $values = array();
          foreach (explode(';', $filter) as $option) {
            $parts = explode('=', $option);
            
            foreach (explode(',', $parts[1]) as $value_id) {
              $values[] = (int)$value_id;
            }
            $options[] = (int)$parts[0];
          }
          $sql .= " AND p2v.value_id IN (" . implode(",", $values) . ") AND p2v.option_id IN (" . implode(',', $options) . ")";
        }

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

    if ($filter) {
          foreach (explode(';', $filter) as $option) {
            $values = explode('=', $option);
            $data = array();
            foreach (explode(',', $values[1]) as $value_id) {
              $query = $this->db->query("SELECT product_id FROM " . DB_PREFIX . "product_to_value WHERE value_id='" . (int)$value_id . "'");
              if ($query->rows) {
                foreach($query->rows as $row) {
                  $data[] = $row['product_id'];
                }
              } else {
                unset($data);
              }
            }
            if (!empty($data)) {
              $sql .= " AND p.product_id IN (" . implode(",", $data) . ")";
            }
          }
        }
×
×
  • Створити...

Important Information

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