Как проверить, есть ли у товара групповая цена?


Некоторые из наших продуктов имеют специальные цены для разных групп, я установил эти цены в интерфейсе magento. Мне просто нужно знать, как получить групповую цену или проверить, есть ли она у продукта.

У меня есть эта строка, которая проверяет, вошел ли клиент в систему:

<?php
//Check if User is Logged In
$login = Mage::getSingleton('customer/session')->isLoggedIn(); 
if ($login) {

}

Поэтому я предполагаю, что это будет похоже, но я просто не знаю, что изменить или на что это изменить. если я не очень хорошо объяснил это, пожалуйста, дайте мне знать.


Добавлен код

<?php
//Check if User is Logged In
$login = Mage::getSingleton('customer/session')->isLoggedIn();
if ($login) {
    //Get Customers Group ID
    $groupId = Mage::getSingleton('customer/session')->getCustomerGroupId();
    if ($groupId == 5) {
        $group_price = Mage::getModel('catalog/product')->getGroupPrice();
        if ($group_price) {
            ?>
            <span class="price-label"><?php echo "Special Group Price " ?></span><?php
        }
    }
} else { ?>
    <span class="price-label"><?php echo "Now" ?></span>
<?php } ?>
Author: 7ochem, 2014-09-17

2 answers

Вы можете проверить групповую цену с помощью функции getGroupPrice() объекта продукта. Это не равно нулю, что означает выход цены группы в продукте.

$product = Mage::getModel('catalog/product')->load($productId);
if (!is_null($product->getGroupPrice())) {
    //group price  h
}

Magento применяет групповую цену в качестве цены, когда цена продукта больше, чем цена группы продуктов

Вы не можете легко получить групповую цену. Вам нужно загрузить продукт значение ресурса атрибута с помощью getResource()->getAttribute('group_price'):

Редактировать: если у вас есть $product объект продукта, то вы можете получить групповую цену, используя ниже код:

$groupPrices = $ProductObject->getData('group_price');
if (is_null($groupPrices)) {
    $attribute = $ProductObject->getResource()->getAttribute('group_price');
    if ($attribute) {
        $attribute->getBackend()->afterLoad($ProductObject);
        $groupPrices = $ProductObject->getData('group_price');
    }
}

if (!is_null($groupPrices) || is_array($groupPrices)) {
    foreach ($groupPrices as $groupPrice) {
        echo "<br/>";
        echo $Groupprice = $groupPrice['website_price'];
        echo "<br/>";
        echo $Groupprice = $groupPrice['cust_group'];
    }

}

Измененный код:

<?php
//Check if User is Logged In
$login = Mage::getSingleton('customer/session')->isLoggedIn(); 
if ($login && Mage::getSingleton('customer/session')->getCustomerGroupId() == 5) {

    $groupPrices = $ProductObject->getData('group_price');
    $Groupprice = $groupPrices;
    if (is_null($groupPrices)) {
        $attribute = $ProductObject->getResource()->getAttribute('group_price');
        if ($attribute) {
            $attribute->getBackend()->afterLoad($ProductObject);
            $groupPrices = $ProductObject->getData('group_price');
        }
    }
    /* check group price exit nor not */
    if (!is_null($groupPrices) || is_array($groupPrices)) {
        foreach ($groupPrices as $groupPrice) {

            if ($groupPrice['cust_group'] == Mage::getSingleton('customer/session')->getCustomerGroupId()) {
                echo $Groupprice = $groupPrice['website_price'];
                echo "<br/>";
                echo $GroupIds = $groupPrice['cust_group'];
                break;
            }
        }
    }
    /* $Groupprice  is null mean group price is not  exit*/
    if (!is_null($Groupprice)) {
        //group price eixts
        ?>
        <span class="price-label"><?php echo "Special Group Price " ?></span>
        <?php
    } else {
        //Group price is exits.
        ?>
        <span class="price-label"><?php echo "Now" ?></span>
    <?php }
    ?>

<?php } else { ?>
    <span class="price-label"><?php echo "Now" ?></span>
<?php } ?>

Проблема: $group_price = Mage::getModel('catalog/product')->getGroupPrice(); является неправильным кодом, он не дает групповой цены.

Вы можете указать цену группы товаров, если вы загружаете Mage::getModel('catalog/product') по продукту $group_price = Mage::getModel('catalog/product')->load($product)->getGroupPrice();

Mage::getModel('catalog/product')->getGroupPrice() не давал товарного объекта. Вы можете получить объект продукта по:

Mage::getModel('catalog/product')->load($productId);

Или когда вы получаете коллекцию продуктов и получаете каждый продукт по циклу по идентификатору объекта продукта.

 10
Author: Amit Bera, 2016-06-29 10:21:23

Вы можете напрямую получить все назначенные групповые цены с помощью скрипта, запускающего этот PHP-скрипт из командной строки:

require_once __DIR__.'/../app/Mage.php';
$product = Mage::getModel('catalog/product')->load(6);
var_dump($product->getData('group_price'));

В Magento 1.9 массив групповых цен выглядит следующим образом:

SKU1,array(4) {
  [0]=>
  array(6) {
    ["price_id"]=>
    string(6) "151560"
    ["website_id"]=>
    string(1) "0"
    ["all_groups"]=>
    string(1) "0"
    ["cust_group"]=>
    string(2) "17"
    ["price"]=>
    string(7) "52.5000"
    ["website_price"]=>
    string(7) "52.5000"
  }
  [1]=>
  array(6) {
    ["price_id"]=>
    string(6) "151561"
    ["website_id"]=>
    string(1) "0"
    ["all_groups"]=>
    string(1) "0"
    ["cust_group"]=>
    string(2) "18"
    ["price"]=>
    string(7) "52.5000"
    ["website_price"]=>
    string(7) "52.5000"
  }
  [2]=>
  array(6) {
    ["price_id"]=>
    string(6) "151562"
    ["website_id"]=>
    string(1) "0"
    ["all_groups"]=>
    string(1) "0"
    ["cust_group"]=>
    string(2) "19"
    ["price"]=>
    string(7) "52.5000"
    ["website_price"]=>
    string(7) "52.5000"
  }
}

Если вы используете $product->getGroupPrice() в интерфейсе, я думаю, что вы получите цену продукта, назначенную пользователю, зарегистрированную в интерфейсе. Из-за этого для $product->getGroupPrice() вы не получаете массив, вы получаете строку только с одной ценой.

Надеюсь, это поможет.

 3
Author: Jaime Niñoles, 2016-08-19 12:32:21