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

free2011

Newbie
  
  • Posts

    3
  • Joined

  • Last visited

free2011's Achievements

Newbie

Newbie (1/14)

  • Conversation Starter
  • First Post
  • Week One Done
  • One Month Later
  • One Year In

Recent Badges

0

Reputation

  1. Как раз недавно решал такую задачу, если я правильно понял. Требовалась доработка админки управления опциями товара Каталог-Товары-Атрибуты, чтобы можно было выбирать тип опции - выпадающий список, флажки, радио, картинки, а в паблике чтобы юзер мог выбирать в выпадающем списке, соответственно все это чтобы отправлялось в корзину. Сделал не модуль правда, а костылек, который это все реализует и добавляет в БД пару полей - тип опции, размеры картинки и саму картинку, которую тоже можно выбирать в админке. Но в данном случае решение проще видимо, подойдет. catalog\view\theme\default\template\product (по дефолту) <select name="option[<?php echo $option['option_id']; ?>]"> <?php foreach ($option['option_value'] as $option_value) { ?> <option value="<?php echo $option_value['option_value_id']; ?>"><?php echo $option_value['name']; ?> <?php if ($option_value['price']) { ?> <?php echo $option_value['prefix']; ?><?php echo $option_value['price']; ?> <?php } ?> </option> <?php } ?> </select> заменить на <?php foreach ($option['option_value'] as $option_value) { ?> <input type="radio" name="option[<?php echo $option['option_id']; ?>]" value="<?php echo $option_value['option_value_id']; ?>" <?php if($i == 0) echo '"checked"'; ?>><?php echo $option_value['name']; ?> <?php if ($option_value['price']) { ?> <?php echo $option_value['prefix']; ?><?php echo $option_value['price']; ?> <?php } ?> <?php $i++; } ?> И надо еще подправить catalog\view\javascript\jquery\ajax_add.js если используется аякс data: $('#product :input'), заменить на data: $('#product :input[name=product_id], #product input[name=quantity], #product input[name=redirect], #product input:checked'), вроде должно работать
  2. Понятно, ну если лучшего решения нет, будем юзать что есть) Возникла задача удалить дубликаты ссылок, такой вопрос тоже рассматривался здесь по-разному, я решил реализовать вот таким образом Файл catalog/controller/common/seo_url.php Добавить после if (isset($this->request->get['route'])) { return $this->forward($this->request->get['route']); } }(примерно 55 строка) else if(isset($this->request->get["route"])) { if ($this->request->get["route"] == 'product/category' || $this->request->get["route"] == 'product/product' || $this->request->get["route"] == 'information/information' || $this->request->get["route"] == 'product/manufacturer') { $query = $this->db->query("SELECT value FROM " . DB_PREFIX . "setting WHERE `key` = 'config_seo_url'"); if ($query->row["value"] == 1) { $is_seo = true; if ($this->request->get["route"] == "product/category") { if (isset($this->request->get["path"])) { $path = explode("_", $this->request->get["path"]); foreach ($path as $cat_id) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE query = 'category_id=" . $this->db->escape($cat_id) . "'"); if (!$query->num_rows) $is_seo = false; } } } else if ($this->request->get["route"] == "product/product") { if (isset($this->request->get["path"])) $is_seo = false; else if (isset($this->request->get["product_id"])) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE query = 'product_id=" . $this->db->escape($this->request->get["product_id"]) . "'"); if (!$query->num_rows) $is_seo = false; } } else if ($this->request->get["route"] == "information/information") { if (isset($this->request->get["information_id"])) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE query = 'information_id=" . $this->db->escape($this->request->get["information_id"]) . "'"); if (!$query->num_rows) $is_seo = false; } } else if ($this->request->get["route"] == "product/manufacturer") { if (isset($this->request->get["manufacturer_id"])) { $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "url_alias WHERE query = 'manufacturer_id=" . $this->db->escape($this->request->get["manufacturer_id"]) . "'"); if (!$query->num_rows) $is_seo = false; } } } if ($is_seo == true) { $this->request->get['route'] = "error/not_found"; return $this->forward($this->request->get['route']); } } } Этот код, как я надеюсь) проверяет все не СЕО ссылки на их СЕО аналоги, при включенном СЕО режиме. В случае нахождения аналога выводится 404 ошибка. На первый взгляд работает, но очень тщательно я не тестил, может кому понадобится тоже. Критика приветствуется. ЗЫ. Версия - 0.1.5
  3. Приветствую! Возникла необходимость вывода 404 ошибки при неверном запросе. Для СЕО режима решается все просто и варианты здесь предлагались. Без СЕО я варианта не нашел. Решение, кхм.. не самое красивое, но вроде работает. 1. В файле system/library/response меняем спецификатор доступа private у свойства $headers на public, т.е строка 3 будет выглядеть: public $headers = array();Делать это приходится, увы, чтобы иметь возможность добавить в каждом из контроллеров (продукт, категория, производитель) вывода хедера с 404 ответом, иначе он у меня добавляется уже после хедера с кодировкой.2. В файлах category.php, manufacturer.php, product.php каталога catalog/controller/product перед строкой (2 - ой в скрипте, внутри else {}) $this->response->setOutput($this->render(TRUE), $this->config->get('config_compression'));надо добавить array_unshift($this->response->headers, $this->request->server['SERVER_PROTOCOL'] . '/1.1 404 Not Found'); В итоге 404 ошибка будет выдаваться и при неверных ID товара, категории, производителя. В общем на первый взгляд рабочее решение. Плохо что надо ставить костыль на систему и расширять доступ для свойства класса, но лучше решения я не нашел. С опен картом вожусь несколько дней, в целом CMS для меня новая, может кто решил данную проблему элегантнее?
×
×
  • 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.