-
Публікації
1 296 -
З нами
-
Відвідування
Тип публікації
Профілі
Форум
Маркетплейс
Статті
FAQ
Наші новини
Магазин
Блоги
module__dplus_manager
Повідомлення, опубліковані користувачем cmd
-
-
Было бы не плохо прилепить для бесплатных модулей функцию донейшенз для автора модуля. Было бы больше бесплатных модулей...
-
1
-
-
Я редактировал только catalog\model\catalog\product.php
Все верно.
Ничего не выводится, только сообщение об ошибке, нотис
Ну, если нет ошибки SQL, то данные из базы забираются. А все остальное, как я уже говорил, не интересно. Ищите где проблема. Первая моя догадка в том, что Вы делаете echo $product['related']; за пределами цикла foreach...
-
saveplanet, работает? Вот и славно. А я уже хотел отругать за вопрос "в какой строке?".
-
В контрллере категории catalog\controller\product\category.phpЕсть строка
$results = $this->model_catalog_product->getProducts($data);
Поэтому залазим в контроллер catalog\model\catalog\product.php и находим метод getProducts().Там мы видим SQL запрос. Переписываем его.$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 COUNT(*) FROM " . DB_PREFIX . "product_related pr WHERE pr.product_id = p.product_id) AS related, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$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)$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";
Все... Дальше не интересно. В файле catalog\view\theme\ваш_шаблон\template\product\category.tpl теперь доступна переменная $product['related'], которая содержит числовое значение.P.S. Сам не проверял.UPDATED:Кажется я фигню написал. Там ниже вызов в цикле:foreach ($query->rows as $result) { $product_data[$result['product_id']] = $this->getProduct($result['product_id']); }
О, чудесный OpenCart! О, божественная архитектура!
Значит так... Забыли про getProducts. Вместо того, чтобы редактировать метод getProducts нужно редактировать getProduct по аналогии т.е.
$query = $this->db->query("SELECT DISTINCT *, pd.name AS name, p.image, m.name AS manufacturer, (SELECT price FROM " . DB_PREFIX . "product_discount pd2 WHERE pd2.product_id = p.product_id AND pd2.customer_group_id = '" . (int)$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 COUNT(*) FROM " . DB_PREFIX . "product_related pr WHERE pr.product_id = p.product_id) AS related, (SELECT price FROM " . DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '" . (int)$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, (SELECT points FROM " . DB_PREFIX . "product_reward pr WHERE pr.product_id = p.product_id AND customer_group_id = '" . (int)$customer_group_id . "') AS reward, (SELECT ss.name FROM " . DB_PREFIX . "stock_status ss WHERE ss.stock_status_id = p.stock_status_id AND ss.language_id = '" . (int)$this->config->get('config_language_id') . "') AS stock_status, (SELECT wcd.unit FROM " . DB_PREFIX . "weight_class_description wcd WHERE p.weight_class_id = wcd.weight_class_id AND wcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS weight_class, (SELECT lcd.unit FROM " . DB_PREFIX . "length_class_description lcd WHERE p.length_class_id = lcd.length_class_id AND lcd.language_id = '" . (int)$this->config->get('config_language_id') . "') AS length_class, (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 COUNT(*) AS total FROM " . DB_PREFIX . "review r2 WHERE r2.product_id = p.product_id AND r2.status = '1' GROUP BY r2.product_id) AS reviews, p.sort_order FROM " . DB_PREFIX . "product p 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) LEFT JOIN " . DB_PREFIX . "manufacturer m ON (p.manufacturer_id = m.manufacturer_id) WHERE p.product_id = '" . (int)$product_id . "' AND 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') . "'");
UPDATE 2:
В этом прекрасном полотне надо добавить
if ($query->num_rows) { return array( 'product_id' => $query->row['product_id'], 'related' => $query->row['related'], // вот это добавлено 'name' => $query->row['name'], 'description' => $query->row['description'], 'meta_description' => $query->row['meta_description'], 'meta_keyword' => $query->row['meta_keyword'], 'tag' => $query->row['tag'], 'model' => $query->row['model'], 'sku' => $query->row['sku'], 'upc' => $query->row['upc'], 'ean' => $query->row['ean'], 'jan' => $query->row['jan'], 'isbn' => $query->row['isbn'], 'mpn' => $query->row['mpn'], 'location' => $query->row['location'], 'quantity' => $query->row['quantity'], 'stock_status' => $query->row['stock_status'], 'image' => $query->row['image'], 'manufacturer_id' => $query->row['manufacturer_id'], 'manufacturer' => $query->row['manufacturer'], 'price' => ($query->row['discount'] ? $query->row['discount'] : $query->row['price']), 'special' => $query->row['special'], 'reward' => $query->row['reward'], 'points' => $query->row['points'], 'tax_class_id' => $query->row['tax_class_id'], 'date_available' => $query->row['date_available'], 'weight' => $query->row['weight'], 'weight_class_id' => $query->row['weight_class_id'], 'length' => $query->row['length'], 'width' => $query->row['width'], 'height' => $query->row['height'], 'length_class_id' => $query->row['length_class_id'], 'subtract' => $query->row['subtract'], 'rating' => round($query->row['rating']), 'reviews' => $query->row['reviews'] ? $query->row['reviews'] : 0, 'minimum' => $query->row['minimum'], 'sort_order' => $query->row['sort_order'], 'status' => $query->row['status'], 'date_added' => $query->row['date_added'], 'date_modified' => $query->row['date_modified'], 'viewed' => $query->row['viewed'] );
-
Ага. Понял. Звучит очень непрактично, но задача интересная. Ща напишу решение... 10 минут...)
-
рекомендуемых товаров данного товара
:? О чем речь? Каждому товару присвоены связи с другими товарами и Вы хотите посчитать количество связей для каждого конкретного товара?
-
А если зайти Дизайн - Layout (Схемы) - Home и поменять контроллер...
И, если уже делать прямой редирект, то лучше через htaccess или контроллер. Потому что вдруг какая-то ошибка где-то выскочит до header. Некрасиво получится - не сработает редирект и поисковики заиндексируют.
-
1
-
-
Если что, я это не советовал)
-
1
-
-
1) По-моему в oCstore это можно сделать из админки
2) Контроллер главной страницы: common/home.php
-
1
-
-
Если нужна выделенка, то порекомендую hostlife.net
-
Tr0f, вопрос не ко мне - вопрос к администрации сайта (хотя я бы его задавать не советовал). Если нужна только кастомизация, то см. free-версию.
А вообще, если Вы пополните свой счет на 100 р., а потом потратите 50 р. на капчу, то ещё 50 р. останется у Вас на счете.
-
Запись
$data = array('param1' => 'value1', 'param2' => 'value2'); $this->load->model('setting/setting'); $this->model_setting_setting->editSetting('my_params_groupname', $data);
Обратите внимание, что массива $data передается и сохраняется как есть, а все старые данные каждый раз удаляются. Если передать в массиве (сохранить) три параметра (param1 и param2 и param3), а потом попытаться сохранить только два (param1 и param2), то param3 будет безвозвратно удален из базы
P.S. В моделе ModelSettingSetting фронтэнда нет метода editSetting. Он есть только в моделе админки.
-
-
Нечего проверять - все известно. В связке с bootstrap или плагином для кроссбраузерной поддержки можно юзать. Без них FF не поддерживает, IE 10 поддерживат частично, IE 9 и ниже нет поддержки, Safari частично, андроидовые браузеры частично, Opera Mini - нет.
-
1
-
-
Прочитал первые 3-4 сообщения в теме и надоело читать - решил сразу написать. Рейтинги - фигня. Ручное ранжирование - монополия. Что действительно можно сделать - платные баннеры. Например, на главной странице можно залочить какой-то блок для платной рекламы. Разработчик платит за размещение баннера - его шаблон висит на главной. Вот тут уже можно и предвзятым цензурированием заниматься по качеству.
Единственный минус - нужно написать сложную систему бронирования мест, чтобы все могли рекламировать свои работы поочередно.
А может я очень ошибаюсь и все это полная фигня))
-
2
-
-
ravilr, какие коварные костыли! Сразу чувствуется большой опыт "помоганий" на форуме))
-
1
-
-
Например так:
Добавить поле в таблице product в БД
Добавить поле в форму товара в админке
Отредактировать в моделе запись при создании товара
Отредактировать в моделе запись при редактировании товара
Добавить в карточке товара вывод значения (это уже в фронтэнде)
-
как можно добавить
Можно? Можно. Как? Как угодно. Если Вам нужен готовый код - это называется "работа". Если есть конкретные проблемы при работе с кодом и нужен ответ на конкретный вопрос - так и пишите.
-
RGB, не-не-не.... Это индусский код. Тогда уже регуляркой... Ща...
Вот эта сделает везде
одинарныедвойной перенос:nl2br(preg_replace('/[\r\n\r\n]+/', "\n", $str))
Вот эта везде
нулевыеодинарный перенос:nl2br(preg_replace('/[\r\n]{2,}/', "\r\n", $str));
А сделать так чтобы запретить только
двойныетройной перенос и больше у меня почему-то не получилось. Я слабенький в регулярках. -
Да, все четко.
UPD, хотя можно ещё вырезать двойные отступы, чтобы не злоупотребляли. Например
nl2br(str_replace("\r\n\r\n", "\r\n", strip_tags($result['text'])));
-
1
-
-
RGB, тут думать нечего - надо делать множество записей в сессию. Например, с именем, часть которого будет содержать md5 от URL. С точки зрения пользователя такая фича быть чуть-чуть удобнее. Но, опять же, учитывая наличие возможности ajax-перезагрузки капчи это чуть-чуть превращается в чуть-чуть разделенное на 5. А вот с точки зрения оптимизации серверных ресурсов это очень плохая мысль потому, что вместо одной записи данных в сессию будет 5-10-20 (или сколько страниц он просерфит) на каждого пользователя.
Резюмируя, я это делать не буду и никому не посоветую.
P.S. Реализация такой каки - 3 строки кода.
-
1
-
-
nikh, кто же Вам запрещает? Добавляйте ради Бога.
-
1
-
-
-
ещё видел скрипт, который грузит с локального если cdn недоступен
freelancer, если реп. гугла ляжет треть инета ляжет :)
В категории у товара вывести количество рекомендуемых товаров
в Допомога програмістам та розробникам
Опубліковано:
Так сделайте print_r() и посмотрите.