Пользовательский модуль Magento. Перенаправить на другой модуль и вернуться к оформлению заказа

Корзина покупок Magento построена на платформе Zend Framework в PHP. Я впервые столкнулся с фреймворком Zend, и у меня возникли следующие трудности ...

Я создаю специальный модуль, который позволит пользователям загружать изображения всякий раз, когда они покупают продукты.

Я могу перегрузить метод addAction () всякий раз, когда пользователь пытается добавить товар в свою корзину. Я также могу создать собственный модуль, который представляет форму пользователю и принимает файл (ы). Однако я не уверен, как вставить код для запуска моего модуля в мой перегруженный метод:

<?php
require_once 'Mage/Checkout/controllers/CartController.php';
class Company_SpecialCheckout_Checkout_CartController extends Mage_Checkout_CartController
{
    # Overloaded addAction
    public function addAction()
    {
        # when user tries to add to cart, request images from them
        # *********
        # *** what do i do in here to display a custom block ???? ###
        # *** and allow addAction to continue only if successfully validated form input ###
        # *********

        parent::addAction();
    }
} 

Я подозреваю, что мои трудности возникают из-за моего незнания способа работы Zend MVC. Я изучил всю документацию / вики / форумы Magento сверху вниз.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
9 314
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Я должен признать, что у меня нет опыта производства Magento, но я потратил некоторое время на изучение их кода.

Структура блока определена в XML, поэтому вам может не понадобиться расширять Контроллер тележки.

XML-файлы макета можно найти (при установке по умолчанию) в app / design / frontend / default / default / layout. Здесь вы найдете файл checkout.xml, который устанавливает структуру блоков для страницы оформления заказа.

Я посмотрел на это, но мне нужно реализовать немного логики, прежде чем продукт действительно будет добавлен в корзину (нужны некоторые загруженные файлы от пользователя, а также некоторые другие поля БД). Если пользователь не может предоставить эти данные, я не хочу, чтобы он мог оформить заказ.

rwired 31.10.2008 13:58

В таком случае можно будет использовать систему событий? CartController запускает несколько событий - checkout_cart_before_add будет наиболее полезным, и он запускается непосредственно перед добавлением продукта в корзину, что дает вам шанс выдать ошибку?

Simon 31.10.2008 15:58

Я тоже думал об этом. Идея мне очень нравится, но концептуально она не сильно отличается от метода перегрузки. Проблема, с которой я столкнулся, заключается в том, что я не знаю правильных вызовов методов, чтобы мой собственный модуль отображал ничего вообще. Каков «правильный» способ вызвать мой модуль, в который я помещаю комментарии?

rwired 03.11.2008 07:21

Вы видели это - activecodeline.com/2008/10/12/…?

Simon 03.11.2008 12:52

Похоже, это полезно. Я думаю, он хотел написать View.php для файла в app / code / local / ActiveCodeline / Example / Block /. Это дает мне еще несколько идей. Спасибо.

rwired 03.11.2008 14:04

Я думал, что перейду к новому ответу, так как думаю, что мне удалось заставить его работать.

Вот что я сделал

создал следующие файлы;

приложение / код / ​​местное / Компания / SpecialCheckout / контроллеры / Checkout / CartController.php

приложение / код / ​​местное / Компания / SpecialCheckout / etc / config.xml

приложение / etc / modules / Company_SpecialCheckout.xml

Сначала контроллер, который точно такой же, как у вас;

    <?PHP
require_once 'Mage/Checkout/controllers/CartController.php';
class Company_SpecialCheckout_Checkout_CartController extends Mage_Checkout_CartController {

    public function indexAction()
    {
        die('test');
    }
}

Затем конфигурация модуля

<?xml version = "1.0"?>
<config>
    <modules>
        <Company_SpecialCheckout>
            <version>0.1.0</version>
        </Company_SpecialCheckout>
    </modules>
    <global>
        <rewrite>
            <Company_SpecialCheckout_Checkout_Cart>
                <from><![CDATA[#^/checkout/cart#]]></from>
                <to>/SpecialCheckout/checkout_cart</to>
            </Company_SpecialCheckout_Checkout_Cart>
        </rewrite>
    </global>
    <frontend>
        <routers>
            <Company_SpecialCheckout>
                <use>standard</use>
                <args>
                    <module>Company_SpecialCheckout</module>
                    <frontName>SpecialCheckout</frontName>
                </args>
            </Company_SpecialCheckout>
        </routers>
    </frontend>
</config>

и, наконец, файл конфигурации в app / etc / modules, чтобы убедиться, что модуль поднят.

<?xml version = "1.0"?>
<config>
     <modules>
        <Company_SpecialCheckout>
            <active>true</active>
            <codePool>local</codePool>
        </Company_SpecialCheckout>
     </modules>
</config>

затем, когда вы перейдете в / checkout / cart, вы должны увидеть «test». Это основано на деталях, которые я нашел здесь.

Убедитесь, что у вас отключено кеширование файлов конфигурации в админке Magento.

Спасибо, Саймон, ценю помощь. К сожалению, эта Wiki была также моей отправной точкой, и я зашел так же далеко. У меня также есть собственный модуль, работающий автономно, я просто пытаюсь понять, как связать их вместе!

rwired 04.11.2008 13:34

Где у вас умереть («тест»); У меня есть $ this -> _ redirect ('specialcheckout', array ('_ secure' => true)); Проблема в том, что я не могу понять логику, чтобы вернуть меня к унаследованному родительскому элементу :: addAction (); если я заполню дополнительные поля.

rwired 04.11.2008 13:35

Ага, да, извини, у меня не тот конец палки, из-за которой у тебя проблемы. Нет ли способа переместить логику в настраиваемом модуле в перегруженную кассу, устраняя необходимость в дополнительном модуле?

Simon 04.11.2008 14:31

Как насчет флага сеанса? поэтому перенаправление происходит только в том случае, если флаг сеанса не был установлен, как только ваш модуль будет удовлетворен, флаг будет установлен и будет отправлен обратно в кассу?

Simon 04.11.2008 14:33

Это блестящая идея. Я собираюсь изучить это сейчас!

rwired 04.11.2008 14:36
Ответ принят как подходящий

эй, эта опция предоставляется в более новой версии magento 1.3.1 для загрузки файла из внешнего интерфейса наслаждаться

Для меня это был кошмар, я создал Учебник в своем блоге:

КОНТРОЛЛЕР / ПЕРЕМЕЩЕНИЕ / Фронтенд [...] # ^ / customer / account / # / mycustomer / account / [...]

Проверь это! Как Magento объявлять и переопределять контроллеры

Ваш ответ должен содержать достаточно данных, чтобы быть ценным, даже если ссылка не работает.

Nicktar 19.12.2012 12:45

Для тех, кто застрял на этом, я написал простейший способ решить эту проблему без перегрузки контроллеров. Мой вариант на основе одностраничного оформления заказа загляните в вики Magento

Другие вопросы по теме