-
Публікації
421 -
З нами
-
Відвідування
Тип публікації
Профілі
Форум
Маркетплейс
Статті
FAQ
Наші новини
Магазин
Блоги
module__dplus_manager
Повідомлення, опубліковані користувачем nash
-
-
Добрый вечер! Сделал модуль подписка на рассылку - текстовое поле для ввода e-mail и кнопка "Подписаться".
При нажатии на кнопку происходит проверка e-mail заказчика, если такого заказчика нет, то добавляется в базу новый покупатель, генерируется пароль из 8 символов, записывается в базу и на почту покупателю отправляется пароль от ЛК.
Но при попытке авторизоваться, при вводе e-mail и пароля, система сообщает, что e-mail или пароль неверный. В чем может быть причина? Пароль сохраняю в базу таким же способом как и при обычной регистрации.
$passgen = generatePassword(8); // генерация пароля из 8 символов if($this->db->query("INSERT INTO " . DB_PREFIX . "customer SET customer_group_id = 1, email = '".$data['email']."', status = 1, approved = 1, salt = '".$salt = token(9)."', password = '".sha1($salt . sha1($salt . sha1($passgen)))."', newsletter = 1, date_added = NOW()")) { $mail = new Mail(); $mail->protocol = $this->config->get('config_mail_protocol'); $mail->parameter = $this->config->get('config_mail_parameter'); $mail->smtp_hostname = $this->config->get('config_mail_smtp_hostname'); $mail->smtp_username = $this->config->get('config_mail_smtp_username'); $mail->smtp_password = html_entity_decode($this->config->get('config_mail_smtp_password'), ENT_QUOTES, 'UTF-8'); $mail->smtp_port = $this->config->get('config_mail_smtp_port'); $mail->smtp_timeout = $this->config->get('config_mail_smtp_timeout'); $mail->setTo($data['email']); $mail->setFrom($this->config->get('config_email')); $mail->setSender(html_entity_decode($this->config->get('config_name'), ENT_QUOTES, 'UTF-8')); $mail->setSubject("Подписка на рассылку"); $mail->setText($passgen); $mail->send(); return "Вы подписались на рассылку новостей"; }
function generatePassword($length = 8){ $chars = 'abdefhiknrstyzABDEFGHKNQRSTYZ23456789'; $numChars = strlen($chars); $string = ''; for ($i = 0; $i < $length; $i++) { $string .= substr($chars, rand(1, $numChars) - 1, 1); } return $string; }
-
потому что нужно писать под это запрос и выбирать товары
почему этот model_catalog_product->getProductRelated($filter_data); не подходит?
public function getProductRelated($product_id) { $product_data = array(); $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "product_related pr LEFT JOIN " . DB_PREFIX . "product p ON (pr.related_id = p.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pr.product_id = '" . (int)$product_id . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"); foreach ($query->rows as $result) { $product_data[$result['related_id']] = $this->getProduct($result['related_id']); } return $product_data; }
-
Добрый вечер! есть задача вывести сопутствующие товары каждого товара, у которых они есть, на странице категории.
с контролера и шаблона страницы товара перенес код соотв. на страницу категории.
код шаблона category.tpl и контролера:
<?php if ($products) { ?> <p><a href="<?php echo $compare; ?>" id="compare-total"><?php echo $text_compare; ?></a></p> <div class="row"> <div class="col-md-3"> <div class="btn-group hidden-xs"> <button type="button" id="list-view" class="btn btn-default" data-toggle="tooltip" title="<?php echo $button_list; ?>"><i class="fa fa-th-list"></i></button> <button type="button" id="grid-view" class="btn btn-default" data-toggle="tooltip" title="<?php echo $button_grid; ?>"><i class="fa fa-th"></i></button> </div> </div> <div class="col-md-2 text-right"> <label class="control-label" for="input-sort"><?php echo $text_sort; ?></label> </div> <div class="col-md-3 text-right"> <select id="input-sort" class="form-control" onchange="location = this.value;"> <?php foreach ($sorts as $sorts) { ?> <?php if ($sorts['value'] == $sort . '-' . $order) { ?> <option value="<?php echo $sorts['href']; ?>" selected="selected"><?php echo $sorts['text']; ?></option> <?php } else { ?> <option value="<?php echo $sorts['href']; ?>"><?php echo $sorts['text']; ?></option> <?php } ?> <?php } ?> </select> </div> <div class="col-md-2 text-right"> <label class="control-label" for="input-limit"><?php echo $text_limit; ?></label> </div> <div class="col-md-2 text-right"> <select id="input-limit" class="form-control" onchange="location = this.value;"> <?php foreach ($limits as $limits) { ?> <?php if ($limits['value'] == $limit) { ?> <option value="<?php echo $limits['href']; ?>" selected="selected"><?php echo $limits['text']; ?></option> <?php } else { ?> <option value="<?php echo $limits['href']; ?>"><?php echo $limits['text']; ?></option> <?php } ?> <?php } ?> </select> </div> </div> <br /> <div class="row"> <?php foreach ($products as $product) { ?> <div class="product-layout product-list col-xs-12"> <div class="product-thumb"> <div class="image"><a href="<?php echo $product['href']; ?>"><img src="<?php echo $product['thumb']; ?>" alt="<?php echo $product['name']; ?>" title="<?php echo $product['name']; ?>" class="img-responsive" /></a></div> <div> <div class="caption"> <h4><a href="<?php echo $product['href']; ?>"><?php echo $product['name']; ?></a></h4> <p><?php echo $product['description']; ?></p> <?php if ($product['rating']) { ?> <div class="rating"> <?php for ($i = 1; $i <= 5; $i++) { ?> <?php if ($product['rating'] < $i) { ?> <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-2x"></i></span> <?php } else { ?> <span class="fa fa-stack"><i class="fa fa-star fa-stack-2x"></i><i class="fa fa-star-o fa-stack-2x"></i></span> <?php } ?> <?php } ?> </div> <?php } ?> <?php if ($product['price']) { ?> <p class="price"> <?php if (!$product['special']) { ?> <?php echo $product['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $product['special']; ?></span> <span class="price-old"><?php echo $product['price']; ?></span> <?php } ?> <?php if ($product['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $product['tax']; ?></span> <?php } ?> </p> <?php } ?> </div> <div class="button-group"> <button type="button" onclick="cart.add('<?php echo $product['product_id']; ?>', '<?php echo $product['minimum']; ?>');"><i class="fa fa-shopping-cart"></i> <span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span></button> <button type="button" data-toggle="tooltip" title="<?php echo $button_wishlist; ?>" onclick="wishlist.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-heart"></i></button> <button type="button" data-toggle="tooltip" title="<?php echo $button_compare; ?>" onclick="compare.add('<?php echo $product['product_id']; ?>');"><i class="fa fa-exchange"></i></button> </div> </div> </div> </div> <?php } ?> </div> сопутствующие <!-- сопутствующие --> <?php if ($podtovary) { ?> <h3><?php echo $text_related; ?></h3> <div class="row"> <?php $i = 0; ?> <?php foreach ($podtovary as $podtovar) { ?> <?php if ($column_left && $column_right) { ?> <?php $class = 'col-lg-6 col-md-6 col-sm-12 col-xs-12'; ?> <?php } elseif ($column_left || $column_right) { ?> <?php $class = 'col-lg-4 col-md-4 col-sm-6 col-xs-12'; ?> <?php } else { ?> <?php $class = 'col-lg-3 col-md-3 col-sm-6 col-xs-12'; ?> <?php } ?> <div class="<?php echo $class; ?>"> <div class="product-thumb transition"> <div class="caption"> <h4><a href="<?php echo $podtovar['href']; ?>"><?php echo $podtovar['name']; ?></a></h4> <p><?php echo $podtovar['description']; ?></p> <?php if ($podtovar['rating']) { ?> <div class="rating"> <?php for ($i = 1; $i <= 5; $i++) { ?> <?php if ($podtovar['rating'] < $i) { ?> <span class="fa fa-stack"><i class="fa fa-star-o fa-stack-1x"></i></span> <?php } else { ?> <span class="fa fa-stack"><i class="fa fa-star fa-stack-1x"></i><i class="fa fa-star-o fa-stack-1x"></i></span> <?php } ?> <?php } ?> </div> <?php } ?> <?php if ($podtovar['price']) { ?> <p class="price"> <?php if (!$podtovar['special']) { ?> <?php echo $podtovar['price']; ?> <?php } else { ?> <span class="price-new"><?php echo $podtovar['special']; ?></span> <span class="price-old"><?php echo $podtovar['price']; ?></span> <?php } ?> <?php if ($podtovar['tax']) { ?> <span class="price-tax"><?php echo $text_tax; ?> <?php echo $podtovar['tax']; ?></span> <?php } ?> </p> <?php } ?> </div> <div class="button-group"> <button type="button" onclick="cart.add('<?php echo $podtovar['product_id']; ?>', '<?php echo $podtovar['minimum']; ?>');"><span class="hidden-xs hidden-sm hidden-md"><?php echo $button_cart; ?></span> <i class="fa fa-shopping-cart"></i></button> <button type="button" data-toggle="tooltip" title="<?php echo $button_wishlist; ?>" onclick="wishlist.add('<?php echo $podtovar['product_id']; ?>');"><i class="fa fa-heart"></i></button> <button type="button" data-toggle="tooltip" title="<?php echo $button_compare; ?>" onclick="compare.add('<?php echo $podtovar['product_id']; ?>');"><i class="fa fa-exchange"></i></button> </div> </div> </div> <?php if (($column_left && $column_right) && ($i % 2 == 0)) { ?> <div class="clearfix visible-md visible-sm"></div> <?php } elseif (($column_left || $column_right) && ($i % 3 == 0)) { ?> <div class="clearfix visible-md"></div> <?php } elseif ($i % 4 == 0) { ?> <div class="clearfix visible-md"></div> <?php } ?> <?php $i++; ?> <?php } ?> </div> <?php } ?> <!-- сопутствующие --> <div class="row"> <div class="col-sm-6 text-left"><?php echo $pagination; ?></div> <div class="col-sm-6 text-right"><?php echo $results; ?></div> </div> <?php } ?>
$data['products'] = array(); $filter_data = array( 'filter_category_id' => $category_id, 'filter_filter' => $filter, 'sort' => $sort, 'order' => $order, 'start' => ($page - 1) * $limit, 'limit' => $limit ); $product_total = $this->model_catalog_product->getTotalProducts($filter_data); $results = $this->model_catalog_product->getProducts($filter_data); foreach ($results as $result) { if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')); } else { $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_product_width'), $this->config->get('config_image_product_height')); } if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($result['price'], $result['tax_class_id'], $this->config->get('config_tax'))); } else { $price = false; } if ((float)$result['special']) { $special = $this->currency->format($this->tax->calculate($result['special'], $result['tax_class_id'], $this->config->get('config_tax'))); } else { $special = false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result['special'] ? $result['special'] : $result['price']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = (int)$result['rating']; } else { $rating = false; } $data['products'][] = array( 'product_id' => $result['product_id'], 'thumb' => $image, 'name' => $result['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => $result['minimum'] > 0 ? $result['minimum'] : 1, 'rating' => $result['rating'], 'href' => $this->url->link('product/product', 'path=' . $this->request->get['path'] . '&product_id=' . $result['product_id'] . $url) ); } /*Сопутствующие товары*/ $data['podtovary'] = array(); $results = $this->model_catalog_product->getProductRelated($filter_data); foreach ($results as $result1) { if ($result1['image']) { $image = $this->model_tool_image->resize($result1['image'], $this->config->get('config_image_related_width'), $this->config->get('config_image_related_height')); } else { $image = $this->model_tool_image->resize('placeholder.png', $this->config->get('config_image_related_width'), $this->config->get('config_image_related_height')); } if (($this->config->get('config_customer_price') && $this->customer->isLogged()) || !$this->config->get('config_customer_price')) { $price = $this->currency->format($this->tax->calculate($result1['price'], $result1['tax_class_id'], $this->config->get('config_tax'))); } else { $price = false; } if ((float)$result1['special']) { $special = $this->currency->format($this->tax->calculate($result1['special'], $result1['tax_class_id'], $this->config->get('config_tax'))); } else { $special = false; } if ($this->config->get('config_tax')) { $tax = $this->currency->format((float)$result1['special'] ? $result1['special'] : $result1['price']); } else { $tax = false; } if ($this->config->get('config_review_status')) { $rating = (int)$result1['rating']; } else { $rating = false; } $data['podtovary'][] = array( 'product_id' => $result1['product_id'], 'thumb' => $image, 'name' => $result1['name'], 'description' => utf8_substr(strip_tags(html_entity_decode($result1['description'], ENT_QUOTES, 'UTF-8')), 0, $this->config->get('config_product_description_length')) . '..', 'price' => $price, 'special' => $special, 'tax' => $tax, 'minimum' => $result1['minimum'] > 0 ? $result1['minimum'] : 1, 'rating' => $rating, 'href' => $this->url->link('product/product', 'product_id=' . $result1['product_id']) ); } /**////сопутствующие товары*/
ни один сопутствующий товар не выводится. Подскажите, пожалуйста, как исправить
-
Ну я делал не опциями а список создавал с помощу товаров. А связь между товарами делал через SCU.
Подобного рода функционал я делал для ocstore 2.1*, что-то типа сборного товара. В сборном товаре выводится список вложенных в него. В базе опенкарта идут как отдельные позиции
А можете показать реализацию данной задачи?
-
Добрый день! Хочу сделать также как тут подтовары. В принципе в опенкарте это опции с кнопкой "купить" - это понятно. Но как под каждую опцию сделать отдельную страницу товара, чтобы с выгрузкой из и в 1С не было проблем, так как в 1С каждая опция опенкарта = отдельный товар в 1С.
-
Так зачем Вы добавили основное изображение к дополнительным? Основное и так же можно кликнуть для просмотра.
ну кликнул я на маленькое изображение, не главное. Как мне вернуться к главному?
-
Добрый день! Я добавил основное изображение к доп. изображениям
для того, чтобы можно было "прокликать" (посмотреть) изображения - то есть как тут.
При клике по главному изображению - открывается попап, но в попапе дублируется изображение. Как убрать этот "дубляж"?
product.tpl приложил.
-
Спасибо большое за помощь! Был мой косяк, Алена, поправила все быстро и разъяснила, в чем была проблема. Еще раз вам большое спасибо!
-
Добрый вечер! хочу на странице категории у товаров для админа вывести id и ссылку на редактирование соотв. товара.
<?php $user = new User($this->registry); if ($user->isLogged()) { ?> <div class="edit">ID #<?php echo $product['product_id']; ?> [ <a target="_blank" href="/admin/index.php?route=catalog/product/edit&token=<?php echo $this->session->data['token']; ?>&product_id=<?php echo $product['product_id']; ?>" rel="nofollow">Редактировать</a> ] </div> <?php } ?>
вылезает ошибка на "строке с токеном":
PHP Notice: Undefined property: Loader::$session in /catalog/view/theme/default/template/product/category.tpl on line 105 PHP Notice: Trying to get property of non-object in /catalog/view/theme/default/template/product/category.tpl on line 105
как сделать, чтобы токен подгружался?
-
да, была пустая строка, но я туда даже не лазил... спасибо большое!
-
-
Добрый вечер! после очистки сайта от вирусов, вылезла ошибка:
Warning: strpos() [function.strpos]: Empty needle in /public_html/vqmod/vqcache/vq2-catalog_controller_common_header.php on line 64
// Daniel's robot detector $status = true; if (isset($this->request->server['HTTP_USER_AGENT'])) { $robots = explode("\n", trim($this->config->get('config_robots'))); foreach ($robots as $robot) { if ($robot && strpos($this->request->server['HTTP_USER_AGENT'], trim($robot)) !== false) { // ошибка здесь $status = false; break; } } }
Как ее победить?
-
Т.е. оставить только "ручное" переключение? Нет, так не получится.
жаль. По умолчанию получается сделать определенный город нельзя...
-
Добрый день! Возможно отключить автоопределение города? и как это сделать?
-
Доброе утро! Подскажите, пожалуйста, как мне проверить базовую валюту у товара? у меня стоит модуль "Покупка в 1 клик" (автор freelancer). Я сделал запись заказов в базу данных. Но как мне проверить программно базовую валюту? она может быть и в долларах и в евро, а записать стоимость товара мне надо в рублях.
-
category.php
после
$category_id = (int)array_pop($parts);$this->data['category_id'] = $category_id;после$category_id = 0;$this->data['category_id'] = 0;благодарю!
-
Добрый день! Что-то никак не получается вывести ID категории на странице самой категории. Помогите, пожалуйста.
Версия - ocstore 1.5.5.1.2
-
-
Добрый день! Сделал в админке у атрибута текстовое поле, соотв. вношу значения 0 и 1, где 1 - вывод атрибута на странице категории у товара.
в шаблоне вывел эти атрибуты следующим образом:
<!-- Вывод необходимых атрибутов --> <?php if($product['attribute_groups']) { ?> <?php foreach($product['attribute_groups'] as $attribute_group) { ?> <?php if(!strpos($attribute_group['name'], "—")) {?> <?php foreach($attribute_group['attribute'] as $attribute) { ?> <?php if(($attribute['atr_tov']) != 0 ){ ?> <div class="cat_atrib"><?php echo $attribute['name']; ?> <span><?php echo $attribute['text']; ?></span></div> <?php } ?> <?php } ?> <?php } ?> <?php } ?> <?php } ?> <!-- Вывод необходимых атрибутов -->
и в javascript в function display(view) { добавил следующие строки (в табличном виде и в сетке)
var cat_atrib = $(element).find('.cat_atrib').html(); if (cat_atrib != null) { html += '<div class="cat_atrib">'+ cat_atrib + '</div>'; }
в итоге выводится только один атрибут, хотя в админке проставлены единички у пяти атрибутов. Подскажите, пожалуйста, что я сделал не так. Спасибо!
-
Добрый вечер! Есть проблема... Перестали добавляться в текстовое поле ссылки по клику
-
Спасибо большое автору модуля, вопрос с ЧПУ решен! Модуль очень клевый, всем советую. В дальнейшем, возможно, появятся мысли по доработке...
-
Я смотрю, вы уж больно шустрый :)) В хорошем смысле этого слова.
Вы считаете, что вам обязаны ответить тутже? Прям сразу?
В лс ответил, и давайте вести себя корректнее. Написали в лс и хватит. Для чего дублировать здесь? Показать всем, какой плохой разработчик? Айаяй, не ответил вам в течение часа. А самое интересное то, что после того как вам в лс помогут, вы тут отписать о том что вашу проблему решили, не удосужитесь.
простите, за мой тон. Но личное сообщение я писал еще 13 мая, а в онлайне вы появлялись регулярно. Еще раз простите. Да и с удовольствием отписываюсь, если мне помогут, либо попробуют решить какую-то проблему.
-
Уважаемый разработчик, вы на сообщения принципиально не отвечаете? Проблема с ЧПУ, с seopro. Внес изменения исходя из вашего файла seopro.php - на наборах чпу стало работать, а на производителях и товарах перестало. На демо у вас вообще чпу отключено. Помогите, пожалуйста, решить эту проблему.
-
На странице производителя метки можно сделать?
Подписка на рассылку и регистрация ЛК
в Допомога програмістам та розробникам
Опубліковано:
через модель своего модуля