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

vlad9bu

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

    60
  • З нами

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

Усі публікації користувача vlad9bu

  1. Блин! Спасибо огромное)) Как только не вводил фразы, а на такое даже не попадал!!! P.S. Почему то исчезли кнопки рейтингов, не могу + к репутации поставить...
  2. UP ================= Неужели никто не знает? Или хотя бы подскажите куда копать пожалуйста.... Очень надо.
  3. Доброго всем времени суток. Поиск результатов не дал, по этому обращаюсь к Вам. Можно ли на платформе opencart реализовать сайт сравнения товаров в интернете, например как тут http://hotline.ua/ или тут http://price.ua/ ? Может есть какой то модуль или дополнение? Спасибо за ответ.
  4. Здравствуйте, Уважаемые форумчане. Снова нужна Ваша помощь. Мне нужно сделать копии моего сайта но что бы товар можно было на этих сайтах редактировать с одного источника. На пример: Мой сайт: mysait.org. Я делаю субдомены или новые домены (как лучше?): "1.mysait.org" "2.mysait.org" "3.mysait.org" И так у меня теперь есть 4 одинаковых сайта. mysait.org - это главный сайт, с которого и будет все управление. "1.mysait.org" "2.mysait.org" "3.mysait.org" - эти сайты я даю другим пользователям. На этих сайтах будет изменена только контактная информация ну и может еще какая то информация. Товары редактировать на этих сайтах нельзя. Товары могу редактировать только я (mysait.org). Вот что бы не редактировать все товары на каждом сайте по-отдельности (а сайтов может быть и 30), нужно как то сделать так, что бы при смене товара на главном сайте mysait.org - товары менялись на всех остальных сайтах. Изменил цены на один товар - они на всех сайтах изменились, добавил скидку на товара, скидка на всех остальных тоже появилась ну и т.д. Как лучше такое реализовать и возможно такое реализовать в принципе? Спасибо за ответ.
  5. Спасибо за ответ. По первому вопросу. Думаю сделать для разных категорий товаров разные схемы будет правильным решением. Привязать товары к схемам не сложно и не долго, просто пара запросов в БД. И что 520 товаров, что 2500 без разницы. А можете пожалуйста подробнее объяснить как сделать правильно такой запрос. Категории товаров разные. То есть и схемы для определенной категории тоже свои. Я с MySql не совсем ... :mellow: По второму. На мой взгляд проще всего сделать редирект со страницы категории на страницу акций Тоже думал над редиректом, но теряем на скорости загрузки страницы, так как сначала 1я страница грузится, а за ней сразу 2я. Попробовать можно конечно и посмотреть.
  6. Теперь другой вопрос, схожий по сути. Есть стандартная страница "Акции", куда добавляется весь уцененный товар. У меня это http://alcosale.org/specials/. И есть категория http://alcosale.org/raznoe/akcii/ (Разное - Акции). Вот как сделать так, что бы эта категория (Разное - Акции) выводила страницу с уцененкой? Схемы не помогают. ЧПУ тоже. Стоит СеоПро.
  7. Меня кажется осенило решением)) :-) Может немного геморно, но что, если привязать нужный товар к Схеме, например: Товары-Алкоголь и Товары-Напитки. Затем указать модулю категорий схему Товары-Алкоголь и Товары-Напитки соответственно. Должно все быть гуд. Только вот если товара у меня 520, а будет 2500. Можете это решение и будет работать как мне нужно, но времени жалко на реализацию. :-x Кто что думает?
  8. Доброго времени суток, уважаемые форумчане. Нужна Ваша помощь, и думаю, что эта тема будет не одному мне полезна. Поискав по форуму и в интернете не смог найти решение. Суть вопроса. У меня есть разные категории товаров, (http://alcosale.org/) например: Алкоголь и Напитки. При помощи модуля "Категории ПРО" и схем, я могу вывести Необходимый список категорий - для Алкоголя свои (http://alcosale.org/alkogol/), а для Напитков свои (http://alcosale.org/napitki-ba/). А вот с карточкой товара совсем другая ситуация. У нее стандартная схема "Продукты" product/product (схемами это вылечить не выходит. ИЛИ ЛЕЧИТСЯ???). То есть я не могу вывести определенный список категорий в карточку товара. Например, в категориях «Алкоголь» свои категории и в карточке товара так же должны быть эти же категории. В категориях «Напитки» так же свои категории и в карточке товара должны быть эти же категории. Вот, для примера, http://alcosale.org/alkogol/viski/aberfeldy-aberfeldi/aberfeldy-12-years-old-075l-40-viski-aberfeldi-12-let-075l-40-220-01 карточка товара в алкоголе. Слева есть два меню с категориями. Вот это следствие одной схему для товара "Продукт". То есть в каждом разделе сайта у меня разные категории должны быть, включая и товар, который в этих категориях. А выходит так, что в категориях все четко, а в карточку любого товара (Алкоголя или Сока) будет множество моделей с разными категориями. Надуюсь, что смог объяснить суть вопроса)) Заранее спасибо за ответы. P.S. Шаблон стандартный.
  9. Вопрос решен посредством: - установки Seo Pro + Ded Cow; - обновление sitemap.xml - обновление robots.txt (при поддержке freelancer) Всем спасибо и удачи :-)
  10. Спасибо большое. Забрал и заменил!.
  11. Что то я не нахожу его в релизе. Прошелся мельком по поиску, нет пути или ссылки. В общем не могу найти у себя во всяком случае. Подскажите пожалуйста, где его найти или скиньте свой для примера. Спасибо
  12. У меня не было robots.txt. Пришлось самому лепить. А то что Вы написали, добавлю сейчас. Спасибо. Что касается левых ресурсов - грешен) но думал что это просто косяк самого ОС, а поскольку СеоПро не ставало как надо, то наворотил всего что нашел.
  13. Спасибо за ответ, уважаемый freelancer. Буду разбираться с кодом. Письмо Вам отправил. Гороскоп - это не модуль, а просто сделанная мной выборка кода и отсебятины. При помощи "Статей" добавил страницы гороскопа, ну а там уже эксперименты с кодом. Вот и получился гороскоп) По большому счету, таким способом можно реализовать все что угодно! Кому интересно, вот выборка кода из product.tpl для Js вкладок. <div> <div class="htabs-horo" id="tabs"> <a href="#tab-todat">Сегодня</a><a href="#tab-tomorrow">Завтра</a><a href="#tab-week">Неделя</a><a href="#tab-month">Месяц</a><a href="#tab-year">Год</a></div> <div class="tab-content-horo" id="tab-todat"> <div> Сегодня</div> </div> <div class="tab-content-horo" id="tab-tomorrow"> <div> Завтра</div> </div> <div class="tab-content-horo" id="tab-week"> <div> Неделя</div> </div> <div class="tab-content-horo" id="tab-month"> <div> Месяц</div> </div> <div class="tab-content-horo" id="tab-year"> <div> Год</div> </div> <script type="text/javascript"><!-- $('#tabs a').tabs(); //--></script> </div> Меняем только Все значения на свои.
  14. Всем доброго времени суток, уважаемые форумчане. Поставил свой сайт на индексацию. Гугл проверил и начал свое дело. Все вроде хорошо, каждый день по 100 - 150 ссылок индексируется, но меня смутила одна вещь, откуда у меня в магазине аж СТОЛЬКО ссылок - 2481. Товаров 522, + категории 200, + производители 190 ну и так, по мелочам. В лучшем случае - 1500. http://gyazo.com/887535548334a97cc3da2d5d23b7cec9 В robots.txt по скрывал все что не надо: User-agent: * Disallow: /admin Disallow: /catalog Disallow: /download Disallow: /export Disallow: /system Disallow: /wishlist Disallow: /login Disallow: /checkout Disallow: /simpleregister Disallow: /simplecheckout Disallow: /vqmod Disallow: /account Host: alcosale.org Да и еще. Исправил ссылки типа /index.php?route=product/product&product_id=43 на нормальные: /product. Использовал для этого инструкцию [url=http://loco.ru/materials/204-opencart-custom-seo-urls]http://loco.ru/materials/204-opencart-custom-seo-urls Грешу на то, что данным способом просто скрыл их от глаз (я имею ввиду /index.php?route=product/product&product_id=43), но они все равно остались и уверенно себя чувствуют. А поисковики их успешно индексируют. Кто что думает по этому поводу?
  15. Вот мне и нужно настроить так называемые пути, корректным образом. Как это сделать не понятно? Эксперименты со схемами результатов не дали (( P.S. Не совсем понятно, к чему эти насмешки. Вы ведь тоже не все знаете, и не думаю что Вам будет приятно, задавая вопрос, получать такого рода ответ.
  16. Здравствуйте, уважаемые форумчане. Нужна Ваша помощь - помощь профессионалов. 1. Создал я на своем сайте гороскоп, как дополнительное развлечение: http://alcosale.org/horoscope. Но возникла одна весьма неудобная вещь. Когда заходишь в гороскоп, то в отображении дерева мы видим: "Главная » Гороскоп". Выбираем "Овен" или (любой другой, не важно). Переходим на страницу "Овна" http://alcosale.org/horoscope/oven. Теперь наше дерево нам показывает: "Главная » Гороскоп для знака зодиака Овен" Но ведь должно быть: "Главная » Гороскоп » Гороскоп для знака зодиака Овен" - Как сделать так, что бы дерево выстраивалось в правильном порядке? То есть пользователю нужно либо выбрать меню "Еще + --> Гороскоп" либо нажать кнопку "Назад" в своем броузере. Помогите пожалуйста решить эту проблему. 2. И еще не столь важная, но тоже раздражает. На этот раз дело в дереве товаров. Не могу понять почему они так работают. Объясняю. ВАРИАНТ 1 Выбираем категорию, например "Абсент" http://alcosale.org/absent Нажимаем на первый товар и попадаем в карточку товара. Наше дерево выглядит в данный момент так: "Главная » Абсент » Absent Hills 0,7L / Абсент Хиллс 0,7л" ВАРИАНТ 2 А если зайти в категорию "Абсент", Выбрать бренд, например "Hills / Хиллс" Зайти в карточку товара, то дерево будет иметь вид: "Главная » Абсент » Hills / Хиллс » Absent Hills 0,7L / Абсент Хиллс 0,7л" Как сделать так, что бы Производитель сам подставлялся в дерево товара при ВАРИАНТЕ 1? То есть что бы дерево имело вид "Главная » Категория » Производитель » Товар" при любом раскладе, не важно от куда пользователь зашел в карточку товара. Заранее большое спасибо за помощь. И прошу прощения если это где то обсуждалось или слишком глупые вопросы, но не нашедши ответа самостоятельно, я просто вынужден обратиться за помощью.
  17. Если произвести поиск на сайте, то сверху никаких строк нету. То есть все работает правильно. http://alcosale.org/index.php?route=product/search&filter_name=%D0%B2%D0%B8%D1%81%D0%BA%D0%B8&filter_sub_category=true&filter_description=true&filter_sub_category=true&filter_description=true Вот только в ссылке 2 раза указано &filter_sub_category=true&filter_description=true&filter_sub_category=true&filter_description=true
  18. Так же, использую 2 модуля для поиска http://alcosale.org/Поиск.zip 1. Search suggestion - поиск с автодополнением 2.3 2. "Фикс стандартного модуля поиска на ocStore 1.5.4.1. Без этого фикса поиск по категориям не ведется. Это исправление устраняет баг, и при выборе категории поиск ведется только в ней." Модули для поиска, в первую очередь, искал для решения проблемы с поиском по описанию.
  19. Спасибо. Не совсем понял что нужно сделать. Предоставляю весь файл product.php <?php class ModelCatalogProduct extends Model { 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'], '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'], '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'); } $cache = md5(http_build_query($data)); $product_data = $this->cache->get('product.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache); if (!$product_data) { $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 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)"; if (!empty($data['filter_category_id'])) { $sql .= " LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)"; } $sql .= " 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'])) { $implode_data = array(); $implode_data[] = (int)$data['filter_category_id']; $this->load->model('catalog/category'); $categories = $this->model_catalog_category->getCategoriesByParentId($data['filter_category_id']); foreach ($categories as $category_id) { $implode_data[] = (int)$category_id; } $sql .= " AND p2c.category_id IN (" . implode(', ', $implode_data) . ")"; } else { $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'"; } } if (!empty($data['filter_name']) || !empty($data['filter_tag'])) { $sql .= " AND ("; if (!empty($data['filter_name'])) { if (!empty($data['filter_description'])) { $sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%' OR MATCH(pd.description) AGAINST('" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "')"; } else { $sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'"; } } if (!empty($data['filter_name']) && !empty($data['filter_tag'])) { $sql .= " OR "; } if (!empty($data['filter_tag'])) { $sql .= "MATCH(pd.tag) AGAINST('" . $this->db->escape(utf8_strtolower($data['filter_tag'])) . "')"; } $sql .= ")"; 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'])) . "'"; } } 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'] . ")"; } 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']); } $this->cache->set('product.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache, $product_data); } 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 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'); } $cache = md5(http_build_query($data)); $product_data = $this->cache->get('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache); if (!$product_data) { $sql = "SELECT COUNT(DISTINCT p.product_id) AS total 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)"; if (!empty($data['filter_category_id'])) { $sql .= " LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (p.product_id = p2c.product_id)"; } $sql .= " 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'])) { $implode_data = array(); $implode_data[] = (int)$data['filter_category_id']; $this->load->model('catalog/category'); $categories = $this->model_catalog_category->getCategoriesByParentId($data['filter_category_id']); foreach ($categories as $category_id) { $implode_data[] = (int)$category_id; } $sql .= " AND p2c.category_id IN (" . implode(', ', $implode_data) . ")"; } else { $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'"; } } if (!empty($data['filter_name']) || !empty($data['filter_tag'])) { $sql .= " AND ("; if (!empty($data['filter_name'])) { if (!empty($data['filter_description'])) { $sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%' OR MATCH(pd.description) AGAINST('" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "')"; } else { $sql .= "LCASE(pd.name) LIKE '%" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "%'"; } } if (!empty($data['filter_name']) && !empty($data['filter_tag'])) { $sql .= " OR "; } if (!empty($data['filter_tag'])) { $sql .= "MATCH(pd.tag) AGAINST('" . $this->db->escape(utf8_strtolower($data['filter_tag'])) . "')"; } $sql .= ")"; 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'])) . "'"; } } if (!empty($data['filter_manufacturer_id'])) { $sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'"; } $query = $this->db->query($sql); $product_data = $query->row['total']; $this->cache->set('product.total.' . (int)$this->config->get('config_language_id') . '.' . (int)$this->config->get('config_store_id') . '.' . (int)$customer_group_id . '.' . $cache, $product_data); } 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; } } } ?>

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

Important Information

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