Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Настройка One Page Checkout
 
microb
Member
 
Avatar
Total Posts:  70
Joined:  2009-01-23
Russia, Moscow
 

Добрый день.
Надо удалить из onepage checkout shipping address? Подскажите как это сделать? Очень нужно.
Спасибо.

 
Magento Community Magento Community
Magento Community
Magento Community
 
niro
Mentor
 
Avatar
Total Posts:  1609
Joined:  2009-03-04
Latvia, Riga
 

Достаточно сложно (ресурсоёмко), так как для корректной работы системы в целом этот адрес должен быть сохранён. Легче сделать выбор радиокнопки “Доставить на этот адрес”, чтобы шаг заполнения этого адреса пропускался. Ну кто хочет, тот сделает выбор и введёт его.

P.S. Изменения процесса заказа в магенто сложная штука. Даже добавить нужные поля не особо легко, а убрать тяжелее, так как стандартные объекты магенто много где используются. Например адрес доставки всплывает ещё и в учётной записи, и в письмах, и в панели администрирования.

 
Magento Community Magento Community
Magento Community
Magento Community
 
t_rodriguez
Sr. Member
 
Avatar
Total Posts:  229
Joined:  2009-01-14
 

Я реализовал этот момент, но достаточно, так сказать, хитро ) На самом деле я его не удалил, я просто пропускаю этот шаг, перекидывая пользователя сразу на следующий. Далее я поясню логику. Но учтите следующее.

Удалять его действительно слишком ресурсоемко, т.к. shipping address тесно завязан с как минимум тремя крупными моментами. Это собственно сам one page checkout, это multishiping checkout, и наконец это аккаунт пользователя - используется в личной информации при регистрации и в адресной книге (причем если копать, то окажется, что это не одно и тоже).

Если multishiping checkout можно отключить через админку, то с остальным мы так просто не разберемся. Поэтому был найден выход через хитрость, про которую я упомянул в начале.

Логика на странице one page checkout.

Если пользователь делает покупку впервые, то шаг с регистрацией и без отличается только наличием поля с паролем. Поэтому смело через админку оставляем только пункт с регистрацией.

Если пользователь регистрируется впервые, то billing adress = shipping adress. Тут стоит пояснить, в чем разница этих адресов. Billing по сути ваши регистрационные данные, карточка покупателя. При этом сложно представить себе ситуацию, когда адрес пользователя из регистрационных данных нужно изменить на другой в следующем шаге. Тем более, как-то глупо просить на следующем шаге его еще и заново вбить, если вы делаете покупку впервые. Поэтому: billing adress = shipping adress, и пошли все в сад.

Ситуация когда billing adress не равен shipping adress возможна, когда кастомер допустим переехал, а рег. данные хочет оставить прежние. Либо это фирма, в рег. данных у нее основной адрес, но доставку они хотят осуществить в свой филиал. Т.е. вы понимаете, ситуация возможно, но ее вероятность слишком мала, чтобы тратить на это целый шаг.

Если она таки нужна, то мы используем условие “если billing не равен shipping то показать шаг shipping”.

Т.е. имеем:

1. если кастомер не зарегистрирован, то либо зарегистрировать, либо войти;
2. если кастомер регистрируется впервые, то billing = shipping;
3. если billing = shipping, то пропускаем шаг shipping и переходим на следующий после него (при этом информация из billing автоматом дублируется самой Magento в shipping);
4. если пользователь нажмет кнопку “Назад” то так и быть, показываем ему шаг shipping, пусть имеет возможность отредактировать;

С этим разобрались. Начинаем копать дальше, и реализуем такой же механизм и в акаунте пользователя. И, т.к. адреса взаимосвязанны, настраиваем следующую логику.

1. если кастомер зарегестрирован, то для one page checkout показать его billing (без всякого дроп-дауна с выбором адресов, только billing и не более);
2. если в адресной книге указанно, что billing = shipping - пропустит шаг shipping;
3. иначе показать дроп-даун с адресами кастомера, где можно выбрать другой адрес для доставки либо вбить новый.

Думаю я понятно написал ) Если что, спрашивайте.

 
Magento Community Magento Community
Magento Community
Magento Community
 
t_rodriguez
Sr. Member
 
Avatar
Total Posts:  229
Joined:  2009-01-14
 

P.S.:

Все это делается без изменений в core файлах.

P.P.S.:

Блок с прогрессом сбоку я тоже удалил, заменив на простое перечисление шагов, с подсветкой текущего. А сбоку лучше вывести лист того, что на данный момент пользователь покупает.

Т.е. все там можно достаточно упростить, не углубляясь в глубокое переписывание на что-то совершенно новое.

 
Magento Community Magento Community
Magento Community
Magento Community
 
microb
Member
 
Avatar
Total Posts:  70
Joined:  2009-01-23
Russia, Moscow
 
niro - 16 October 2009 11:13 AM

Достаточно сложно (ресурсоёмко), так как для корректной работы системы в целом этот адрес должен быть сохранён. Легче сделать выбор радиокнопки “Доставить на этот адрес”, чтобы шаг заполнения этого адреса пропускался. Ну кто хочет, тот сделает выбор и введёт его.

P.S. Изменения процесса заказа в магенто сложная штука. Даже добавить нужные поля не особо легко, а убрать тяжелее, так как стандартные объекты магенто много где используются. Например адрес доставки всплывает ещё и в учётной записи, и в письмах, и в панели администрирования.

Подскажите, как сделать так чтобы выбор доставить на этот адрес был по умолчанию, а чекбоксы вообще не показывались бы и след. шаг пропускался бы…
Спасибо.

 
Magento Community Magento Community
Magento Community
Magento Community
 
t_rodriguez
Sr. Member
 
Avatar
Total Posts:  229
Joined:  2009-01-14
 

Как-то так, в your-theme/checkout/onepage/billing.phtml:

1. в начале формы

<?php if ($this->customerHasAddresses()): ?>
<fieldset>
        <
div class="checkout-set">
        
<?php echo $this->getAddressesHtmlSelect('billing'?>
        <?php $_badr 
Mage::getSingleton('customer/session')->getCustomer()->getDefaultBilling(); ?>
        <?php $_sadr 
Mage::getSingleton('customer/session')->getCustomer()->getDefaultShipping(); ?>
        
<address><?php echo Mage::getSingleton('customer/session')->getCustomer()->getAddressById($_badr)->format('html'?></address>
        </
div>
</
fieldset>
<?php endif; ?>

2. ближе к концу

<?php // Ð’место Ð½Ð¸Ð¶Ðµ Ð·Ð°ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚ированного ÐºÐ¾Ð´Ð° ?>
        
<?php if (!$this->isCustomerLoggedIn() && !$this->customerHasAddresses()): ?>
        
<input type="hidden" name="billing[save_in_address_book]" value="1" />
        
<?php endif; ?>
        <?php 
if ($this->canShip()): ?>
                <?php 
if ($this->isCustomerLoggedIn() && $this->customerHasAddresses()): ?>
                        <?php 
if ($_badr != $_sadr): ?>
                        <?php 
//echo $_badr.' != '.$_sadr; ?>
                        
<input type="hidden" name="billing[use_for_shipping]" value="0" />
                        
<?php else: ?>
                        <?php 
//echo $_badr.' == '.$_sadr; ?>
                        
<input type="hidden" name="billing[use_for_shipping]" value="1" />
                        
<?php endif; ?>
                <?php 
else: ?>
                
<input type="hidden" name="billing[use_for_shipping]" value="1" />
                
<?php endif; ?>
        <?php 
endif; ?>
        <?php 
/*
        <?php if ($this->isCustomerLoggedIn() && $this->customerHasAddresses()): ?>
        <p>
                <input type="checkbox" name="billing[save_in_address_book]" value="1" id="billing:save_in_address_book" onchange="shipping.setSameAsBilling(false);"<?php if ($this->getAddress()->getSaveInAddressBook()):?> checked="checked"<?php endif;?> />
                <label for="billing:save_in_address_book"><?php echo $this->__('Save in address book') ?></label></li>
        </p>
        <?php else: ?>
        <input type="hidden" name="billing[save_in_address_book]" value="1" />
        <?php endif; ?>
        <?php if ($this->canShip()): ?>
        <p>
                <input type="radio" name="billing[use_for_shipping]" id="billing:use_for_shipping_yes" value="1" <?php if ($this->isUseBillingAddressForShipping()) {?>checked="checked" <?php }?>onclick="$('shipping:same_as_billing').checked = true;" />
                <label for="billing:use_for_shipping_yes"><?php echo  $this->__('Ship to this address') ?></label><br />
                <input type="radio" name="billing[use_for_shipping]" id="billing:use_for_shipping_no" value="0" <?php if (!$this->isUseBillingAddressForShipping()) {?>checked="checked" <?php }?>onclick="$('shipping:same_as_billing').checked = false;" />
                <label for="billing:use_for_shipping_no"><?php echo $this->__('Ship to different address') ?></label>
        </p>
        <?php else: ?>
        <input type="hidden" name="billing[use_for_shipping]" value="1" />
        <?php endif; ?>
        */ 
?>

Ð’ shipping.phtml

<?php if ($this->isCustomerLoggedIn() && $this->customerHasAddresses()):?>
        
<p>
                <
input type="checkbox" name="shipping[save_in_address_book]" value="1" title="<?php echo $this->__('Save in address book') ?>" id="shipping:save_in_address_book" onkeypress="shipping.setSameAsBilling(false);"<?php if ($this->getAddress()->getSaveInAddressBook()):?> checked="checked"<?php endif;?> />
                <
label for="shipping:save_in_address_book"><?php echo $this->__('Save in address book'?></label>
        </
p>
        
<?php else: ?>
        
<input type="hidden" name="shipping[save_in_address_book]" value="1" />
        
<?php endif; ?>
        <?php 
// Ð’место Ð½Ð¸Ð¶Ðµ Ð·Ð°ÐºÐ¾Ð¼Ð¼ÐµÐ½Ñ‚ированного ÐºÐ¾Ð´Ð° ?>
        
<input type="hidden" name="shipping[same_as_billing]" id="shipping:same_as_billing" value="1" <?php if($this->getAddress()->getSameAsBilling()): ?>checked="checked"<?php endif ?> />
        
<?php /*
        <p>
                <input type="checkbox" name="shipping[same_as_billing]" id="shipping:same_as_billing" value="1" <?php if($this->getAddress()->getSameAsBilling()): ?>checked="checked"<?php endif ?> onclick="shipping.setSameAsBilling(this.checked)" />
                <label for="shipping:same_as_billing"><?php echo $this->__('Use Billing Address') ?></label>
        </p>
        */ 
?>
 
Magento Community Magento Community
Magento Community
Magento Community
 
microb
Member
 
Avatar
Total Posts:  70
Joined:  2009-01-23
Russia, Moscow
 

Не работает, если заказывать как гость, то дальше billing не проходит, просто не жмется кнопка..действий 0....
Что-то тут не так...прошу еще помощи…
Спасибо.

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top