Antarr Posted August 11, 2016 Share Posted August 11, 2016 Есть ли модули для вывода двух цен? У меня есть две группы клиентов (Просто люди и Партнёры) и у каждой есть две цены. Чтобы стимулировать переходить к партнёрам, хочу вывести при показе товара две цены (везде) с небольшой подписью "Нажмите эту ссылку, чтобы узнать как стать Партнёром". Картинка для общего понимания: Цену нужно выводить всегда и везде, во всех видах и положениях товара. Две цены показываются любому зашедшему и/или залогинившемуся всегда. Опционально можно не показывать уже Партнёрам. Заранее спасибо за любую помощь или подсказку или наводку. Link to comment Share on other sites More sharing options...
Antarr Posted August 16, 2016 Author Share Posted August 16, 2016 Нет вариантов? Link to comment Share on other sites More sharing options...
AlexNDR.mac Posted September 19, 2016 Share Posted September 19, 2016 А что мешает в темплейте вывести (price - XX)? Можно для группы Visitor настроить величину скидки, везде в темплейте добавить вывод цены без скидки ( 200$), тогда как цена с нужной величиной скидки будет отображаться для этой группы Visitor. Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 Выводить вторую цену нужно для всех, включая поисковых роботов. Link to comment Share on other sites More sharing options...
AlexNDR.mac Posted September 19, 2016 Share Posted September 19, 2016 Она и будет для всех Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 У каждого товара разная скидка, причём, не процентная. Настраивается в разделе Specific price для конкретной группы. В 185 строке product.tpl (и в некоторых других файлах, но это пока не суть) можно было бы вставить что-то типа: <p id="specific-partner-price">{strip}<span class="price">Partner price: {convertPrice price=$product->specificPrice.price|floatval}</span>{/strip}</p> Но оно корректно показывается, когда пользователь уже в группе. А просто мимопрохожему показывается пустота или Undefined index. Link to comment Share on other sites More sharing options...
AlexNDR.mac Posted September 19, 2016 Share Posted September 19, 2016 (edited) Для этого нужно настроить группу Посетитель (Visitor) - поставить для нее величину скидки, разрешить отображать цены. Edited September 19, 2016 by AlexNDR.mac (see edit history) Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 (edited) Группа есть, называется "Partners". C её заведения и проставления специальных цен для этой группы и возник этот вопрос: как вывести и показать цену для конкретной группы для всех. Второй строчкой под основной ценой. Однако, покупать посетитель должен по цене своей группы. Эта информаия (о цене для партнёров) для него справочная. Edited September 19, 2016 by Antarr (see edit history) Link to comment Share on other sites More sharing options...
AlexNDR.mac Posted September 19, 2016 Share Posted September 19, 2016 PrestaShop имеет три стандартные группы клиентов Visitor - все лица без учётной записи или не авторизовавшиеся клиенты. Guest - лица, разместившие заказ путём гостевого оформления. Customer - лица, создавшие учётную запись на этом сайте. Для того, чтоб отображать цены из группы Partners - нужно престе как-то понять, что это именно партнерс зашел на сайт... А она его понимает как Visitor.... Поэтому - для всех, это Visitor, для избранных - это группа по умолчанию после авторизации. Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 Это понятно. Но можно достать из базы спеццену и просто её вывести, вне зависимости от того, кто страницу загружает. Вот я чего хочу. Link to comment Share on other sites More sharing options...
AlexNDR.mac Posted September 19, 2016 Share Posted September 19, 2016 в нужном месте темплейта: {assign var='specific_price_output' value=null} {assign var='partner_price' value=Product::getPriceStatic((int)$product.id_product, true, null, 6, null, false, false, 1, false, null, null, null, $specific_price_output, true, false, null, false)} <span class="partner_price">{convertPrice price=$partner_price}</span> Только точно нужно посмотреть назначение всех переменных в классе Product Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 Fatal error: Cannot use object of type Product as array in /var/www/data/ftp/www/site/tools/smarty/sysplugins/smarty_internal_templatebase.php(171) : eval()'d code on line 338 Link to comment Share on other sites More sharing options...
AlexNDR.mac Posted September 19, 2016 Share Posted September 19, 2016 Это код с версии 1.5 был..... value=$product->getPriceStatic((int)$product->id, true, null, 6, null, false, false, 1, false, null, null, null, $specific_price_output, true, false, null, false) ООП ж у нас... не посмотрел я внимательно Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 Так выводит цену, но ту же самую, которая для текущей группы. То бишь, дублирует. Приаттачу product.tpl на всякий случай, 185-187 строка. http://dropmefiles.com/JfaNv Link to comment Share on other sites More sharing options...
AlexNDR.mac Posted September 19, 2016 Share Posted September 19, 2016 Ну да, выводит ту же цену... я ж не готовое решение предложил, а вероятный способ... Нужно посмотреть на входные данные метода getPriceStatic() и передать ему нужный набор данных для отображения цены. По памяти - не помню вот так сразу, чтобы написать готовый вариант, это нужно смотреть... Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 (edited) Где их можно откопать, чтобы посмотреть? // It needs an instanceProduct::getPrice($tax = true, $id_product_attribute = null, $decimals = 6, $divisor = null, $only_reduc = false, $usereduc = true, $quantity = 1)// Static wayProduct::getPriceStatic($id_product, $usetax = true, $id_product_attribute = null, $decimals = 6, $divisor = null, $only_reduc = false, $usereduc = true, $quantity = 1, $force_associated_tax = false, $id_customer = null, $id_cart = null, $id_address = null, &$specific_price_output = null, $with_ecotax = true, $use_group_reduction = true, Context $context = null, $use_customer_price = true); http://nemops.com/prestashop-functions-3/ Это? Вот ещё есть какая-то фнукция public static function getSpecificPrice($id_product, $id_shop, $id_currency, $id_country, $id_group, $quantity, $id_product_attribute = null, $id_customer = 0, $id_cart = 0, $real_quantity = 0) Но нет единой документации, ПШ - это какое-то поделие-копромонолит, который копать можно месяц подряд. =(( Edited September 19, 2016 by Antarr (see edit history) Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 Вот ещё выкопал класс classes/SpecificPrice.php https://github.com/PrestaShop/PrestaShop/blob/develop/classes/SpecificPrice.php С 331 строки функция. public static function getSpecificPrice($id_product, $id_shop, $id_currency, $id_country, $id_group, $quantity, $id_product_attribute = null, $id_customer = 0, $id_cart = 0, $real_quantity = 0) { if (!SpecificPrice::isFeatureActive()) { return array(); } /* ** The date is not taken into account for the cache, but this is for the better because it keeps the consistency for the whole script. ** The price must not change between the top and the bottom of the page */ $key = ((int)$id_product.'-'.(int)$id_shop.'-'.(int)$id_currency.'-'.(int)$id_country.'-'.(int)$id_group.'-'.(int)$quantity.'-'.(int)$id_product_attribute.'-'.(int)$id_cart.'-'.(int)$id_customer.'-'.(int)$real_quantity); if (!array_key_exists($key, SpecificPrice::$_specificPriceCache)) { $query_extra = self::computeExtraConditions($id_product, $id_product_attribute, $id_customer, $id_cart); $query = ' SELECT *, '.SpecificPrice::_getScoreQuery($id_product, $id_shop, $id_currency, $id_country, $id_group, $id_customer).' FROM `'._DB_PREFIX_.'specific_price` WHERE `id_shop` '.self::formatIntInQuery(0, $id_shop).' AND `id_currency` '.self::formatIntInQuery(0, $id_currency).' AND `id_country` '.self::formatIntInQuery(0, $id_country).' AND `id_group` '.self::formatIntInQuery(0, $id_group).' '.$query_extra.' AND IF(`from_quantity` > 1, `from_quantity`, 0) <= '; $query .= (Configuration::get('PS_QTY_DISCOUNT_ON_COMBINATION') || !$id_cart || !$real_quantity) ? (int)$quantity : max(1, (int)$real_quantity); $query .= ' ORDER BY `id_product_attribute` DESC, `from_quantity` DESC, `id_specific_price_rule` ASC, `score` DESC, `to` DESC, `from` DESC'; SpecificPrice::$_specificPriceCache[$key] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow($query); } return SpecificPrice::$_specificPriceCache[$key]; } Смущает то, что надо передавать id_group. По ходу, сюда надо просто вбить 4 как id группы партнёров? Как в итоге должна бы выглядеть строчка? Link to comment Share on other sites More sharing options...
AlexNDR.mac Posted September 19, 2016 Share Posted September 19, 2016 Да, многого нет, но все классы документированы, открываем classes/Product.php и примерно на 2750 строке видим все, что принимает функция (метод, если выражаться языком ооп) /** * Returns product price * * @param int $id_product Product id * @param bool $usetax With taxes or not (optional) * @param int|null $id_product_attribute Product attribute id (optional). * If set to false, do not apply the combination price impact. * NULL does apply the default combination price impact. * @param int $decimals Number of decimals (optional) * @param int|null $divisor Useful when paying many time without fees (optional) * @param bool $only_reduc Returns only the reduction amount * @param bool $usereduc Set if the returned amount will include reduction * @param int $quantity Required for quantity discount application (default value: 1) * @param bool $force_associated_tax DEPRECATED - NOT USED Force to apply the associated tax. * Only works when the parameter $usetax is true * @param int|null $id_customer Customer ID (for customer group reduction) * @param int|null $id_cart Cart ID. Required when the cookie is not accessible * (e.g., inside a payment module, a cron task...) * @param int|null $id_address Customer address ID. Required for price (tax included) * calculation regarding the guest localization * @param null $specific_price_output If a specific price applies regarding the previous parameters, * this variable is filled with the corresponding SpecificPrice object * @param bool $with_ecotax Insert ecotax in price output. * @param bool $use_group_reduction * @param Context $context * @param bool $use_customer_price * @return float Product price */ Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 (edited) If a specific price applies regarding the previous parameters, this variable is filled with the corresponding SpecificPrice object По ходу, нам этот метод не нужен. В нём будет цена, только если она есть для группы (точнее, для $id_customer)? Edited September 19, 2016 by Antarr (see edit history) Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 (edited) В общем, кажется вот это похоже на правду: {assign var='partner_price' value=SpecificPrice::getSpecificPrice($product->id, 1, 1, 177, 4, 1, 0, 0, 0, 0)} <p id="partner_price">{strip}<span class="partner_price">Partner price: {convertPrice price=$partner_price.price|floatval}</span>{/strip}</p> Топорновато выглядит же. Кто подскажет, как причесать или фиг с ним? Edited September 19, 2016 by Antarr (see edit history) Link to comment Share on other sites More sharing options...
Antarr Posted September 19, 2016 Author Share Posted September 19, 2016 Ещё бы понять как это впихнуть в остальные показы товаров: в блоке в колонке слева или справа, в списках и сетках, в модулях карусели на главной странице. Чёт повставлял, но приуныл... Не показывает. Link to comment Share on other sites More sharing options...
AlexNDR.mac Posted September 20, 2016 Share Posted September 20, 2016 getSpecificPrice() возвращает массив данных о спец ценах, установленных посредством: ТОВАР->ЦЕНЫ->СПЕЦИАЛЬНЫЕ ЦЕНЫ Link to comment Share on other sites More sharing options...
Antarr Posted September 20, 2016 Author Share Posted September 20, 2016 (edited) Ну. Всё правильно. Это и требуется. Edited September 20, 2016 by Antarr (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now