2008-10-31 5 views
0

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

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

Я могу перегрузить метод 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/wikis/forum сверху вниз.

ответ

1

эй этот вариант приведен в более новой версии пурпурного 1.3.1, чтобы загрузить файл с веб-интерфейсе наслаждаться

0

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

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

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

+0

Я посмотрел на это, но мне нужно реализовать немного логики до того, как продукт действительно добавится в корзину (нужны некоторые загруженные файлы от пользователя, а также некоторые другие поля БД). Если пользователь не предоставит эти данные, я не хочу, чтобы они могли проверять. – rwired 2008-10-31 10:58:45

+0

В таком случае, можно ли использовать систему событий? CartController запускает несколько событий - checkout_cart_before_add будет наиболее полезен, и он запускается непосредственно перед добавлением продукта в корзину - дает вам шанс выбросить ошибку? – Simon 2008-10-31 12:58:19

+0

Я тоже думал об этом. Мне очень нравится идея, но концептуально она не очень отличается от метода перегрузки. Трудность, с которой я сталкиваюсь, - это то, что я не знаю правильных вызовов методов, чтобы мой собственный модуль отображал * что угодно вообще *. Каков «правильный» способ вызвать мой модуль, где я помещаю комментарии? – rwired 2008-11-03 04:21:45

2

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

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

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

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

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

приложение/и т.д./модули/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> 

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

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

тогда, когда вы идете/выписываете/выставляете, вы должны увидеть 'испытание'. Это основано на деталях, которые я нашел here.

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

-3

Это был неоспоримым кошмар для меня, я создал учебник в моем блоге:

CONTROLLER/ПРИОРИТЕТ/Frontend [...] # ^/клиент/счет/# /MyCustomer/счет/ [...]

Проверьте это! How to magento declare and override controllers

0

Для тех, кто застрял на этом, я написал простейший способ решить эту проблему без перегрузки контроллеров. Мой вариант основан на проверке одной страницы take a look in magento wiki