Özel seçenekler yalnızca alıntıda seçenek kimliği ve değerleri olarak saklanır. Her seçenek oluşturulduğunda, temel olarak veritabanından yeniden yüklenir.
Değerleri değiştirirseniz, bunları kaydetmeniz gerekir ve bu onları herkes için ayarlar.
Bu, bir olay gözlemcisi kullanarak, anında değiştirilen değerle ek bir özel seçenek ekleyerek bu soruna geçici bir çözüm buluyorum. Bunun için ek seçenekler kullanıyorum.
Sonra özgün özel seçeneği, alıntı öğesinden kaldırırım.
Kalanın boyutu 1,4'e kadar Magento ile ilgiliydi, ancak o zamandan beri ek seçenekleri sipariş öğesine manuel olarak kopyalamanız ve bir öğenin yeniden düzenlenmesi durumunda yeniden ayarlanması gerektiğine dikkat etmeniz gerekiyor.
Burada örnek bir gözlemci yapılandırması var.
<frontend>
<events>
<checkout_cart_product_add_after>
<observers>
<customoptions>
<type>singleton</type>
<class>customoptions/observer</class>
<method>checkoutCartProductAddAfter</method>
</customoptions>
</observers>
</checkout_cart_product_add_after>
<sales_convert_quote_item_to_order_item>
<observers>
<customoptions>
<type>singleton</type>
<class>customoptions/observer</class>
<method>salesConvertQuoteItemToOrderItem</method>
</customoptions>
</observers>
</sales_convert_quote_item_to_order_item>
</events>
</frontend>
dinlenme gözlemci sınıfta ele alınır.
/**
* Add additional options to order item product options (this is missing in the core)
*
* @param Varien_Event_Observer $observer
*/
public function salesConvertQuoteItemToOrderItem(Varien_Event_Observer $observer)
{
$quoteItem = $observer->getItem();
if ($additionalOptions = $quoteItem->getOptionByCode('additional_options')) {
$orderItem = $observer->getOrderItem();
$options = $orderItem->getProductOptions();
$options['additional_options'] = unserialize($additionalOptions->getValue());
$orderItem->setProductOptions($options);
}
}
/**
* Manipulate the custom product options
*
* @param Varien_Event_Observer $observer
* @return void
*/
public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{
$item = $observer->getQuoteItem();
$infoArr = array();
if ($info = $item->getProduct()->getCustomOption('info_buyRequest')) {
$infoArr = unserialize($info->getValue());
}
// Set additional options in case of a reorder
if ($infoArr && isset($infoArr['additional_options'])) {
// An additional options array is set on the buy request - this is a reorder
$item->addOption(array(
'code' => 'additional_options',
'value' => serialize($infoArr['additional_options'])
));
return;
}
$options = Mage::helper('catalog/product_configuration')->getCustomOptions($item);
foreach ($options as $option)
{
// The only way to identify a custom option without
// hardcoding ID's is the label :-(
// But manipulating options this way is hackish anyway
if ('Size' === $option['label'])
{
$optId = $option['option_id'];
// Add replacement custom option with modified value
$additionalOptions = array(array(
'code' => 'my_code',
'label' => $option['label'],
'value' => $option['value'] . ' YOUR EXTRA TEXT',
'print_value' => $option['print_value'] . ' YOUR EXTRA TEXT',
));
$item->addOption(array(
'code' => 'additional_options',
'value' => serialize($additionalOptions),
));
// Update info_buyRequest to reflect changes
if ($infoArr &&
isset($infoArr['options']) &&
isset($infoArr['options'][$optId]))
{
// Remove real custom option
unset($infoArr['options'][$optId]);
// Add replacement additional option for reorder (see above)
$infoArr['additional_options'] = $additionalOptions;
$info->setValue(serialize($infoArr));
$item->addOption($info);
}
// Remove real custom option id from option_ids list
if ($optionIdsOption = $item->getProduct()->getCustomOption('option_ids')) {
$optionIds = explode(',', $optionIdsOption->getValue());
if (false !== ($idx = array_search($optId, $optionIds))) {
unset($optionIds[$idx]);
$optionIdsOption->setValue(implode(',', $optionIds));
$item->addOption($optionIdsOption);
}
}
// Remove real custom option
$item->removeOption('option_' . $optId);
}
}
Bu kısaca olduğunu. Aynı ürünün sepete tekrar eklenmesi gibi özel durumların kontrolünü ve hata kontrolünü ekleyin.
Bu özel ürün seçenekleriyle çalışmaya başlamanızı umarım. Onlara aşina olduktan sonra yarı kötü değil.
Eğer bir şekilde bu ek verileri kaydetme musunuz? Sipariş için Yönetici'yi kontrol ettiğinizde bel, göğüs, uzunluk vb. Gösteriliyor mu? – seanbreeden
Üzgünüm, yeterince açık olmasaydım. Sadece phtml dosyasında kodlanmış javascript varsa bu bilgiyi gösteriyorum. örneğin (val == small) ve sonra Bel 30, Göğüs 36, Uzunluk 42 ... göster. Şimdi bu ekstra bilgiyi her bir öğe için saklanabilmesi için sıraya eklemek istiyorum. – Farrukh