Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Sneyk

Users
  
  • Posts

    76
  • Joined

  • Last visited

Recent Profile Visitors

3,958 profile views

Sneyk's Achievements

Enthusiast

Enthusiast (6/14)

  • First Post
  • Collaborator
  • Reacting Well Rare
  • Week One Done
  • One Month Later

Recent Badges

-2

Reputation

  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. 1. У меня в админке такого нет ибо стоит opencart 2. Через это работает по всему пути.
  5. Прикрепляю мой 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)))); } } ?> Вопрос - как мне сделать ссылки на продукт вида - сайт.ру/категория/продукт
  6. Можно закрыть - написал свой модуль....
  7. Перепробовал уже все модули, но проблема в том что они не работают с чекбоксами. Мне вот нужен тот, который будет с ними работать. Может кто знает?
  8. Клиенту уведомление приходит, а вот админу не шлет... Причем уведомление о новом заказе приходит. Проблема именно в уведомлении при изменении статуса.
  9. 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 - ссылки на статьи будут в таком же формате как и ссылки на продукты.
  10. Виноват. Вы были правы. Спасибо. Тему можно закрыть так как вопрос решен.
  11. Вы писали там совсем о другом... Но я попробовал ваш вариант - не помогло.
  12. Нужно - потому что перенос это с сайта на wordpress, а там были именно такие ссылки. И чтобы не потерять выдачу - мне нужно сохранить именно такие ссылки.
×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.