-
Публікації
421 -
З нами
-
Відвідування
Тип публікації
Профілі
Форум
Маркетплейс
Статті
FAQ
Наші новини
Магазин
Блоги
module__dplus_manager
Повідомлення, опубліковані користувачем nash
-
-
Вопрос решен
-
$data['categories'] = array(); $results = $this->model_catalog_category->getCategories($category_id); foreach ($results as $result) { $filter_data = array( 'filter_category_id' => $result['category_id'], 'filter_sub_category' => true ); if ($result['image']) { $image = $this->model_tool_image->resize($result['image'], $this->config->get($this->config->get('config_theme') . '_image_category_width'), $this->config->get($this->config->get('config_theme') . '_image_category_height')); $image_coll = 'image/'.$result['image']; } else { $image = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_category_width'), $this->config->get($this->config->get('config_theme') . '_image_category_height')); $image_coll = $this->model_tool_image->resize('placeholder.png', $this->config->get($this->config->get('config_theme') . '_image_category_width'), $this->config->get($this->config->get('config_theme') . '_image_category_height')); } $children_data = array(); $children = $this->model_catalog_category->getCategories($result['category_id']); foreach ($children as $child) { $filter_data = array( 'filter_category_id' => $child['category_id'], 'filter_sub_category' => true ); $children_data[] = array( 'name' => $child['name'], 'href' => $this->url->link('product/category', 'path=' . $result['category_id'] . '_' . $child['category_id']) ); } $data['categories'][] = array( 'name' => $result['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''), 'thumb' => $image, 'children' => $children_data, 'href' => $this->url->link('product/category', 'path=' . $this->request->get['path'] . '_' . $result['category_id'] . $url) ); }
-
Добрый день!
Мне надо вывести все категории третьего уровня на одной странице категории вот в таком виде:
-
сделал проверку... а как вывести "Ничего не найдено"?
-
Добрый день!
Для опции type=TEXT сделал autocomplete, при клике по полю - отображает пустые значения. В товаре сделал отдельное поле "patina", по которому и происходит поиск.
Если ввожу нужное значение, то подбор работает нормально:
Как сделать так, чтобы выводились значения товаров, где заполнено только данное поле (patina)?
category.tpl
<?php if ($option['option_id'] == '18') { ?> <script type="text/javascript"> <!-- $('input[name=\'option[<?php echo $option["product_option_id"]; ?>]\']').autocomplete({ 'source': function(request, response) { $.ajax({ url: 'index.php?route=product/product/autocomplete_patina&filter_patina=' + encodeURIComponent(request), dataType: 'json', success: function(json) { response($.map(json, function(item) { return { label: item['name'], value: item['product_id'] } })); } }); }, 'select': function(item) { $('input[name=\'option[<?php echo $option["product_option_id"]; ?>]\']').val(item['label']); } }); //--> </script> <?php } ?>
/*controller product.php */ public function autocomplete_patina() { $json = array(); if (isset($this->request->get['filter_name']) || isset($this->request->get['filter_patina'])) { $this->load->model('catalog/product'); if (isset($this->request->get['filter_patina'])) { $filter_patina = $this->request->get['filter_patina']; } else { $filter_patina = ''; } if (isset($this->request->get['limit'])) { $limit = $this->request->get['limit']; } else { $limit = 10; } $filter_data = array( 'filter_patina' => $filter_patina, 'start' => 0, 'limit' => $limit ); $results = $this->model_catalog_product->getProducts($filter_data); foreach ($results as $result) { $json[] = array( 'product_id' => $result['product_id'], 'name' => strip_tags(html_entity_decode($result['patina'], ENT_QUOTES, 'UTF-8')), 'price' => $result['price'] ); } } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); }
в модель product.php, в getProducts добавил следующее
if (!empty($data['filter_model'])) { $sql .= " AND p.model LIKE '%" . $this->db->escape($data['filter_model']) . "%'"; } if (!empty($data['filter_patina'])) { $sql .= " AND p.patina LIKE '%" . $this->db->escape($data['filter_patina']) . "%'"; }
-
подскажите, пожалуйста, в какой версии модуля был вот такой вывод категорий?
или как его можно включить?
-
47 минут назад, spectre сказал:
Могу сделать такой
цена?
-
Добрый день! Ищу модуль, который будет отображать на странице товара другие соседние категории, помимо той, в которой находится товар.
-
-
-
У доставки, способа - "Транспортная компания", сделан набор полей:
При выборе другого способа доставки (в нашем случае "По Златоусту") и оформлении заказа в админке в кастомных полях отображается, что выбран "Луч"
1. как мне можно отключить/убрать автовыбор транспортной компании, если не выбран данный способ? Такая же ситуация с самовывозом (автоматически проставляет точки выдачи).
2. И, следовательно из предыдущего вопроса, как мне грамотно вывести и в админке и в письме эти поля? чтобы, если выбрана ТК, то рядом было написано какая компания и т.д.
-
В 10.08.2020 в 15:50, Leingard сказал:
Ну смотрите, там таблица, значит колонок должно быть одинаковое количество. Посему лучше на каждый товар создать свою табличку ибо кол-во выбранных опций может быть разное + внизу общую для total
1. Берем массив $product
2. Создаем таблицу и выводим td по кол-ву цикла задавая названия. Типо такого:
<table> <tr> <td><?php echo $column_product; ?></td> <td><?php echo $column_price; ?></td> <?php foreach ($product['option'] as $product_option) { echo '<td class="text-left">'.$product_option['name']</td>'; } ?> </tr> <tr> <td><?php echo $product['name']; ?></td> <td><?php echo $product['price']; ?></td> <?php foreach ($product['option'] as $product_option) { echo '<td class="text-left">'.$product_option['value']</td>'; } ?> </tr> </table>
3. Добавляем остальные элементы (я 2 добавил, цена и название) и остальные по вкусу + проверки на пустоту)
Как-то так) Набросал без теста, чисто по памяти блоков, но суть думаю понята
Опции не сортируются. Если хотите задать свою сортировку, добавьте ее в getOrderOptions
а как сделать, чтобы незаполненная опция (не обязательная для заполнения) тоже записывалась в базу?
-
7 минут назад, ambalocha69 сказал:
присылайте доступы и название поставщика
я использую на локальном сервере
-
появилась следующая проблема. Импортировал товары с атрибутами, картинками. Но забыл создать производителей. Теперь мне надо обновить товары, создать производителей. Создаю производителей - ничего не происходит, в логах ничего нет, производители не создаются.
-
2 часа назад, ambalocha69 сказал:
Добрый день!
ни о чем не говорит?
откройте ссылку в браузере и все станет сразу ясно
Сейчас взял у поставщика нормальный файл...
ЦитатаФайл: http://elektrostandard.ru/images/catalog/1a049748_0004.jpg Недопустимый тип: ["HTTP\/1.1 301 Moved Permanently","Date: Fri, 18 Sep 2020 11:13:13 GMT","Server: Apache\/2.4.18 (Ubuntu)","Location: https:\/\/elektrostandard.ru\/images\/catalog\/1a049748_0004.jpg","Content-Length: 351","Connection: close","Content-Type: text\/html; charset=iso-8859-1","HTTP\/1.1 200 OK","Date: Fri, 18 Sep 2020 11:13:13 GMT","Server: Apache\/2.4.18 (Ubuntu)","Last-Modified: Mon, 07 Sep 2020 13:33:04 GMT","ETag: \"44006-5aeb94210e7c8\"","Accept-Ranges: bytes","Content-Length: 278534","Connection: close","Content-Type: image\/jpeg"]
проблема решена.
-
12 минут назад, ambalocha69 сказал:
Добрый день!
ни о чем не говорит?
откройте ссылку в браузере и все станет сразу ясно
дык в том то и дело, что в YML файле-то все нормально...
похоже я увидел проблему...)
-
Добрый день!
Подскажите, пожалуйста, почему вот такая ошибка вылезает и соотв. не импортируются изображения:
ЦитатаФайл: https://elektrostandard.ru/images/catalog/1a048710_0001.jpgimages/catalog/ulichnyy-svetilnik-na-stolbe-apus-f-shokolad-ip44-gl-1009f-a043116_0002.jpg Недопустимый тип: ["HTTP\/1.0 404 Not Found","Date: Wed, 16 Sep 2020 12:46:07 GMT","Server: Apache\/2.4.18 (Ubuntu)","Cache-Control: no-cache, private","Connection: close","Content-Type: text\/html; charset=UTF-8"]
файл yml в приложении
-
возможно как-то сделать выбор способов оплаты сразу, а не после выбора пункта "Яндекс Касса"?
-
Добрый день! Делаю autocomplete для опций. Для одной опции работает, делаю для других - выдает пустые значения (второй скрин). Поля patina и dekor - сделаны, работают правильно.
controller/product
public function autocomplete() { $json = array(); if (isset($this->request->get['filter_name']) || isset($this->request->get['filter_model']) || isset($this->request->get['filter_patina']) || isset($this->request->get['filter_dekor'])) { $this->load->model('catalog/product'); if (isset($this->request->get['filter_name'])) { $filter_model = $this->request->get['filter_name']; } else { $filter_model = ''; } if (isset($this->request->get['filter_patina'])) { $filter_patina = $this->request->get['filter_patina']; } else { $filter_patina = ''; } if (isset($this->request->get['filter_dekor'])) { $filter_dekor = $this->request->get['filter_dekor']; } else { $filter_dekor = ''; } if (isset($this->request->get['limit'])) { $limit = $this->request->get['limit']; } else { $limit = 10; } $filter_data = array( 'filter_model' => $filter_model, 'filter_patina' => $filter_patina, 'filter_dekor' => $filter_dekor, 'start' => 0, 'limit' => $limit ); $results = $this->model_catalog_product->getProducts($filter_data); foreach ($results as $result) { $json[] = array( 'product_id' => $result['product_id'], 'name' => strip_tags(html_entity_decode($result['model'], ENT_QUOTES, 'UTF-8')), 'patina' => strip_tags(html_entity_decode($result['patina'], ENT_QUOTES, 'UTF-8')), 'dekor' => strip_tags(html_entity_decode($result['dekor'], ENT_QUOTES, 'UTF-8')), 'price' => $result['price'] ); } } $this->response->addHeader('Content-Type: application/json'); $this->response->setOutput(json_encode($json)); }
model/product
getProducts()
public function getProducts($data = array()) { $sql = "SELECT p.product_id, (SELECT AVG(rating) AS total FROM " . DB_PREFIX . "review r1 WHERE r1.product_id = p.product_id AND r1.status = '1' GROUP BY r1.product_id) AS rating, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND pd2.quantity = '1' AND ((pd2.date_start = '0000-00-00' OR pd2.date_start < NOW()) AND (pd2.date_end = '0000-00-00' OR pd2.date_end > NOW())) ORDER BY pd2.priority ASC, pd2.price ASC LIMIT 1) AS discount, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$this->config->get('config_customer_group_id') . "' AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special"; if (!empty($data['filter_category_id'])) { if (!empty($data['filter_sub_category'])) { $sql .= " FROM " . DB_PREFIX . "category_path cp LEFT JOIN " . DB_PREFIX . "product_to_category p2c ON (cp.category_id = p2c.category_id)"; } else { $sql .= " FROM " . DB_PREFIX . "product_to_category p2c"; } if (!empty($data['filter_filter'])) { $sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)"; } else { $sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)"; } } else { $sql .= " FROM " . DB_PREFIX . "product p"; } $sql .= " LEFT JOIN " . DB_PREFIX . "product_description pd ON (p.product_id = pd.product_id) LEFT JOIN " . DB_PREFIX . "product_to_store p2s ON (p.product_id = p2s.product_id) WHERE pd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND p.status = '1' AND p.date_available <= NOW() AND p2s.store_id = '" . (int)$this->config->get('config_store_id') . "'"; if (!empty($data['filter_category_id'])) { if (!empty($data['filter_sub_category'])) { $sql .= " AND cp.path_id = '" . (int)$data['filter_category_id'] . "'"; } else { $sql .= " AND p2c.category_id = '" . (int)$data['filter_category_id'] . "'"; } if (!empty($data['filter_filter'])) { $implode = array(); $filters = explode(',', $data['filter_filter']); foreach ($filters as $filter_id) { $implode[] = (int)$filter_id; } $sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")"; } } if (!empty($data['filter_model'])) { $sql .= " AND p.model LIKE '%" . $this->db->escape($data['filter_model']) . "%'"; } if (!empty($data['filter_patina'])) { $sql .= " AND p.model LIKE '%" . $this->db->escape($data['filter_patina']) . "%'"; } if (!empty($data['filter_dekor'])) { $sql .= " AND p.model LIKE '%" . $this->db->escape($data['filter_dekor']) . "%'"; } if (!empty($data['filter_name']) || !empty($data['filter_tag'])) { $sql .= " AND ("; if (!empty($data['filter_name'])) { $implode = array(); $words = explode(' ', trim(preg_replace('/\s+/', ' ', $data['filter_name']))); foreach ($words as $word) { $implode[] = "pd.name LIKE '%" . $this->db->escape($word) . "%'"; } if ($implode) { $sql .= " " . implode(" AND ", $implode) . ""; } if (!empty($data['filter_description'])) { $sql .= " OR pd.description LIKE '%" . $this->db->escape($data['filter_name']) . "%'"; } } if (!empty($data['filter_name']) && !empty($data['filter_tag'])) { $sql .= " OR "; } if (!empty($data['filter_tag'])) { $implode = array(); $words = explode(' ', trim(preg_replace('/\s+/', ' ', $data['filter_tag']))); foreach ($words as $word) { $implode[] = "pd.tag LIKE '%" . $this->db->escape($word) . "%'"; } if ($implode) { $sql .= " " . implode(" AND ", $implode) . ""; } } if (!empty($data['filter_name'])) { $sql .= " OR LCASE(p.model) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; $sql .= " OR LCASE(p.sku) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; $sql .= " OR LCASE(p.upc) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; $sql .= " OR LCASE(p.ean) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; $sql .= " OR LCASE(p.jan) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; $sql .= " OR LCASE(p.isbn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; $sql .= " OR LCASE(p.mpn) = '" . $this->db->escape(utf8_strtolower($data['filter_name'])) . "'"; } $sql .= ")"; } if (!empty($data['filter_manufacturer_id'])) { $sql .= " AND p.manufacturer_id = '" . (int)$data['filter_manufacturer_id'] . "'"; } $sql .= " GROUP BY p.product_id"; $sort_data = array( 'pd.name', 'p.model', 'p.quantity', 'p.price', 'rating', 'p.sort_order', 'p.date_added' ); if (isset($data['sort']) && in_array($data['sort'], $sort_data)) { if ($data['sort'] == 'pd.name' || $data['sort'] == 'p.model') { $sql .= " ORDER BY LCASE(" . $data['sort'] . ")"; } elseif ($data['sort'] == 'p.price') { $sql .= " ORDER BY (CASE WHEN special IS NOT NULL THEN special WHEN discount IS NOT NULL THEN discount ELSE p.price END)"; } else { $sql .= " ORDER BY " . $data['sort']; } } else { $sql .= " ORDER BY p.sort_order"; } if (isset($data['order']) && ($data['order'] == 'DESC')) { $sql .= " DESC, LCASE(pd.name) DESC"; } else { $sql .= " ASC, LCASE(pd.name) ASC"; } if (isset($data['start']) || isset($data['limit'])) { if ($data['start'] < 0) { $data['start'] = 0; } if ($data['limit'] < 1) { $data['limit'] = 20; } $sql .= " LIMIT " . (int)$data['start'] . "," . (int)$data['limit']; } $product_data = array(); $query = $this->db->query($sql); foreach ($query->rows as $result) { $product_data[$result['product_id']] = $this->getProduct($result['product_id']); } return $product_data; }
template
<?php if ($option['type'] == 'text') { ?> <div class="form-group<?php echo ($option['required'] ? ' required' : ''); ?>" <?php if ($option['option_id']=='17' ) { ?>id="plenka" <?php } ?>> <label class="control-label" for="<?php echo $module_name; ?>input-option<?php echo $option['product_option_id']; ?>"> <?php echo $option['name']; ?></label> <input type="text" name="option[<?php echo $option['product_option_id']; ?>]" value="<?php echo $option['value']; ?>" placeholder="<?php echo $option['name']; ?>" id="<?php echo $module_name; ?>input-option<?php echo $option['product_option_id']; ?>" class="form-control" /> </div> <?php if ($option['option_id'] == '17') { ?> <script type="text/javascript"> <!-- $('input[name=\'option[<?php echo $option["product_option_id"]; ?>]\']').autocomplete({ 'source': function(request, response) { $.ajax({ url: 'index.php?route=product/product/autocomplete&filter_name=' + encodeURIComponent(request), dataType: 'json', success: function(json) { response($.map(json, function(item) { return { label: item['name'], value: item['product_id'] } })); } }); }, 'select': function(item) { $('input[name=\'option[<?php echo $option["product_option_id"]; ?>]\']').val(item['label']); } }); //--> </script> <?php } ?> <?php if ($option['option_id'] == '18') { ?> <script type="text/javascript"> <!-- $('input[name=\'option[<?php echo $option["product_option_id"]; ?>]\']').autocomplete({ 'source': function(request, response) { $.ajax({ url: 'index.php?route=product/product/autocomplete&filter_patina=' + encodeURIComponent(request), dataType: 'json', success: function(json) { response($.map(json, function(item) { return { label: item['patina'], value: item['product_id'] } })); } }); }, 'select': function(item) { $('input[name=\'option[<?php echo $option["product_option_id"]; ?>]\']').val(item['label']); } }); //--> </script> <?php } ?> <?php if ($option['option_id'] == '19') { ?> <script type="text/javascript"> <!-- $('input[name=\'option[<?php echo $option["product_option_id"]; ?>]\']').autocomplete({ 'source': function(request, response) { $.ajax({ url: 'index.php?route=product/product/autocomplete&filter_dekor=' + encodeURIComponent(request), dataType: 'json', success: function(json) { response($.map(json, function(item) { return { label: item['dekor'], value: item['product_id'] } })); } }); }, 'select': function(item) { $('input[name=\'option[<?php echo $option["product_option_id"]; ?>]\']').val(item['label']); } }); //--> </script> <?php } ?> <?php } ?>
-
Добрый день! Подскажите, пожалуйста, как добавить несколько стран к карте России? Казахстан с Белоруссией выдернул и добавил, а вот Молдова и Румыния добавляются не туда. Координаты взял с карты мира. Что не так делаю?
-
7 минут назад, Fuf сказал:
Payment method is not available - платежный метод не разрешен.
спасибо, отправил заявку.
-
7 минут назад, Fuf сказал:
В любом случае для диагностики нужны подробности ошибки.
Посмотрите самостоятельно в логе модуля или запросите информацию у техподдержки Яндекс.Кассы ([email protected]).
2020-08-11 16:14:13 - [info] [1] [9ca927da7c043a5c455b492eed5e098f] - extension/payment/yandex_money/kassa_form_b2b 2020-08-11 16:14:15 - [info] [1] [9ca927da7c043a5c455b492eed5e098f] - Создание платежа для заказа №79 2020-08-11 16:14:15 - [info] [1] [9ca927da7c043a5c455b492eed5e098f] - Send request: POST /payments 2020-08-11 16:14:15 - [info] [1] [9ca927da7c043a5c455b492eed5e098f] - Response with code 400 received. 2020-08-11 16:14:15 - [error] [1] [9ca927da7c043a5c455b492eed5e098f] - Failed to create payment: Payment method is not available. Error code: invalid_request. 2020-08-11 16:14:15 - [warning] [1] [9ca927da7c043a5c455b492eed5e098f] - None empty buffer: 2020-08-11 16:14:15 - [info] [1] [9ca927da7c043a5c455b492eed5e098f] - Платеж не прошел. Попробуйте еще или выберите другой способ оплаты
-
-
15 часов назад, Fuf сказал:
Какая версия PHP используется?
5,6
PHPMailer не отправляет вложение
в Допомога програмістам та розробникам
Опубліковано: · Змінено користувачем nash
Добрый день! При оформлении заказа создаю EXCEL файл с сохранением в папке Upload через PHPExcel. Файл создается успешно, но при этом не приходит уведомление на почту администратору с вложением. Ошибок в логах нет никаких
В чем может быть проблема?