Как ненавязчиво добавлять новые методы валидации к оформлению Magento - PullRequest
3 голосов
/ 06 декабря 2011

Я хочу запретить клиентам вводить почтовые ящики в адрес доставки для выбранных способов доставки (в данном случае, UPS). Я мог бы переопределить js/prototype/validation.js, чтобы вставить новый шаблон проверки, но я не хочу разветвлять такой файл ключа.

Существует ли механизм для ненавязчивой проверки адреса доставки клиента, ПОСЛЕ того, как он выберет способ доставки через Javascript без переопределения основных файлов?

Я вижу, что Validation.add используется внутри validation.js, поэтому возможно добавить новый метод проверки вне основного файла?

Регулярное выражение, которое я хочу применить:

\b([P|p](OST|ost)?\.?\s?[O|o|0](ffice|FFICE)?\.?\s)?([B|b][O|o|0][X|x])\s(\d+)

Если проверка не может быть выполнена элегантно в JS, я был бы заинтересован в Наблюдателе на controller_action_predispatch_onepage_saveShippingMethod, который проверяет данные и выполняет перенаправление Ajax обратно в форму адреса доставки, если это необходимо.

Ответы [ 2 ]

7 голосов
/ 06 декабря 2011

Используемая библиотека: Действительно легкая проверка поля , и на этой странице объясняется, как ее расширить. Я думаю, вам понадобится что-то вроде этого:

Validation.add('address', 'Error message text', {
    pattern : /\b([P|p](OST|ost)?\.?\s?[O|o|0](ffice|FFICE)?\.?\s)?([B|b][O|o|0][X|x])\s(\d+)/
});
3 голосов
/ 06 декабря 2011

Вкратце, без отладки оформления заказа

# Unfortunately Magento 1.3.2.3 - Find real postcode from debugging checkout
    public function saveShippingAction()

        {
            $this->_expireAjax();
            if ($this->getRequest()->isPost()) {
                $data = $this->getRequest()->getPost('shipping', array());
                $customerAddressId = $this->getRequest()->getPost('shipping_address_id', false);
                $result = $this->getOnepage()->saveShipping($data, $customerAddressId);

                $preg_search = '\b([P|p](OST|ost)?\.?\s?[O|o|0](ffice|FFICE)?\.?\s)?([B|b][O|o|0][X|x])\s(\d+)';
                $address = $this->getQuote()->getShippingAddress(); #find real postcode

                if(preg_match($preg_search, $address['postcode']){
                    $result = array(
                            'error' => 1,
                            'message' => Mage::helper('checkout')->__('Invalid PO Box postcode');
                        );
                }
                else{
                        if (!isset($result['error'])) {
                            $result['goto_section'] = 'shipping_method';
                            $result['update_section'] = array(
                                'name' => 'shipping-method',
                                'html' => $this->_getShippingMethodsHtml()
                            );
                        }
                }

                $this->getResponse()->setBody(Zend_Json::encode($result));
            }
        }
...