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

yyyaaazzz

Новичок
  
  • Публикаций

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

  • Посещение

Информация

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

Посетители профиля

2 578 просмотров профиля

Достижения yyyaaazzz

Apprentice

Apprentice (3/14)

  • First Post
  • Collaborator
  • Conversation Starter
  • Week One Done
  • One Month Later

Последние медали

7

Репутация

  1. yyyaaazzz

    Shop.wbc.kiev.ua

    Дяди не придут. Есть соглашение с клубом. По футболке - доставка Новой Почтой по Украине (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
×
×
  • Создать...

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

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