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

Sneyk

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

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

  • Посещение

Все публикации пользователя Sneyk

  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, а там были именно такие ссылки. И чтобы не потерять выдачу - мне нужно сохранить именно такие ссылки.
  14. Не в этом дело. Проблема именно в magazin То есть если я сделаю url формата site.xz/product_name - все будет работать.
  15. Мне нужно чтобы url-ы продуктов были в формате site.xz/magazin/product_name Сгенерировал такие url-ы, а вот при переходе на страницу товара 404-я ошибка. Что не так?
  16. У Deadcows есть проблема - если я хочу получить ссылки на категории формата /ddd/category_name - второй слеш он убивает и получается /dddcategory_name - у вас так же?
  17. Ну вот я тут http://demo1.simpleopencart.com/admin/index.php?route=module/simple&token=cb2e40e3a2d31663e61a2ddc62bfef4f искал и не нашел нигде такой функции...
  18. Интересует возможность отключить регистрацию, чтобы при оформлении заказа пользователь не регистрировался. Есть такое?
  19. Думаю, что нужно дописать что то вроде $sql .= " AND cp.category_id not in ('64', '63') "; в функцию getProducts, но пока что не совсем понимаю куда...
  20. Ну или подскажите модуль, который сможет сгенерировать ссылки в нужном формате.
  21. Это та я знаю, но заказчик хочет именно паладин и что с ним будет потом мне лично пох. =\)
  22. Мне нужно сохранить старые url, а там формат такой prod_идпродукта.html В паладине выставляю соответственно, но паладин меняет _ на - Куда копать...?
×
×
  • Создать...

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

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