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

djfear

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

    90
  • З нами

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

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

  1. Notice: Undefined variable: model_catalog_category in /home/djfear/site/brelok70/catalog/view/theme/online-ts/template/extension/module/category.tpl on line 33

    Не могу понять причину.

    Ставлю шаблон. Это будет купленный мой 3 по счету. После установки естественно ключ куплю )

     

    Чистая установка на временный сервер по инструкции, на 2302. 

  2. Это всего лишь ваше мнение ;) Куплено у меня здесь несколько платных шаблонов как раз по средней стоимости, причем есть и не по нескольку раз. Так же куплены и модули разнообразные. 

    Так же мегА супеР пупеР верстальщики, вы бы изначально первый пост прочли. А после сидели "ныли" ;)

    Pascha

    Ну так создайте сУпер шаблон, который будет достойным на ваш взгляд. И продавайте. Каждый горазд кинуть камнем, да яйцами померится. Я лишь могу предложить варианты того, что хочу видеть в шаблоне. А как его сделать правильно, ваше решение и задача. Так ак Автор по сути вы. Я же как из этой сферы, могу рассказать что и как, и какие бренды. На то вы и верстальщик, что бы эти "бренды" красиво прилепить.

     

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

  3. В общем я буду играть роль консультанта

      :-D

    По этому сделал такой вывод. Далее шаблон поступает в продажу, и его может купить любой желающий (этим и покрывает в "30 раз дороже").

    А кому он нужен этот шаблон? Есть список желающих? Или консультанту важно получить себе индивидуальный  дизайн по бросовой цене,а дальше хоть трава не расти?

     

     

    1. Могу сейчас привести пример сразу 5 интернет магазинов Зоотоваров в моем городе созданных именно на ОС! Причем, все попросту с дефолтным дизайном..... По этому потребность, судите сами.

    http://petburg.su

    http://zanzibar-zoo.ru

    http://korm-nadom.ru

    Это только поиск в 2 минуты. По этому о спросе судите сами. 

  4. Для тех кто в Танке. Я делаю ТЗ, к примеру стоимость ставится 2тр (средняя стоимость платного шаблона). После того, как все готово, он покупается. Если же за него заломят 50тр, он нафиг не сдался. Логично? Почему мое высказывание имеет смысл? Выше спросили, что хочу в шаблоне и что от него хочу. По этому сделал такой вывод. Далее шаблон поступает в продажу, и его может купить любой желающий (этим и покрывает в "30 раз дороже").

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

    Что касаемо шаблона? Да тот же шаблон игровой от человека OC Team  ником перерисовывается под логотипы с животными, добавляются всякие лого проплана, вискаса и прочего, в картах о товаре вес, состав и прочее. ТЗ  сделать не долго. На основе уже готового шаблона, верстку сделать под определенные нужды не долго.  В общем я буду играть роль консультанта (так как понимаю что и для чего там нужно будет) и стану первым покупателем.....

  5. Понятно... я тогда, отойду в сторону))

    перенёс тему в раздел "Услуги"...

    Я не могу указать, что именно требуется. Давайте так. Огласите цену. Я тогда сделаю ТЗ по моим нуждам. Далее, если цена устраивает меня, то выкупаю шаблон, и вы его выставляете в платные. Так думаю будет проще. То есть шаблон будет делаться изначально под мои нужды.

  6. http://www.templatemonster.com/ru/category/animals-pets/

     

    Чем интересно отличается подобный шаблон от других?)))

    Тем, что нужен интернет магазин именно на данной платформе.

     

     

    пожелания, пример того, чего хотите

    Даже не знаю, как говорится красиво, практично, резиновый, все платформость. 

  7. Заменил на:

    $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 p.quantity > 0 AND pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= '" . $this->NOW . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'";

     

    Не работает ;( Все равно отображается.

  8. Либо туплю, либо нет этого:

    class ModelCatalogProduct extends Model {
    //Заменим NOW() в SQL-запросах на строку с текущим временем, но с 00 вместо секунд.
    //Тем самым мы включаем кэширование SQL-запросов на уровне сервера MySQL.
    //MySQL прекрасно кэширует запросы. Время жизни кэша - 1 минута.
    private $NOW;

    public function __construct($registry) {
    $this->NOW = date('Y-m-d H:i') . ':00';
    parent::__construct($registry);
    }

    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 < '" . $this->NOW . "') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '" . $this->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 < '" . $this->NOW . "') AND (ps.date_end = '0000-00-00' OR ps.date_end > '" . $this->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 <= '" . $this->NOW . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'");

    if ($query->num_rows) {
    return array(
    'seo_title' => $query->row['seo_title'],
    'seo_h1' => $query->row['seo_h1'],
    'product_id' => $query->row['product_id'],
    'name' => $query->row['name'],
    'description' => $query->row['description'],
    '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');
    }

    $sql = "SELECT DISTINCT SQL_CALC_FOUND_ROWS 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 < '" . $this->NOW . "') AND (pd2.date_end = '0000-00-00' OR pd2.date_end > '" . $this->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 < '" . $this->NOW . "') AND (ps.date_end = '0000-00-00' OR ps.date_end > '" . $this->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 <= '" . $this->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();
    // $product_data['sql']=$sql;
    // $this->log->($sql);
    $query = $this->db->query($sql);

    $num_query = $this->db->query("SELECT FOUND_ROWS() AS `found_rows`");
    $this->FOUND_ROWS = intval($num_query->row['found_rows']);

    foreach ($query->rows as $result) {
    $product_data[$result['product_id']] = $this->getProduct($result['product_id']);
    }
    // $product_data['sql']=$sql;
    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 <= '" . $this->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 < '" . $this->NOW . "') AND (ps.date_end = '0000-00-00' OR ps.date_end > '" . $this->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 <= '" . $this->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 <= '" . $this->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 <= '" . $this->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 < '" . $this->NOW . "') AND (date_end = '0000-00-00' OR date_end > '" . $this->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 <= '" . $this->NOW . "' AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "' AND p.quantity>0");

    foreach ($query->rows as $result) {
    if( $product_id != $result['related_id'] )$product_data[$result['related_id']] = $this->getProduct($result['related_id']);
    }

    return $product_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 $this->config->get('config_layout_product');
    }
    }

    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');
    }

    $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";
    }

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

    $query = $this->db->query($sql);

    return $query->row['total'];
    }

    public function getTotalProductsID($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 p.product_id";

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

    $query = $this->db->query($sql);

    return $query->rows;
    }

    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 <= '" . $this->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 < '" . $this->NOW . "') AND (ps.date_end = '0000-00-00' OR ps.date_end > '" . $this->NOW . "'))");

    if (isset($query->row['total'])) {
    return $query->row['total'];
    } else {
    return 0;
    }
    }
    }
    ?>

  9. По одной ссылке прячет в блоке Похожие товары

    Во втором не то, так как у меня:

    $this->data['products'][] = array(

    'product_id'  => $result['product_id'],
    'thumb'       => $image,
    'name'        => $result['name'],
    'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, 300) . '..',
    '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)
    );
     
     
    Вместо $this->data['products'][] = array(

                            'name'    => $result['name'],
                            'model' => $result['model'],
                            'rating' => $rating,
                            'stars' => sprintf($this->language->get('text_stars'), $rating),
                            'thumb' => $this->model_tool_image->resize($image, $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')),
                            'price' => $price,

  10. Вот роюсь по шаблонам, всякие есть, но НИ ОДНОГО по Зоотоварам :)

    Есть конечно универсальные, но не плохо было бы свой, со своими спикерами и картинками.

    Есть желание у кого создать коммерческий шаблон? Буду первым покупателем )))

  11. В общем потребность такая, продаю Игровые диски, и часто остаток 0, на складе. И каждый раз лезть в Товары\изменить и там жать выключено, честно напрягает. Есть ли модуль, который упрощает эту задачу? Либо при 0 полностью отключает товар, пока количество не будет изменено?

  12. Очень не хватает опции "Распродано", что бы при 0 количестве, либо товар вообще отключался, либо пропадала кнопка "Купить" и стикер "Распродано". Готов заплатить за него! На дефолтном шаблоне есть такой модуль, но на этот он к сожалению не работает, уже присылал его ;(

  13. Работает шаблон давно, и здесь случайно увидел только, если делаем какие либо действия в корзине, то выпадает вот такой мусор. Хотя все действия выполняются.

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

    Вопрос номер три, есть ли список изменений по версиям? Так как ошибки исправляли, но за темой не следил. Либо можно просто закинуть все файлы из архива по верх и перезаписать?

    Так же в журнале ошибок показывает ошибку: 2014-09-05 13:29:08 - PHP Notice:  Undefined variable: button_continue in /catalog/view/theme/online-ts/template/error/not_found.tpl on line 11

    post-27014-0-60105700-1422109768_thumb.png

  14.  Модуль видео (VQMOD) для этого шаблона , в модуле по ссылке http://cartopen.ru/index.php?route=product/product&product_id=64

    В файле vqmod_add_video.xml изменяется одна строка , было :

    <file name="catalog/view/theme/default/template/product/product.tpl">

    Надо :

    <file name="catalog/view/theme/online-ts/template/product/product.tpl">

    И не забыть добавить запись `youtube_code` TEXT NOT NULL  в таблицу `product` базы данных магазина.

    Всё :eek:

    5895160m.jpg

    измененный файл прикреплен

    Либо я такой, либо не знаю. Вкладка видео появилась. Ты какой код туда вставляешь? Пишу через фрейм, тупо пустое окно.

  15. Здравствуйте. Как сделать обновление шаблона? То есть без каких либо потерь данных? Инструкции нет ;( 

    Так же острая необходимость вставки видео. Но ни как не получается. Есть ли возможность помочь?

  16. предоставьте мне этот модуль на почту [email protected]. В связи с просьбой нескольких покупателей, я обработаю этот VQMOD модуль

    Отправил. Вкладка видео в карточке появляется, но не появляется само видео ;(

  17. Тем более, если куплен! Просто потратьте 15 минут времени на демо виджетов и почитайте доки и faq-и

    Как видео прикрутить к товарам там тоже есть.

    Если что не понятно - всегда оперативно работает тех. поддержка

     

    Никаких неудобств не вижу совершенно

    Обычными инструментами opencart - создается бекап, а потом на серваке восстановление и нажатие всего одной кнопки в модуле! - "Обновить". Всё! Весь перенос закончен.

    Где вы там нашли не удобства, не понимаю, и при чем здесь БД тем более.

    Вот как раз попробуйте снять бекап с базы, а после на сервере в новую БД его залить. Тогда поймете )

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

Important Information

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