SORU
23 ŞUBAT 2012, PERŞEMBE


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

  1. 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?
  2. Nasıl sipariş bu değer, fatura, satış e-postalar ve bu sayfaları görüntülerim?
  3. 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
29 ŞUBAT 2012, ÇARŞAMBA


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.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • TheXiaxue

    TheXiaxue

    3 AĞUSTOS 2009
  • Wild Academy

    Wild Academy

    8 Aralık 2009
  • xdadevelopers

    xdadeveloper

    25 Aralık 2009