Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

free2011

Новачок
  
  • Публікації

    3
  • З нами

  • Відвідування

free2011's Achievements

Newbie

Newbie (1/14)

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

Recent Badges

0

Репутація

  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 для меня новая, может кто решил данную проблему элегантнее?
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.