Как проверить, есть ли у товара групповая цена?
Некоторые из наших продуктов имеют специальные цены для разных групп, я установил эти цены в интерфейсе 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 } ?>
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);
Или когда вы получаете коллекцию продуктов и получаете каждый продукт по циклу по идентификатору объекта продукта.
Вы можете напрямую получить все назначенные групповые цены с помощью скрипта, запускающего этот 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()
вы не получаете массив, вы получаете строку только с одной ценой.
Надеюсь, это поможет.