我正在使用
$id = Mage::getSingleton('customer/session')->getCustomerGroupId();
在app> design \ design \ frontend \ base \ default \ template \ tax \ checkout \ subtotal.phtml 中获取客户组ID。它总是返回1,这是不正确的。在其他模板文件中,它会在相同会话中返回正确的数字。
我以正确的客户身份登录,这不是问题所在。
可能是什么问题?
谢谢!
答案 0 :(得分:0)
今天我偶然发现了同样的问题,所以我想我会在这个问题上分享我的发现。
在我们的商店中,启用自动分配到客户组(配置 - >系统 - >客户配置 - >创建新帐户选项)设置已启用。每当客户登录时,我都会根据请求此信息的块在布局中的位置获得客户组ID的不同结果。然后我发现Minicart-Block搞砸了。
如果启用了自动客户组分配 t设置,magento将从Mage_Sales
:Mage_Sales_Model_Observer::changeQuoteCustomerGroupId
执行观察服务器。这是由于minicart在报价上收集总数。
此观察员从报价中获取地址,并验证该地址是否存在增值税ID,如果不是,则所选国家/地区是否属于欧盟。
如果没有,它将为报价分配默认用户组 - 而且它还会将该用户组分配给用户对象,这是事情变得混乱的地方:
if ((empty($customerVatNumber) || !Mage::helper('core')->isCountryInEU($customerCountryCode))
&& !$isDisableAutoGroupChange
) {
$groupId = ($customerInstance->getId()) ? $customerHelper->getDefaultCustomerGroupId($storeId)
: Mage_Customer_Model_Group::NOT_LOGGED_IN_ID;
$quoteAddress->setPrevQuoteCustomerGroupId($quoteInstance->getCustomerGroupId());
$customerInstance->setGroupId($groupId);
$quoteInstance->setCustomerGroupId($groupId);
return;
}
问题是,当您将商品添加到空购物车时,从不会在报价地址上设置增值税ID或国家/地区。这些值仅在结账过程中填写,之前无法输入。这意味着对于每个拥有购物车但尚未结帐流程的客户,Magento会将默认用户组分配给用户。
我最终禁用原始观察者并检查引用地址上是否设置了country_id
属性的任何值。
如果未设置,我会从默认地址中获取vat_id
和country_id
值(如果有),将它们设置在引用地址上,然后推送给原始观察者。
public function changeQuoteCustomerGroupId(Varien_Event_Observer $observer)
{
/** @var $quoteAddress Mage_Sales_Model_Quote_Address */
$quoteAddress = $observer->getQuoteAddress();
$quoteInstance = $quoteAddress->getQuote();
$customerInstance = $quoteInstance->getCustomer();
if (!$quoteAddress->getCountryId())
{
// no country chosen, yet. Copy default billing addresses value to quote address.
$primaryBillingAddress = $customerInstance->getPrimaryAddress('default_' . $quoteAddress->getAddressType());
if ($primaryBillingAddress->getId())
{
$quoteAddress->setVatId($primaryBillingAddress->getVatId());
$quoteAddress->setCountryId($primaryBillingAddress->getCountryId());
}
}
Mage::getSingleton('sales/observer')->changeQuoteCustomerGroupId($observer);
return $this;
}
config.xml
<events>
<sales_quote_address_collect_totals_before>
<observers>
<sales_customer_validate_vat_number>
<type>disabled</type>
</sales_customer_validate_vat_number>
<fallback_customer_validate_vat_number>
<class>vendor/sales_observer</class>
<method>changeQuoteCustomerGroupId</method>
</fallback_customer_validate_vat_number>
</observers>
</sales_quote_address_collect_totals_before>
<events>
也许这会对某人有所帮助。