Magento - кнопка «перейти к оформлению заказа», чтобы перейти на страницу входа, если вы не вошли в систему

Когда незарегистрированный пользователь (анонимный) нажимает Proceed to checkout, я хочу, чтобы он был перенаправлен на страницу входа. Затем, после того как они вошли в систему или зарегистрировались, они должны вернуться на страницу оформления заказа.

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

Сначала я пошел по пути изменения checkout.xml, чтобы получить следующие значения:

<customer_logged_in>

    <block type="core/text_list" name="checkout.cart.top_methods" as="top_methods" translate="label">
        <label>Payment Methods Before Checkout Button</label>
        <block type="checkout/onepage_link" name="checkout.cart.methods.onepage" template="checkout/onepage/link.phtml"/>
    </block>

</customer_logged_in>

<customer_logged_out>

    <block type="core/text_list" name="checkout.cart.top_methods" as="top_methods" translate="label">
        <label>Payment Methods Before Checkout Button</label>
        <block type="checkout/onepage_link_not_logged_in" name="checkout.cart.methods.onepage" template="checkout/onepage/link_not_logged_in.phtml"/>
    </block>

</customer_logged_out>

И link_not_logged_in.phtml:

$this->getLoginUrl();

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


person Flakx    schedule 10.02.2012    source источник


Ответы (3)


Перейдите на свой сайт admin. Нажмите Stores. Перейдите к Configuration -> Sales -> Checkout -> Checkout Options и установите Allow Guest Checkout на "Нет"`

edit

Откройте app/design/frontend/base/default/template/checkout/onepage.phtml. Поместите следующий код в самый верх файла:

   <?php
          if (!$this->helper('customer')->isLoggedIn()) {
                 header("Location: /customer/account/login/");
                 exit();
          }
   ?>

Наконец, установите Custom Login Redirect по адресу https://marketplace.magento.com/magehit-magehit-customloginredirect.html. Перейдите в «Администратор» -> «Система» -> «Конфигурация» -> «Клиенты» -> «Пользовательское перенаправление входа». Установите его на checkout/cart

Все готово! Я проверил это, и он делает то, что вы описали. Обычно я выполняю все различные шаги, чтобы завершить изменения, присутствующие в этих расширениях, но вы можете убедиться в этом, перейдя в app/code/local и просмотрев код расширения.

person seanbreeden    schedule 10.02.2012
comment
вот как это установлено в настоящее время. Мы не хотим, чтобы клиент входил/регистрировался у нас на странице оформления заказа на одной странице, мы хотим, чтобы они делали это на странице входа/создания учетной записи. - person Flakx; 10.02.2012
comment
Привет, Шон, мне не нужно было устанавливать аддон, я просто добавил php-код: ‹?php if (!$this-›helper('customer')-›isLoggedIn()) { header(Location: /customer/account /авторизоваться/); выход(); } ?› в файл onepage.phtml сделал свое дело. - person Flakx; 20.02.2012
comment
Я также смог использовать это, чтобы скрыть и показать кнопки входа / регистрации на досуге. - person Michael J. Calkins; 10.04.2015
comment
@TejabhagavanKollepara Готово. - person seanbreeden; 10.11.2017

У вас нет блока Mage/Checkout/Block/Onepage/Link/Not/Logged/In.php, к которому вы пытаетесь получить доступ

Если вы создаете эту ссылку непосредственно в checkout/onepage/link_not_logged_in.phtml, вы должны использовать такой код

<customer_logged_out>
    <block type="core/text_list" name="checkout.cart.top_methods" as="top_methods" translate="label">
        <label>Payment Methods Before Checkout Button</label>
        <block type="checkout/onepage_link" name="checkout.cart.methods.onepage" template="checkout/onepage/link_not_logged_in.phtml"/>
    </block>
</customer_logged_out>

Таким образом, ваш тип блока должен быть таким же, как и в стандарте.

person Sergey    schedule 10.02.2012
comment
Привет, Куджа, приносим извинения за задержку ответа. Я не совсем уверен, что вы имеете в виду? - person Flakx; 04.04.2012

Ответ от seanbreeden указал мне правильное направление, но я думаю, что есть дополнительная информация и некоторые улучшения, которые можно сделать.

Вам нужно будет добавить перенаправление с оформления заказа на страницу входа. Это легко сделать в шаблоне оформления заказа. Если вы используете одностраничную кассу и дизайн по умолчанию, это будет app/design/frontend/default/default/template/remove/checkout/onepage.phtml. Просто добавьте этот код вверху этого шаблона (внутри тегов <?php ?>).

if (!$this->helper('customer')->isLoggedIn()) {
    // Add a message that will display on the login page
    Mage::getSingleton('core/session')->addError('Please log in or create an account to checkout.');

    // Create the redirection
    header("Location: " . $this->helper('customer')->getLoginUrl());
    exit();
}

Обратите внимание на использование getLoginUrl(), это позволит Magento перенаправить на страницу оформления заказа после входа пользователя в систему.

person Jon Surrell    schedule 15.01.2015
comment
Привет, я протестировал ваш код, но в моем случае Magento перенаправляет меня обратно в корзину, а не на страницу оформления заказа. Ничего плохого? - person joaogdesigner; 07.04.2017