Jump to content

yyyaaazzz

Новичок
  • Content Count

    20
  • Joined

  • Last visited

Community Reputation

7 Обычный

About yyyaaazzz

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

Информация

  • Пол
    Мужчина
  • Город:
    Левый пятак

Recent Profile Visitors

2,205 profile views
  1. Дяди не придут. Есть соглашение с клубом. По футболке - доставка Новой Почтой по Украине (25-30 грн). Сейчас должны в наличии все размеры.
  2. Я могу сколько угодно дать подсказок, но не научу логически мыслить. Метод getCategories() принимает единственный параметр - parent_id (ID родителя). Если у вас в каталоге товары размещены только в одной категории - все просто. В первом примере мы получили cid - ID категории. По cid мы можем взять полную запись из БД методом getCategory(), передав в него параметром cid. Получите массив данных одой категории. Если parent_id в нем больше нуля - снова вызывайте getCategory(), только уже с передачей parent_id и так до бесконечности. Я бы советовал вынести это в отдельный метод, который будет рекурсивно вызывать сам себя если parent_id больше 0. Там и строку сформируете, и контроллер останется чистеньким. Просто в контроллере потом добавите: $temp['href'] = $this->url->link('product/product', 'path='.$temp['cid'].'&product_id=' . $product_info['product_id']); Это для примера. У вас все должно выглядеть несколько иначе. А насчет getCategories() - посмотрите в контроллере common/header, как строится меню категорий. Там эта рекурсия реализована. Не могу сказать что мне по душе способ ее реализации, но для вас это - практически готовое решение.
  3. Кому что больше по душе... я всего лишь намекнул на расширение базовой модели ОС для большего удобства использования. Сегодня вам нужно вывести названия категорий, завтра - еще что-то. А отдельныйметод в модели на такие случаи не бывает лишним. Это так, к слову. Что до решения вашей задачи. Если нужен просто список категорий, в которых есть товар - уберите из запроса LIMIT, получайте массив и делайте implode() через разделитель. Если собираетесь строить рекурсивный путь от родительской категории - до дочерней, это уже отдельная тема. Советую обратить внимание на метод getCategories() в catalog/model/catalog/category.php Вот вариант с простым имплодом всех категорий. Модель: public function getRowItems($table, $selectcols = '*', $where = '', $order = 'category_id', $limit = '') { $sql = 'SELECT t.'.$selectcols.' FROM '.DB_PREFIX.$table.' t WHERE t.'.$where.' ORDER by t.'.$order; if(!empty($limit)) { $sql .= ' LIMIT '.$limit; } $query = $this->db->query($sql); return $query->rows; } контроллер: $temp = array( 'product_id' => $product_info['product_id'], 'cid' => $this->model_catalog_product->getRowValue('product_to_category', 'category_id', 'product_id='.$product_info['product_id']), 'categories' => $this->model_catalog_product->getRowItems('product_to_category', '*', 'product_id='.$product_info['product_id']), 'ctitle' => '', 'thumb' => $image, 'name' => $product_info['name'], 'price' => $price, 'special' => $special, 'rating' => $rating, 'reviews' => sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']), 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']) ); if(!empty($temp['categories'])) { $temp2 = array(); foreach ($temp['categories'] as $row) { $temp2[] = $this->model_catalog_product->getRowValue('category_description', 'name', 'category_id='.$row['category_id']); } $temp['ctitle'] = implode(', ', $temp2); unset($temp2); } $this->data['products'][] = $temp; unset($temp); результат:
  4. 1) Проверьте, еть ли у вас файл catalog/language/russian/module/sellegance.php. Если нет - скопируйте файл из папки english по указанному выше пути. Потом откройте в редакторе и переводите. 2) Откройте catalog/model/catalog/review.php. Замените это: public function addReview($product_id, $data) { $this->db->query("INSERT INTO " . DB_PREFIX . "review SET author = '" . $this->db->escape($data['name']) . "', customer_id = '" . (int)$this->customer->getId() . "', product_id = '" . (int)$product_id . "', text = '" . $this->db->escape($data['text']) . "', rating = '" . (int)$data['rating'] . "', date_added = NOW()"); } на это: public function addReview($product_id, $data) { $this->db->query("INSERT INTO " . DB_PREFIX . "review SET author = '" . $this->db->escape($data['name']) . "', customer_id = '" . (int)$this->customer->getId() . "', product_id = '" . (int)$product_id . "', text = '" . $this->db->escape($data['text']) . "', rating = '" . (int)$data['rating'] . "', date_added = NOW(), status = '1'"); }
  5. В нужном месте вставьте: <?php echo $description;?>
  6. http://shop.wbc.kiev.ua Магазин эксклюзивной атрибутики Ультрас Динамо Киев Opencart 1.5.1.3 шаблон свой Quickcheckout от rb2 По большому счету - ничего. Лишь кое-где, частично переделаны стандартные модули. Фишка магазина в сохранении линии дизайна сайта-родителя wbc.kiev.ua. Еще до запуска магазина, на основном сайте был раздел витрины товаров, без корзины, регистрации и онлайн-заказа. Каждая страница товара была статической и рисовалась в Photoshop (что согласитесь - не слишком удобно). По сути, единственной задачей было - максимально сохранить визуальную часть, будто ничего не поменялось. Дизайн - Алексей Марчук. Верстка и установка на ОС - ваш покорный слуга. PS: Мой первый проект на Opencart. Создавался в ОЧЕНЬ сжатые сроки (пару бессонных ночей), на что-либо "из ряда вон" попросту не было времени.
  7. Поверьте, это еще не предел клиентского маразма. Текущая версия сайта соответствует лишь 2 этапу комплексной доработки из запланированных 4. Так что лиха беда начало :-D
  8. 1) Для начала расширяем модель: открываем system/engine/model.php и добавляем новый метод public function getRowValue($table, $colname, $where) { $sql = 'SELECT t.'.$colname.' FROM '.DB_PREFIX.$table.' t '; $sql .= ' WHERE t.'.$where.' LIMIT 1'; $query = $this->db->query($sql); return !empty($query->row)? $query->row[$colname]: ''; } этот метод будет доступен из любого контроллера и позволит получать одно необходимое нам значение. 2) Теперь открываем catalog/controller/module/featured.php и ищем: $this->data['products'][] = array( 'product_id' => $product_info['product_id'], 'cid' => $this->model_catalog_product->getRowValue('product_to_category', 'category_id', 'product_id='.$product_info['product_id']), 'ctitle' => '', 'thumb' => $image, 'name' => $product_info['name'], 'price' => $price, 'special' => $special, 'rating' => $rating, 'reviews' => sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']), 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']) ); заменяем на следующее: $temp = array( 'product_id' => $product_info['product_id'], 'cid' => $this->model_catalog_product->getRowValue('product_to_category', 'category_id', 'product_id='.$product_info['product_id']), 'ctitle' => '', 'thumb' => $image, 'name' => $product_info['name'], 'price' => $price, 'special' => $special, 'rating' => $rating, 'reviews' => sprintf($this->language->get('text_reviews'), (int)$product_info['reviews']), 'href' => $this->url->link('product/product', 'product_id=' . $product_info['product_id']) ); if(!empty($temp['cid'])) { $temp['ctitle'] = $this->model_catalog_product->getRowValue('category_description', 'name', 'category_id='.$temp['cid']); } $this->data['products'][] = $temp; unset($temp); Таким образом мы получили ID и заголовок категории для каждого товара.
  9. С чем-то соглашусь. И будь сайт лично моим, а не клиентским - там бы было многое по-другому. Ну а так, как говорил Яо Минь...
  10. Если фишка дизайна в стиле ч/б фотографии - я бы добавил красного. Серый фон - в печь! И не стройтесь под разметку дефолтного шаблона. Не ленитесь переверстать под себя.
  11. По этому ключу я переопределял вывод. Само-собой, это не единственное возможное (и не самое рациональное)))) решение, но т.к. задача по реализации ЧПУ не стояла... вобщем сделал так)
  12. 1) http://pizza-celentano.kiev.ua 2) Онлайн-магазин сети пиццерий 3) Opencart 1.5.1.3 4) Шаблон свой, полностью создавался с нуля 5) Сторонние расширения не использовались. Только базовый функционал + несколько самописных модулей: - Пицца "сделай сам". Конструктор товара по ингридиентам. - Новостная лента. Простая до безобразия. - Модуль "магазины". Динамическая карта с добавлением меток через админку и фильтрацией по свойствам. - Контроллер checkout без ничего лишнего. 6) Помимо указанного выше: реализована индивидуализация макетов страницы товара, зависимо от категории; просмотр товара, форма обратной связи и оформление заказа в iframe 7) Ваш покорный слуга
  13. Если не получается вывести позицию в header.tpl, попробуйте следующий способ: 1. Делаем все по мануалу ravilr`a с пункта 1 по 3 (изменяем только административную часть). 2. Пользовательская часть. В контроллере header.php добавляем следующий код: $this->load->model('design/layout'); if (isset($this->request->get['route'])) { $route = $this->request->get['route']; } else { $route = 'common/home'; } $layout_id = 0; if (substr($route, 0, 16) == 'product/category' && isset($this->request->get['path'])) { $path = explode('_', (string)$this->request->get['path']); $layout_id = $this->model_catalog_category->getCategoryLayoutId(end($path)); } if (substr($route, 0, 15) == 'product/product' && isset($this->request->get['product_id'])) { $layout_id = $this->model_catalog_product->getProductLayoutId($this->request->get['product_id']); } if (substr($route, 0, 23) == 'information/information' && isset($this->request->get['information_id'])) { $layout_id = $this->model_catalog_information->getInformationLayoutId($this->request->get['information_id']); } if (!$layout_id) { $layout_id = $this->model_design_layout->getLayout($route); } if (!$layout_id) { $layout_id = $this->config->get('config_layout_id'); } $module_data = array(); $this->load->model('setting/extension'); $extensions = $this->model_setting_extension->getExtensions('module'); foreach ($extensions as $extension) { $modules = $this->config->get($extension['code'] . '_module'); if ($modules) { foreach ($modules as $module) { if ($module['layout_id'] == $layout_id && $module['position'] == 'имя_вашей_позиции_модуля' && $module['status']) { $module_data[] = array( 'code' => $extension['code'], 'setting' => $module, 'sort_order' => $module['sort_order'] ); } } } } $sort_order = array(); foreach ($module_data as $key => $value) { $sort_order[$key] = $value['sort_order']; } array_multisort($sort_order, SORT_ASC, $module_data); $this->data['modules'] = array(); foreach ($module_data as $module) { $module = $this->getChild('module/' . $module['code'], $module['setting']); if ($module) { $this->data['modules'][] = $module; } } после чего в файле шаблона header.tpl в необходимом месте добавляем: <?php if ($modules) { ?> <?php foreach ($modules as $module) { ?> <?php echo $module; ?> <?php } ?> <?php } ?> Не забудьте проверить, выведен ли модуль на каждой схеме. Смотрим и наслаждаемся:
  14. Не все так просто. Для начала нужно отключить валидацию в контроллерах. 1) в файле controller/account/register.php ищем строку private function validate() { и снимаем проверку с обязательных полей, напр: if ((utf8_strlen($this->request->post['city']) < 2) || (utf8_strlen($this->request->post['city']) > 128)) { $this->error['city'] = $this->language->get('error_city'); } заменяем на if ((utf8_strlen($this->request->post['city']) < 0) || (utf8_strlen($this->request->post['city']) > 128)) { $this->error['city'] = $this->language->get('error_city'); } и т.д... 2) То же самое проделываем в файлах controller/account/edit.php и controller/account/address.php, что позволит клиентам редактировать данные учетной записи. 3) Скрываем поля в файле view/theme/*/template/account/register.tpl 4) Переходим в папку admin/controller/sale, открываем файл customer_form.php и выше описаным способом снимаем валидацию с полей. Это позволит вам изменять данные учетных записей клиентов. 5) Открываем файл admin/view/template/sale/customer_form.tpl и скрываем поля. Насчет формы заказа - там все намного сложнее и прежде чем браться - обязательно сделайте дамп))) Есть для нее готовое решение, платное но не дорогое.
  15. Добавил процессинг изображений средствами GD2. Теперь изображения товаров, которых нет в наличии будут визуально выделяться черно-белым, или каким-либо другим эффектом. Как только чуть освобожусь - ждите готовый vqmod
×

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.