Корзина покупок 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 сверху вниз.






Я должен признать, что у меня нет опыта производства Magento, но я потратил некоторое время на изучение их кода.
Структура блока определена в XML, поэтому вам может не понадобиться расширять Контроллер тележки.
XML-файлы макета можно найти (при установке по умолчанию) в app / design / frontend / default / default / layout. Здесь вы найдете файл checkout.xml, который устанавливает структуру блоков для страницы оформления заказа.
В таком случае можно будет использовать систему событий? CartController запускает несколько событий - checkout_cart_before_add будет наиболее полезным, и он запускается непосредственно перед добавлением продукта в корзину, что дает вам шанс выдать ошибку?
Я тоже думал об этом. Идея мне очень нравится, но концептуально она не сильно отличается от метода перегрузки. Проблема, с которой я столкнулся, заключается в том, что я не знаю правильных вызовов методов, чтобы мой собственный модуль отображал ничего вообще. Каков «правильный» способ вызвать мой модуль, в который я помещаю комментарии?
Вы видели это - activecodeline.com/2008/10/12/…?
Похоже, это полезно. Я думаю, он хотел написать View.php для файла в app / code / local / ActiveCodeline / Example / Block /. Это дает мне еще несколько идей. Спасибо.
Я думал, что перейду к новому ответу, так как думаю, что мне удалось заставить его работать.
Вот что я сделал
создал следующие файлы;
приложение / код / местное / Компания / 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 была также моей отправной точкой, и я зашел так же далеко. У меня также есть собственный модуль, работающий автономно, я просто пытаюсь понять, как связать их вместе!
Где у вас умереть («тест»); У меня есть $ this -> _ redirect ('specialcheckout', array ('_ secure' => true)); Проблема в том, что я не могу понять логику, чтобы вернуть меня к унаследованному родительскому элементу :: addAction (); если я заполню дополнительные поля.
Ага, да, извини, у меня не тот конец палки, из-за которой у тебя проблемы. Нет ли способа переместить логику в настраиваемом модуле в перегруженную кассу, устраняя необходимость в дополнительном модуле?
Как насчет флага сеанса? поэтому перенаправление происходит только в том случае, если флаг сеанса не был установлен, как только ваш модуль будет удовлетворен, флаг будет установлен и будет отправлен обратно в кассу?
Это блестящая идея. Я собираюсь изучить это сейчас!
эй, эта опция предоставляется в более новой версии magento 1.3.1 для загрузки файла из внешнего интерфейса наслаждаться
Для меня это был кошмар, я создал Учебник в своем блоге:
КОНТРОЛЛЕР / ПЕРЕМЕЩЕНИЕ / Фронтенд [...] # ^ / customer / account / # / mycustomer / account / [...]
Проверь это! Как Magento объявлять и переопределять контроллеры
Ваш ответ должен содержать достаточно данных, чтобы быть ценным, даже если ссылка не работает.
Для тех, кто застрял на этом, я написал простейший способ решить эту проблему без перегрузки контроллеров. Мой вариант на основе одностраничного оформления заказа загляните в вики Magento
Я посмотрел на это, но мне нужно реализовать немного логики, прежде чем продукт действительно будет добавлен в корзину (нужны некоторые загруженные файлы от пользователя, а также некоторые другие поля БД). Если пользователь не может предоставить эти данные, я не хочу, чтобы он мог оформить заказ.