Jump to content

Есть ли модули для вывода двух цен?


Recommended Posts

Есть ли модули для вывода двух цен? У меня есть две группы клиентов (Просто люди и Партнёры) и у каждой есть две цены. Чтобы стимулировать переходить к партнёрам, хочу вывести при показе товара две цены (везде) с небольшой подписью "Нажмите эту ссылку, чтобы узнать как стать Партнёром".

 

Картинка для общего понимания: 

 

post-1288201-0-75463400-1470929231_thumb.jpg

 

Цену нужно выводить всегда и везде, во всех видах и положениях товара. Две цены показываются любому зашедшему и/или залогинившемуся всегда. Опционально можно не показывать уже Партнёрам.

 

Заранее спасибо за любую помощь или подсказку или наводку.

Link to comment
Share on other sites

  • 1 month later...

А что мешает в темплейте вывести (price - XX)?

Можно для группы Visitor настроить величину скидки, везде в темплейте добавить вывод цены без скидки ( 200$), тогда как цена с нужной величиной скидки будет отображаться для этой группы Visitor.

Link to comment
Share on other sites

У каждого товара разная скидка, причём, не процентная. Настраивается в разделе 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

Группа есть, называется "Partners". C её заведения и проставления специальных цен для этой группы и возник этот вопрос: как вывести и показать цену для конкретной группы для всех. Второй строчкой под основной ценой.

 

Однако, покупать посетитель должен по цене своей группы. Эта информаия (о цене для партнёров) для него справочная.

Edited by Antarr (see edit history)
Link to comment
Share on other sites

  • PrestaShop имеет три стандартные группы клиентов
  • Visitor - все лица без учётной записи или не авторизовавшиеся клиенты.
  • Guest - лица, разместившие заказ путём гостевого оформления.
  • Customer - лица, создавшие учётную запись на этом сайте.

Для того, чтоб отображать цены из группы Partners - нужно престе как-то понять, что это именно партнерс зашел на сайт... А она его понимает как Visitor....

Поэтому - для всех, это Visitor, для избранных - это группа по умолчанию после авторизации.

Link to comment
Share on other sites

Это понятно. Но можно достать из базы спеццену и просто её вывести, вне зависимости от того, кто страницу загружает. Вот я чего хочу.

Link to comment
Share on other sites

в нужном месте темплейта:

{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

Ну да, выводит ту же цену... я ж не готовое решение предложил, а вероятный способ...

Нужно посмотреть на входные данные метода getPriceStatic() и передать ему нужный набор данных для отображения цены. По памяти - не помню вот так сразу, чтобы написать готовый вариант, это нужно смотреть...

Link to comment
Share on other sites

Где их можно откопать, чтобы посмотреть?

// 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 by Antarr (see edit history)
Link to comment
Share on other sites

Вот ещё выкопал класс 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

Да, многого нет, но все классы документированы, открываем 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

If a specific price applies regarding the previous parameters,

this variable is filled with the corresponding SpecificPrice object

 

По ходу, нам этот метод не нужен. В нём будет цена, только если она есть для группы (точнее, для $id_customer)?

Edited by Antarr (see edit history)
Link to comment
Share on other sites

В общем, кажется вот это похоже на правду:
 

{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 by Antarr (see edit history)
Link to comment
Share on other sites

Ещё бы понять как это впихнуть в остальные показы товаров: в блоке в колонке слева или справа, в списках и сетках, в модулях карусели на главной странице. Чёт повставлял, но приуныл... Не показывает.

Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...