Gerekli telefon alanını alandan kaldırmak için güncel kılavuz


9

Bazıları magento Sürüm 1.8.0.0'a göre ödeme sırasında 'gerekli' telefon alanının kaldırılması hakkında bir rehber yayınlayabilir, mevcut googled kaynakların çoğunluğu güncel değil ve artık çalışmıyor. Bu güncelleştirilmiş bir nasıl yapılır / rehber tutmak için mükemmel bir yer gibi görünüyor.

Bazıları Magento 1.8.0.0'ı indirerek ve kaldırıldığına dair kanıt sağlayarak çalışma çözümünü onaylayabilirse, bu kod snippet'leri bazen yararlı olabilir, ancak henüz okunması / belgelenmesi için çalışan bir çözüm bulamadık.


Yanıtlar:


8

Önce 1.8.1bu işi yapmak için herhangi bir şekilde farkında değilim, ya yerel kod havuzunda soyut çekirdek sınıfını geçersiz kılabilir veya her çocuk sınıfını (çirkin, biliyorum) yeniden yazmak gerekir.

Ondan 1.8.1sonra etkinliği tanıttılar customer_address_validation_after. Çok gurur duymasam bile, yansıma kullanarak doğrulamadan kurtuldum. Sorununuzu çözemez, ama yine de göndereceğimi düşündüm.

/**
 * Validate address ignoring phone-related errors
 *
 * Internally uses reflexion. Maybe not the most
 * efficient or clean implementation, but allows
 * this functionality to be implemented without
 * the need to rewrite 3 core classes.
 *
 * Listens to:
 * - customer_address_validation_after
 *
 * @param Varien_Event_Observer $observer Event observer
 */
public function validateAddress(Varien_Event_Observer $observer)
{
    /* @var $address Mage_Customer_Model_Address_Abstract */
    $address = $observer->getAddress();
    if (!$address) {
        return;
    }

    $prop = new ReflectionProperty('Mage_Customer_Model_Address_Abstract', '_errors');
    if (!$prop) {
        return;
    }
    $prop->setAccessible(true);
    $errors = $prop->getValue($address);
    $prop->setValue($address, array());

    $errorMessage = $this->getErrorMessage();
    foreach ($errors as $error) {
        if ($error !== $errorMessage) {
            $address->addError($error);
        }
    }
}

/**
 * Get standard error message
 *
 * @return string
 */
protected function getErrorMessage()
{
    return Mage::helper('customer')->__('Please enter the telephone number.');
}

Ben de dosyalanmış gerekli olmayan tanımlamak için bir güncelleme komut dosyası yazdım ve ön uç doğrulama kaldırmak için tüm formları düzenledi. Dediğim gibi, bu en iyi çözüm olmayabilir, ancak 3-4 sınıf IMHO'yu yeniden yazmaktan daha iyidir.

GÜNCELLEME çekirdek takımı olayı sarılmış customer_address_validation_afterbir şartlı başlıyor içindeki 1.9.0aracılığıyla 1.9.1.1(Gerçekten ... bana hiç mantıklı neden merak) benim çözüm yüzden olacak maalesef bu sürümler için değil iş. Şartlı şans eseri kaldırıldı 1.9.2.


Teşekkürler! Sadece bunu bir modüle koyun: github.com/sreichel/magento-StackExchange_RequiredTelephone
sv3n

6

Mage_Customer_Model_Address_Abstract375-377 numaralı hattaki * sınıfını, telefon numarasının Zend Doğrulaması'nı yorumlayarak değiştirmeniz gerekecektir .

//if (!Zend_Validate::is($this->getTelephone(), 'NotEmpty')) {
//   $errors[] = Mage::helper('customer')->__('Please enter the telephone number.');
//}

ve gerekli özniteliği kaldırarak veritabanında telefon özniteliğinin kendisini de içerir. Bu, aşağıdaki sorgu ile yapılabilir

UPDATE `eav_attribute` SET `is_required` = 0 WHERE `attribute_code` = 'telephone';

Bu, telefon alanlarının ön uç (Javascript) doğrulamasına dikkat edecektir.

** Sınıf dosyasını localkod dizininize kopyaladığınızdan emin olun *


Özel bir uzantıdan soyut bir sınıfı genişletemeyeceğinizi (yeniden yazamayacağınızı) unutmayın. Tüm dosyayı yalnızca app / code / local dizinine kopyalayabilir ve orada özelleştirebilirsiniz. Ayrıca bu cevabın 1.8'in altındaki Magento versiyonları için de geçerli olduğunu unutmayın.
Mark van der Sanden

Kesinlikle haklısın. Hemen düzenleyeceğim
Sander Mangel

Önerilen yanıtların gösterdiği gibi, Abstract.php dosyasını / public_html / app / code / core / Mage / Müşteri / Model / Adres'ten public_html / app / code / local / Mage / Müşteri / Model / Adres'e kopyaladım. telefon numarası ve çalıştır UPDATE eav_attribute SET is_required = 0 WHERE attribute_code = 'telefon' LIMIT 1; 1 satır etkilendi. (Sorgu 0.0506 saniye sürdü) Tüm önbellekleri temizledi (macgento derlemem her zaman kapalı) Ancak müşterilerin ödeme yapmadan önce bir numara vermeleri gerekiyordu. Bazıları bu çözümün 1.8.0.0'da çalıştığını doğrulayabilir mi, çünkü benimki üzerinde çalışmıyor.
Alistair

2
Sander'ın sorgusunda küçük bir hata var: Sorgudaki LIMIT 1'i atlayın. Varsayılan CE 1.8 kurulumunda, eav_attribute'telefon' kodlu 4 giriş vardır , böylece hangisinin güncellendiğini söyleyemezsiniz. Sonra kod çalışması gerekir (sadece test ettim). Görsel kısım için, yine <em>*</em>de alanın etiketinde tüm formlarda kaldırmanız gerekir (ödeme / adres düzenleme). Tabii ki, bir tür tek adımlık ödeme varsa, varsayılan Magento işlevlerinden bazılarını geçersiz kılabilir ve bu cevap çalışmayabilir.
Mark van der Sanden

1
Merhaba Mark: Yorumunuz için teşekkürler, mağazamda durumun böyle olup olmadığını kontrol ettim, ancak yalnızca kod'telephone ile bir adet eav_atribute'im var "SELECT * FROM eav_attribute WHERE attribute_code = 'telefon'" Satırlar 0-0 gösteriliyor (Toplam 1, Sorgu 0.0005 saniye sürdü), bu yüzden mağazamda sizinkinin aksine bunlardan sadece biri var .. ve şu anda "is_required = 0" olarak ayarlandı
Alistair

5

Site teması için adres şablonunu değiştirmenizi ve telefonu varsayılan değer olarak boşluk veya tire ile gizli bir alan haline getirmenizi öneririm. Bu yeniden yazma / üzerine yazma gerektirmez.


2

Özeti kullanan sınıfları özel bir uzantı ve yapılandırma yeniden yazmaları kullanarak yeniden yazamazsınız.

  • Mage_Sales_Model_Quote_Address,
  • Mage_Customer_Model_Address,
  • Mage_Sales_Model_Order_Address,

Ardından validate, telefon kontrolünü hariç tutacak kendi işlevinizi oluşturabilir veya gerekli tüm özellikleri kontrol edebilir ve ayarlandığını doğrular.


1
Doğru, ama ne yazık ki her ikinci ödeme veya nakliye modülü bu sınıfları yeniden yazmaya çalışıyor (birkaç isim verebilirim). Genellikle bir seçenek değildir veya çok dağınık olur.
fmrng

ama bu birden çok yeniden yazmayı çözdünüz mü? çünkü o çözümü kullanabilir ve validasyonunuzu oraya enjekte edebilirsiniz.
David Manners

Elbette bunu yapabilirsiniz, ancak bunu her bir proje için yapmak zorundasınız, çünkü bu sınıfları başka kimin yeniden yazacağını bilmiyorsunuz. Ne yazık ki, müşteriler her zaman telefon doğrulamasını kaldırmayı ister. Geldiğim tek standart ve "temiz" çözüm, cevabımda tarif ettiğim çözümdür ve tüm Magento sürümleri için bile işe yaramaz. Uygulanamazsa, en kolayı soyut sınıfı yerel kod havuzuna kopyalamak ve doğrulamayı yorumlamaktır ... en iyisi değil, ancak kötüye kullanmamanız iyi olur.
fmrng

2

Ben sadece temelde David'in yaklaşımını takip Tobi tarafından küçük bir uzantı "Webguys_Telefonkeinpflicht" ile karşılaştım. İlgili alt sınıfları yeniden yazar. Çok sevdiğim şey, sadece yeniden yazılan sınıflarda bir olay göndermesi ve daha sonra tüm özelleştirme bir olay gözlemcisinde yapılması. Ayrıca core_block_abstract_to_html_afterregex kara büyüsü ile yıldızı ve gerekli sınıfı giriş alanından kaldırmak için olayı gözlemler . Ve elbette, telefon özniteliğini eav_attributetabloda gerekli olmayan hale getiren bir kurulum komut dosyası ile birlikte gelir . Uzantıyı GitHub'da kontrol edebilirsiniz .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.