Jump to content

Sneyk

Пользователи
  • Content Count

    76
  • Joined

  • Last visited

Community Reputation

-2 Плохой

About Sneyk

  • Rank
    Пользователь

Recent Profile Visitors

2,532 profile views
  1. Ну так кто не хочет - тот платить не будет. По поводу "с Главной в категорию Desktop не попасть" - мне показалось, что так будет верней, но переделал. " Опции в товаре сделаны как для врагов. ", а что именно не нравится? ) То что их нужно каждую раскрывать перед выбором?
  2. 300.00 руб Скачать/Купить дополнение Универсальный, адаптивный шаблон RisShop RisShop - минималистичный, адаптивный и универсальный шаблон. Простая установка даст вам возможность в сжатые сроки запустить продажу любого товара! Так-же доступен быстрый старт с демо-контентом и техническая поддержка. Демо ================================================================== Требуется vqmod Добавил Sneyk Добавлено 07.03.2017 Категория Платные шаблоны Системные требования Сайт разработчика http://wham.pro/ Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart ocStore OpenCart.Pro, ocShop
  3. Скачать/Купить дополнение Фильтр товаров по цене Простой фильтр товаров по цене. Берет минимальную и максимальную цену в текущей категории для диапазона. Без проблем работает с стандартным модулем фильтрации. Демо ================================================================== Требуется vqmod Добавил Sneyk Добавлено 03.03.2017 Категория Фильтры Системные требования vqmod Сайт разработчика http://oc.wham.pro/ Старая цена Метод активации Без активации Ioncube Loader Нет OpenCart 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. А за что тут почти 2 000 ??? :-D Добавь хотя бы checkbox-ы и будет это каким то отличием от бесплатных модулей.
  8. Перепробовал уже все модули, но проблема в том что они не работают с чекбоксами. Мне вот нужен тот, который будет с ними работать. Может кто знает?
  9. Нужно - потому что перенос это с сайта на wordpress, а там были именно такие ссылки. И чтобы не потерять выдачу - мне нужно сохранить именно такие ссылки.
  10. Не в этом дело. Проблема именно в magazin То есть если я сделаю url формата site.xz/product_name - все будет работать.
×

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.