Profesyonel - Teklif/sipariş ürün kullanıcı girişini temel öğesi özniteliği
Özet
Ürün kaydedilmedi ya da ürünün sıradan ürün özellikleri gibi Düzenle sayfasında görüntülenen bir ürün öznitelik oluşturmak istiyorum. Bunun yerine/alıntı ürünleri sipariş etmek için kaydedilmesini istiyorum ve emir, ve bu faturalar üzerinde gösterilen. Ayrıca sepete ürün eklemeden önce ön ucunda Müşteri tarafından yapılandırılabilir olmalıdır.
Ayrıntılar
- Sadece ile gibiÖzel Seçeneklerelement önuç Ürün için eklenmesi gereken bir form sayfası.
- AksineÖzel Seçenekler, bu bir değilgerçekürün özniteliği. Yönetim ürün sayfaları veya öznitelik ayarlar üzerinde görüntülenen olmamalıdır.
- Müşteri geçerli bir değer sağlamak için gereklidir. Sunucu tarafı doğrulama yapmak mümkün olmak istiyorum.
- Bir sahip olmak istiyorum .phtml şablon html oluşturuluyor. Şu anda geçersiz kılmak mümkün değilimapp/tasarım/ön/baz/default/Katalog/ürün/view/tip/varsayılan.phtml(tasarım) tatmin edici sonuçlar. Ancak yakalama, doğrulamak ve sonunda değerini nasıl kurtaracağımı bilmiyorum.
- Bu form elemanı değerini siparişi ürün öğe/Alıntı ile kaydedilmesi gerekir.
- Bu değer herhangi bir ve tüm faturalar, siparişler, satış e-postalar üzerinde görüntülenmesi gerekir.
- Bir şablon ile çıkışı kontrol etmek istiyorum, ya da en azından değerini görüntülemek için kullanılan dize geri dönebilecek
Sorularıma
- Nasıl doğrulamak ve sonunda tasarruf değeri
<input>
ön sayfa Ürün için teklif madde ürün ne zaman eklenir sepeti, ve daha sonra ödeme işlemi için Sipariş kalemi? - Nasıl sipariş bu değer, fatura, satış e-postalar ve bu sayfaları görüntülerim?
- Nasıl bir sipariş toplama değerimi öğeleri belirli bir değere sahiptir siparişleri almaya süzgeç?
Güncelleme 1
sales_quote_item_qty_set_after
gibi olaylar sırasında catalog/product
bir modeli (ve muhtemelen 9**) bu kodu çalıştırabilirsiniz keşfettim
$infoBuyRequest = $product->getCustomOption('info_buyRequest');
$buyRequest = new Varien_Object(unserialize($infoBuyRequest->getValue()));
$myData = $buyRequest->getMyData();
Bu şekilde benim özel almak, Müşteri tarafından sağlanan, <input>
ürün üzerinde sayfamdan verileri başardı.
info_buyRequest
teklif ve sipariş öğeleri ile kaydedilir bu sanıyorum. Yani, bu eğerkısmensorunlarım 1 ve 2 çözüldü. Ancak, hala uygun bu kodu çalıştırmak için nerede bilmiyorum, ve ben arka uç sipariş/teklif/rapor sayfaları görüntülemek için biliyorum. Ayrıca bu veritabanında seri bir değer olarak saklanır bu yana, teklif/sipariş öğesi koleksiyonları özel verilere dayalı olarak elde etmek için en zor olacak inanıyoruz.
CEVAP
Profesyonel ürün öznitelikleri veya ürün özel seçenekleri olmayan seçenekleri eklemek için bir yeteneği sağlar. Ürün üzerinde ayarlanır ve opsiyon kodu additional_options
ile öğeleri alıntı.
Almanız gereken iki adım vardır, olay bir gözlemci yoluyla ele alınabilir. Eğer ek seçenekler yeniden düzenlenmesi yoluyla taşımak istiyorsanız, Ayrıca üçüncü bir olayı gözlemek gerekir.
Seçenekler öğesini alıntı Ekle
İlk adım sepete eklenmeden önce yüklenen Ürün için ek seçenekler ayarlamak için olay gözlemci eklemektir. Bir seçenek catalog_product_load_after
olay kullanmaktır.
<catalog_product_load_after>
<observers>
<extra_options>
<type>model</type>
<class>extra_options/observer</class>
<method>catalogProductLoadAfter</method>
</extra_options>
</observers>
</catalog_product_load_after>
Olay gözlemci olarak ek denetimler ekleyebilirsiniz istenen sayfa gerçekten bir eylem sepete Ekle. Bu gözlemci yöntemi en önemli nokta ürün modeli additional_options
seçeneği için özel seçenekleri seçimi eklemektir.
public function catalogProductLoadAfter(Varien_Event_Observer $observer)
{
// set the additional options on the product
$action = Mage::app()->getFrontController()->getAction();
if ($action->getFullActionName() == 'checkout_cart_add')
{
// assuming you are posting your custom form values in an array called extra_options...
if ($options = $action->getRequest()->getParam('extra_options'))
{
$product = $observer->getProduct();
// add to the additional options array
$additionalOptions = array();
if ($additionalOption = $product->getCustomOption('additional_options'))
{
$additionalOptions = (array) unserialize($additionalOption->getValue());
}
foreach ($options as $key => $value)
{
$additionalOptions[] = array(
'label' => $key,
'value' => $value,
);
}
// add the additional options array with the option code additional_options
$observer->getProduct()
->addCustomOption('additional_options', serialize($additionalOptions));
}
}
}
Ek seçenekler teklif kalemi için Ürün otomatik olarak taşınacaktır. Bu gözlemci, seçeneklerinizi sepeti ve ödeme Gözden görünür.
Seçenekleri öğesi ekleyin
Onlara inat için ek bir gözlemci (sadece Profesyonel 1.5 beri) gereklidir.
<sales_convert_quote_item_to_order_item>
<observers>
<extra_options>
<type>model</type>
<class>extra_options/observer</class>
<method>salesConvertQuoteItemToOrderItem</method>
</extra_options>
</observers>
</sales_convert_quote_item_to_order_item>
Burada sipariş kalemi için teklif maddeden seçeneği geçiyoruz.
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);
}
}
Bu noktada ek seçenekler olacak görünür Müşteri sipariş tarihi ve ön sipariş e-postaları yanı sıra yönetici arayüzü sipariş manzarası, faturalar, gönderiler, creditmemos ve PDF'ler.
Yeniden sıralar için destek ekleyin
Bu oprions bir sipariş sırasında yeni düzene taşımak amacıyla, bakım kopyalamak için almak gerekir. Burada bir olasılık checkout_cart_product_add_after
kullanma olayı.
<checkout_cart_product_add_after>
<observers>
<extra_options>
<type>singleton</type>
<class>extra_options/observer</class>
<method>checkoutCartProductAddAfter</method>
</extra_options>
</observers>
</checkout_cart_product_add_after>
Ayrıştırma ekstra seçenekler ve bina ek seçenekler bir dizi olmalı taşındı ayrı bir işlev için kod tekrarını önlemek, ama bu örnek bırakayım gerekli mantık için her yöntem için bir yerde netlik.
public function checkoutCartProductAddAfter(Varien_Event_Observer $observer)
{
$action = Mage::app()->getFrontController()->getAction();
if ($action->getFullActionName() == 'sales_order_reorder')
{
$item = $observer->getQuoteItem();
$buyInfo = $item->getBuyRequest();
if ($options = $buyInfo->getExtraOptions())
{
$additionalOptions = array();
if ($additionalOption = $item->getOptionByCode('additional_options'))
{
$additionalOptions = (array) unserialize($additionalOption->getValue());
}
foreach ($options as $key => $value)
{
$additionalOptions[] = array(
'label' => $key,
'value' => $value,
);
}
$item->addOption(array(
'code' => 'additional_options',
'value' => serialize($additionalOptions)
));
}
}
}
Çeviri:
Yerde mekanizması bu seçenek etiket veya değerleri çevirmek yok. İşte bu konuda yararlı olabilecek birkaç fikir.
Quote_item_load_after olay bir gözlemci olarak, ek seçenekler bir dizi almak ve $option['print_value'] = $helper->__($option['value']);
ayarlayın. Eğer print_value
ayarlanırsa, Profesyonel görüntü işleme için kullanır.
Aynı sipariş öğeleri ile yapılabilir.
Yok böyle bir şey print_label
, ama sen-ebil koymak bir özel dizin (label_source
belki) ve set etiketi üzerinde sinek kullanarak bu kaynak, örneğin $option['label'] = $helper->__($option['label_source']);
.
Bunun ötesinde muhtemelen şablonları (getItemOptions()
için grep) değiştirme veya blok sınıfları (additional_options
grep) geçersiz kılma başvurmak zorunda kalacak.
XML vs XML öğesi özniteliği...
takımda Ürün Bekleme listesi Öğesi ve ...
X-UA Uyumlu öğesi özniteliği için http...
Nasıl web sitesi, TEMEL kimlik doğrula...
Profesyonel Ürün Öznitelik Değeri Elde...