Для того, чтобы в карточке товара (опенкарт 2.0) были ссылки, указывающие на Следующий/Предыдущий товар необходимо добавить нижеприведённый код в указанные три файла. Работа по принципу: $product_id+1; $product_id-1, т.е. товары нужно забивать по порядку. в файле: catalog/controller/product/product.php после строки: Код: $data['heading_title'] = $product_info['name']; добавить: Код: $data['text_prev'] = $this->language->get('text_prev'); $data['text_next'] = $this->language->get('text_next'); $data['next_prod'] = $next_prod = $this->model_catalog_product->getProduct($product_id+1); $data['prev_prod'] = $prev_prod = $this->model_catalog_product->getProduct($product_id-1); if($next_prod) { $data['next_product_url'] = $this->url->link('product/product', 'product_id=' . $next_prod['product_id']); $data['next_product_name']= $next_prod['name']; } if($prev_prod) { $data['prev_product_url'] = $this->url->link('product/product', 'product_id=' . $prev_prod['product_id']); $data['prev_product_name']= $prev_prod['name']; } в файл: catalog/language/*/product/product.php добавить: Код: $_['text_prev'] = 'Предыдущий'; $_['text_next'] = 'Следующий'; в файле: catalog/view/theme/*/template/product/product.tpl перед строкой: Код: <h1><?php echo $heading_title; ?></h1> добавить: Код: <div class="btn-group pull-right" > <?php if($prev_prod) { ?> <button type="button" onclick="location.href='<?php echo $prev_product_url; ?>'" data-toggle="tooltip" class="btn btn-default" title="<?php echo $prev_product_name; ?>"><?php echo $text_prev; ?></button> <?php } ?> <?php if($next_prod) { ?> <button type="button" onclick="location.href='<?php echo $next_product_url; ?>'" data-toggle="tooltip" class="btn btn-default" title="<?php echo $next_product_name; ?>"><?php echo $text_next; ?></button> <?php } ?> </div>
Дополнение / Модуль, это набор файлов, который устанавливается в опенкарт и имеет как минимум свой отдельный контроллер. Модификатор - файл ocmod который по инструкции xml, создает виртуальные копии файлов и меняет в нем код. Инструкция - это текстовая инструкция для выполнения неких действий с файлами
и, ежели в результате этих действий появляется дополнительный функционал, то впору создавать раздел "Некие действия". Был уверен, что Инструкция пишется к тому, что уже есть, например, к опенкарт.
А-а, всё, понял, почему Инструкции, полагаю здесь http://shop.opencart-russia.ru/prev-next то же самое, завёрнутое в xml.
нет. Читайте описание внимательнее. @rip Вы действительно не понимаете разницу или вы решили просто "по троллить" ?? Или вы обиделись что тему перенесли из модулей в инструкции?
Инструкция - указания, правила, устанавливающие порядок и способ выполнения или осуществления чего-л. (действовать по инструкции). Дополнение - то, что дополняет, служит добавлением к чему-л. Писал выше, всё ясно
есть такие модули как самим выбрать какие товары следующии и предыдущии? как рекомендации товара под продуктом
соглашусь с Marianna, т.к. если есть проблема: если след по id, товар в другой категории то может перепрыгнуть совершенно на другой товар в другой категории. Хорошо бы как то ограничить в категории, чтобы по кругу был переход
у меня вылезла такая ошибка. Notice: Undefined variable: prev_prod in www/system/storage/modification/catalog/view/theme/default/template/product/product.tpl on line 70 Notice: Undefined variable: next_prod in www/system/storage/modification/catalog/view/theme/default/template/product/product.tpl on line 73 шаблон дефолтный может кто подскажет что делать?
Нету. И без инструкции можно легко адаптировать по 3х. Достаточно вникнуть. А лучше конечно купить модуль https://shop.opencart-russia.ru/search/?search=предыдущий Для правильной работы.
Я подобную задачу решал для кастомизации постов. За основу брал этот модуль https://opencartforum.com/files/fil...anichennoe-kolichestvo-kategoriy-so-statyami/ Вот логика отображения следующего и предидущего постов для это модуля, если применить извилины, то его можно кастомизировать под товары, что я и начинаю делать. Добавляем в модель с товарами catalog->model->catalog->product.php два метода, не забываем переписать запросы из бд под товары, в аргументы передаем $product_id и category_id = 0 public function getNextPost($article_id, $blog_category_id = 0){ $sql = "SELECT a.article_id, a.image, ad.tag, ad.name, ad.meta_title, a.date_added, a.date_modified, " . "ad.meta_description, ad.meta_keyword, ad.description, " . "ad.preview "; if ($blog_category_id) { $sql .= " FROM " . DB_PREFIX . "article_to_blog_category a2c"; $sql .= " LEFT JOIN " . DB_PREFIX . "newsblog_article a ON (a2c.article_id = a.article_id)"; } else { $sql .= " FROM " . DB_PREFIX . "newsblog_article a "; } $sql .= "LEFT JOIN " . DB_PREFIX . "newsblog_article_description AS ad " . "ON (a.article_id = ad.article_id) " . "WHERE a.article_id > '" . (int)$article_id . "' " . "AND a.status = 1 " . "AND ad.language_id = '" . (int) $this->config->get('config_language_id') . "' "; if($blog_category_id){ $sql .= "AND a2c.category_id = '" . (int)$blog_category_id . "' "; } $sql .= " GROUP BY a.article_id "; $sql .= " ORDER BY a.date_added "; $sql .= " ASC "; $query = $this->db->query($sql); if(empty($query->row['article_id'])){ return false; } return $query->row; } public function getPrevPost($article_id, $blog_category_id = 0){ $sql = "SELECT a.article_id, a.image, ad.tag, ad.name, ad.meta_title, a.date_added, a.date_modified, " . "ad.meta_description, ad.meta_keyword, ad.description, " . "ad.preview "; if ($blog_category_id) { $sql .= " FROM " . DB_PREFIX . "article_to_blog_category a2c"; $sql .= " LEFT JOIN " . DB_PREFIX . "newsblog_article a ON (a2c.article_id = a.article_id)"; } else { $sql .= " FROM " . DB_PREFIX . "newsblog_article a "; } $sql .= "LEFT JOIN " . DB_PREFIX . "newsblog_article_description AS ad " . "ON (a.article_id = ad.article_id) " . "WHERE a.article_id < '" . (int)$article_id . "' " . "AND a.status = 1 " . "AND ad.language_id = '" . (int) $this->config->get('config_language_id') . "' "; if($blog_category_id){ $sql .= "AND a2c.category_id = '" . (int)$blog_category_id . "' "; } $sql .= " GROUP BY a.article_id "; $sql .= " ORDER BY a.date_added "; $sql .= " ASC "; $query = $this->db->query($sql); if(empty($query->row['article_id'])){ return false; } return $query->row; } Далее открываем контроллер со страницей товара, вызываем методы в этом контоллере catalog->controller->product->product.php и данные пулим в массив, не забываем, что в аргументы передаем product_id и ссылки href формируем согласно ссылкам на товары! //next and prev posts $nav_category_id = 0; $next_post_info = $this->model_catalog_product->getNextPost($newsblog_article_id, $nav_category_id); $prev_post_info = $this->model_catalog_product->getPrevPost($newsblog_article_id, $nav_category_id); $data['prev_post'] = array(); if($prev_post_info){ $data['prev_post'] = array( 'name' => $prev_post_info['name'], 'image' => $this->model_tool_image->resize($prev_post_info['image'], 150, 120), 'description' => utf8_substr(strip_tags(html_entity_decode($prev_post_info['description'], ENT_QUOTES, 'UTF-8')), 0, 160) . '..', 'href' => $this->url->link('newsblog/article', 'newsblog_path=' . $this->request->get['newsblog_path'] . '&newsblog_article_id=' . $prev_post_info['article_id'], 'SSL'), ); } $data['next_post'] = array(); if($next_post_info){ $data['next_post'] = array( 'name' => $next_post_info['name'], 'image' => $this->model_tool_image->resize($next_post_info['image'], 150, 120), 'description' => utf8_substr(strip_tags(html_entity_decode($next_post_info['description'], ENT_QUOTES, 'UTF-8')), 0, 160) . '..', 'href' => $this->url->link('newsblog/article', 'newsblog_path=' . $this->request->get['newsblog_path'] . '&newsblog_article_id=' . $next_post_info['article_id'], 'SSL'), ); } Почти закончили. Осталось открыть вьюху catalog->view->theme->default->template->product->product.tpl <div class=row> <div class="col-sm-6"> <?php if ($prev_post) { ?> <a href="<?php echo $prev_post['href'] ?>" class="media"> <div class="media-body"> <div class="h4 media-heading"><?php echo $prev_post['name'] ?></div> <div class="media-body"><?php echo $prev_post['description'] ?></div> </div> <?php if ($prev_post['image']) { ?> <div class="media-right"> <img class="media-object" src="<?php echo $prev_post['image'] ?>" data-holder-rendered="true"> </div> <?php } ?> </a> <?php } ?> </div> <div class="col-sm-6"> <?php if ($next_post) { ?> <a href="<?php echo $next_post['href'] ?>" class="media"> <div class="media-body"> <div class="h4 media-heading"><?php echo $next_post['name'] ?></div> <div class="media-body"><?php echo $next_post['description'] ?></div> </div> <?php if ($next_post['image']) { ?> <div class="media-right"> <img class="media-object" src="<?php echo $next_post['image'] ?>" data-holder-rendered="true"> </div> <?php } ?> </a> <?php } ?> </div> </div> Вот и все. Согласно этого кода на вьюхе выведет тумбочку продукта, тайтл и краткое описание с заданным количеством символов и размером тумбочки. Попытался описать логику. Кастомизируйте под себя, переименовывайте методы и переменные под ваши нужды. Надеюсь, кому то помог.