Перейти к публикации
Поиск в
  • Дополнительно...
Искать результаты, содержащие...
Искать результаты в...

Sneyk

Пользователи
  
  • Публикаций

    76
  • Зарегистрирован

  • Посещение

Посетители профиля

3 947 просмотров профиля

Достижения Sneyk

Enthusiast

Enthusiast (6/14)

  • First Post
  • Collaborator
  • Reacting Well Редкая
  • Week One Done
  • One Month Later

Последние медали

-2

Репутация

  1. Ну так кто не хочет - тот платить не будет. По поводу "с Главной в категорию Desktop не попасть" - мне показалось, что так будет верней, но переделал. " Опции в товаре сделаны как для врагов. ", а что именно не нравится? ) То что их нужно каждую раскрывать перед выбором?
  2. 300 Скачать / Купить дополнение Универсальный, адаптивный шаблон RisShop RisShop - минималистичный, адаптивный и универсальный шаблон. Простая установка даст вам возможность в сжатые сроки запустить продажу любого товара! Так-же доступен быстрый старт с демо-контентом и техническая поддержка. Демо ================================================================== Требуется vqmod Добавил Sneyk Добавлено 07.03.2017 Категория Платные шаблоны Системные требования Метод активации Без активации Ioncube Loader Нет ocStore OpenCart.Pro, ocShop Обращение к серверу разработчика  
  3. Завантажити / Придбати розширення Фильтр товаров по цене Простой фильтр товаров по цене. Берет минимальную и максимальную цену в текущей категории для диапазона. Без проблем работает с стандартным модулем фильтрации. Демо ================================================================== Требуется vqmod Автор Sneyk долучення 03.03.17 Категорія Фильтры Системные требования vqmod Метод активации Без активации Ioncube Loader Нет ocStore OpenCart.Pro, ocShop Звернення до сервера розробника  
  4. Так же интересует. Находил ли кто что то такое?
  5. 1. У меня в админке такого нет ибо стоит opencart 2. Через это работает по всему пути.
  6. Прикрепляю мой seo_pro.php <?php class ControllerCommonSeoPro extends Controller { private $cache_data = null; private $languages = array(); private $config_language; public function __construct($registry) { parent::__construct($registry); $this->cache_data = $this->cache->get('seo_pro'); if (!$this->cache_data) { $query = $this->db->query("SELECT LOWER(`keyword`) as 'keyword', `query` FROM " . DB_PREFIX . "url_alias"); $this->cache_data = array(); foreach ($query->rows as $row) { $this->cache_data['keywords'][$row['keyword']] = $row['query']; $this->cache_data['queries'][$row['query']] = $row['keyword']; } $this->cache->set('seo_pro', $this->cache_data); } $query = $this->db->query("SELECT `value` FROM `" . DB_PREFIX . "setting` WHERE `key` = 'config_language'"); $this->config_language = $query->row['value']; $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "language WHERE status = '1'"); foreach ($query->rows as $result) { $this->languages[$result['code']] = $result; } } public function index() { // language $code = $this->config_language; if(isset($this->request->get['_route_'])) { $route_ = $this->request->get['_route_']; $tokens = explode('/', $this->request->get['_route_']); if(array_key_exists($tokens[0], $this->languages)) { $code = $tokens[0]; $this->request->get['_route_'] = substr($this->request->get['_route_'], strlen($code) + 1); } if(trim($this->request->get['_route_']) == '' || trim($this->request->get['_route_']) == 'index.php') { unset($this->request->get['_route_']); } } if(!isset($this->session->data['language']) || $this->session->data['language'] != $code) { $this->session->data['language'] = $code; } if(!isset($this->request->cookie['language']) || $this->request->cookie['language'] != $code) { setcookie('language', $code, time() + 60 * 60 * 24 * 30, '/', $this->request->server['HTTP_HOST']); } $this->config->set('config_language_id', $this->languages[$code]['language_id']); $this->config->set('config_language', $this->languages[$code]['code']); $language = new Language($this->languages[$code]['directory']); $language->load($this->languages[$code]['filename']); $this->registry->set('language', $language); // Add rewrite to url class if ($this->config->get('config_seo_url')) { $this->url->addRewrite($this); } else { return; } // Decode URL if (!isset($this->request->get['_route_'])) { $this->validate(); } else { $route = $this->request->get['_route_']; unset($this->request->get['_route_']); $parts = explode('/', trim(utf8_strtolower($route), '/')); list($last_part) = explode('.', array_pop($parts)); array_push($parts, $last_part); $rows = array(); foreach ($parts as $keyword) { if (isset($this->cache_data['keywords'][$keyword])) { $rows[] = array('keyword' => $keyword, 'query' => $this->cache_data['keywords'][$keyword]); } } if (count($rows) == sizeof($parts)) { $queries = array(); foreach ($rows as $row) { $queries[utf8_strtolower($row['keyword'])] = $row['query']; } reset($parts); foreach ($parts as $part) { $url = explode('=', $queries[$part], 2); if ($url[0] == 'category_id') { if (!isset($this->request->get['path'])) { $this->request->get['path'] = $url[1]; } else { $this->request->get['path'] .= '_' . $url[1]; } } elseif (count($url) > 1) { $this->request->get[$url[0]] = $url[1]; } } } else { $this->request->get['route'] = 'error/not_found'; } if (isset($this->request->get['product_id'])) { $this->request->get['route'] = 'product/product'; if (!isset($this->request->get['path'])) { $path = $this->getPathByProduct($this->request->get['product_id']); if ($path) $this->request->get['path'] = $path; } } elseif (isset($this->request->get['path'])) { $this->request->get['route'] = 'product/category'; } elseif (isset($this->request->get['manufacturer_id'])) { $this->request->get['route'] = 'product/manufacturer/product'; } elseif (isset($this->request->get['information_id'])) { $this->request->get['route'] = 'information/information'; } else { if (isset($queries[$parts[0]])) { $this->request->get['route'] = $queries[$parts[0]]; } } $this->validate(); if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } } } public function rewrite($link, $code = '') { if(!$code) { $code = $this->session->data['language']; } if (!$this->config->get('config_seo_url')) return $link; $seo_url = ''; $component = parse_url(str_replace('&', '&', $link)); $data = array(); parse_str($component['query'], $data); $route = $data['route']; unset($data['route']); switch ($route) { case 'product/product': if (isset($data['product_id'])) { $tmp = $data; $data = array(); if ($this->config->get('config_seo_url_include_path')) { $data['path'] = $this->getPathByProduct($tmp['product_id']); if (!$data['path']) return $link; } $data['product_id'] = $tmp['product_id']; if (isset($tmp['tracking'])) { $data['tracking'] = $tmp['tracking']; } } break; case 'product/category': if (isset($data['path'])) { $category = explode('_', $data['path']); $category = end($category); $data['path'] = $this->getPathByCategory($category); if (!$data['path']) return $link; } break; case 'product/product/review': case 'information/information/info': return $link; break; default: break; } if ($component['scheme'] == 'https') { $link = $this->config->get('config_ssl'); } else { $link = $this->config->get('config_url'); } if ($code != $this->config_language){ $link .= $code . '/index.php?route=' . $route; } else{ $link .= 'index.php?route=' . $route; } if (count($data)) { $link .= '&' . urldecode(http_build_query($data, '', '&')); } $queries = array(); foreach ($data as $key => $value) { switch ($key) { case 'product_id': $queries[] = 'product_suffix'; $queries[] = $key . '=' . $value; unset($data[$key]); $postfix = 1; break; case 'manufacturer_id': case 'category_id': case 'information_id': $queries[] = 'info_suffix'; $queries[] = $key . '=' . $value; unset($data[$key]); $postfix = 1; break; case 'path': $queries[] = 'product_suffix'; $postfix = 1; $categories = explode('_', $value); foreach ($categories as $category) { $queries[] = 'category_id=' . $category; } unset($data[$key]); break; default: break; } } if(empty($queries)) { $queries[] = $route; } $rows = array(); foreach($queries as $query) { if(isset($this->cache_data['queries'][$query])) { $rows[] = array('query' => $query, 'keyword' => $this->cache_data['queries'][$query]); } } if(count($rows) == count($queries)) { $aliases = array(); foreach($rows as $row) { $aliases[$row['query']] = $row['keyword']; } foreach($queries as $query) { $seo_url .= '/' . rawurlencode($aliases[$query]); } } if ($seo_url == '') return $link; if($code != $this->config_language) { $seo_url = $code . '/' . trim($seo_url, '/'); } else { $seo_url = trim($seo_url, '/'); } if ($component['scheme'] == 'https') { $seo_url = $this->config->get('config_ssl') . $seo_url; } else { $seo_url = $this->config->get('config_url') . $seo_url; } $seo_url .= '/'; if(substr($seo_url, -2) == '//') { $seo_url = substr($seo_url, 0, -1); } if (count($data)) { $seo_url .= '?' . urldecode(http_build_query($data, '', '&')); } return $seo_url; } private function getPathByProduct($product_id) { $product_id = (int)$product_id; if ($product_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('product.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$product_id])) { $query = $this->db->query("SELECT category_id FROM " . DB_PREFIX . "product_to_category WHERE product_id = '" . $product_id . "' ORDER BY main_category DESC LIMIT 1"); $path[$product_id] = $this->getPathByCategory($query->num_rows ? (int)$query->row['category_id'] : 0); $this->cache->set('product.seopath', $path); } return $path[$product_id]; } private function getPathByCategory($category_id) { $category_id = (int)$category_id; if ($category_id < 1) return false; static $path = null; if (!is_array($path)) { $path = $this->cache->get('category.seopath'); if (!is_array($path)) $path = array(); } if (!isset($path[$category_id])) { $max_level = 10; $sql = "SELECT CONCAT_WS('_'"; for ($i = $max_level-1; $i >= 0; --$i) { $sql .= ",t$i.category_id"; } $sql .= ") AS path FROM " . DB_PREFIX . "category t0"; for ($i = 1; $i < $max_level; ++$i) { $sql .= " LEFT JOIN " . DB_PREFIX . "category t$i ON (t$i.category_id = t" . ($i-1) . ".parent_id)"; } $sql .= " WHERE t0.category_id = '" . $category_id . "'"; $query = $this->db->query($sql); $path[$category_id] = $query->num_rows ? $query->row['path'] : false; $this->cache->set('category.seopath', $path); } return $path[$category_id]; } private function validate() { if (isset($this->request->get['route']) && $this->request->get['route'] == 'error/not_found') { return; } if(empty($this->request->get['route'])) { $this->request->get['route'] = 'common/home'; } if (isset($this->request->server['HTTP_X_REQUESTED_WITH']) && strtolower($this->request->server['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') { return; } if (isset($this->request->server['HTTPS']) && (($this->request->server['HTTPS'] == 'on') || ($this->request->server['HTTPS'] == '1'))) { $url = str_replace('&', '&', $this->config->get('config_ssl') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'SSL')); } else { $url = str_replace('&', '&', $this->config->get('config_url') . ltrim($this->request->server['REQUEST_URI'], '/')); $seo = str_replace('&', '&', $this->url->link($this->request->get['route'], $this->getQueryString(array('route')), 'NONSSL')); } if (rawurldecode($url) != rawurldecode($seo)) { header($this->request->server['SERVER_PROTOCOL'] . ' 301 Moved Permanently'); $this->response->redirect($seo); } } private function getQueryString($exclude = array()) { if (!is_array($exclude)) { $exclude = array(); } return urldecode(http_build_query(array_diff_key($this->request->get, array_flip($exclude)))); } } ?> Вопрос - как мне сделать ссылки на продукт вида - сайт.ру/категория/продукт
  7. Sneyk

    Модуль связанных товаров

    Можно закрыть - написал свой модуль....
  8. Перепробовал уже все модули, но проблема в том что они не работают с чекбоксами. Мне вот нужен тот, который будет с ними работать. Может кто знает?
  9. Клиенту уведомление приходит, а вот админу не шлет... Причем уведомление о новом заказе приходит. Проблема именно в уведомлении при изменении статуса.
  10. https://opencartforum.com/topic/45436-change-product-tag-url/ А такая проблема. Мне нужно задать отдельные "суфикс" для адреса на статьи. Соответственно я создал схожую запись в таблице INSERT INTO `oc_url_alias` (`query`, `keyword`) VALUES ('info_suffix', 'qqq'); , а в файл seo_pro.php добавил case 'information_id': $queries[] = 'info_suffix'; $queries[] = $key . '=' . $value; unset($data[$key]); $postfix = 1; break; Но не работает. Причем если я вместо info_suffix - поставлю product_suffix - ссылки на статьи будут в таком же формате как и ссылки на продукты.
  11. Виноват. Вы были правы. Спасибо. Тему можно закрыть так как вопрос решен.
  12. Вы писали там совсем о другом... Но я попробовал ваш вариант - не помогло.
  13. Нужно - потому что перенос это с сайта на wordpress, а там были именно такие ссылки. И чтобы не потерять выдачу - мне нужно сохранить именно такие ссылки.
×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.