2008-10-31 19 views
0

Le panier Magento est construit sur le Zend Framework en PHP. C'est la première fois que j'ai traité avec le framework Zend et j'ai la difficulté suivante ...Module personnalisé Magento. Redirection vers un autre module et retour à la caisse

Je crée un module personnalisé qui permettra aux utilisateurs de télécharger des images à chaque achat de produits.

Je peux surcharger la méthode addAction() chaque fois qu'un utilisateur tente d'ajouter un produit à son panier. Je peux également créer un module personnalisé qui présente le formulaire à l'utilisateur et accepte le (s) fichier (s). Cependant, je ne suis pas sûr de savoir comment insérer le code pour exécuter mon module dans ma méthode surchargée:

<?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(); 
    } 
} 

je soupçonne que mes difficultés viennent de mon manque de connaissance de la façon dont Zend MVC de faire les choses. J'ai étudié tous les fils de documentation/wikis/forums de Magento de haut en bas.

Répondre

1

hey cette option est donnée dans une version plus récente de magento 1.3.1 pour télécharger le fichier de frontend profiter

0

Je dois admettre d'emblée que je n'ai pas d'expérience de production de Magento, mais j'ai passé un certain temps à fouiner dans leur code.

La structure de bloc est définie en XML et vous n'avez donc pas besoin d'étendre réellement le contrôleur de chariot.

Les fichiers XML de mise en page peuvent être trouvés (sur une installation par défaut) sur app/design/frontend/default/default/layout. Ici, vous trouverez checkout.xml qui définit la structure du bloc pour la page de paiement.

+0

J'ai regardé cela, mais j'ai besoin d'implémenter un peu de logique avant que le produit ne soit réellement ajouté au panier (besoin de quelques fichiers téléchargés de l'utilisateur, plus quelques autres champs de DB). Si l'utilisateur ne parvient pas à fournir ces données, je ne souhaite pas qu'elles soient en mesure de payer. – rwired

+0

Dans ce cas, serait-il possible d'utiliser le système d'événements? Le CartController déclenche quelques événements - checkout_cart_before_add serait le plus utile et il se déclenche juste avant que le produit est ajouté au panier - vous donnant une chance de lancer une erreur? – Simon

+0

Je pensais à ça aussi. J'aime bien l'idée, mais conceptuellement, ce n'est pas très différent de la méthode de surcharge. La difficulté que j'ai est que je ne connais pas les appels de méthodes correctes pour que mon propre module affiche * n'importe quoi *. Quelle est la "bonne" façon d'invoquer mon module où je mets les commentaires? – rwired

2

Je pensais que je passerais à une nouvelle réponse car je pense que j'ai réussi à la faire fonctionner.

Voici ce que je l'ai fait

a créé les fichiers suivants;

app/code/local/Société/SpecialCheckout/régulateurs/Sortie/CartController.php

app/code/local/Société/SpecialCheckout/etc/config.xml

app/etc/modules/Company_SpecialCheckout.xml

D'abord le contrôleur, qui est exactement comme vous avez eu;

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

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

Ensuite, la configuration du module

<?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> 

et puis finalement le fichier de configuration dans app/etc/modules pour vérifier que le module est ramassé.

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

puis quand vous allez/checkout/panier, vous devriez voir 'test'. Ceci est basé sur les détails que j'ai trouvé here.

Assurez-vous que la mise en cache des fichiers de configuration est désactivée dans l'admin Magento.

+0

Merci Simon, apprécie l'aide. Malheureusement, Wiki était aussi mon point de départ, et je suis allé aussi loin. J'ai aussi mon module personnalisé tout travail autonome, essayant juste de comprendre comment relier les deux ensemble! – rwired

+0

Où vous avez die ('test'); J'ai $ this -> _ redirect ('specialcheckout', array ('_ secure' => true)); Le problème est, je ne peux pas comprendre la logique pour me ramener au parent hérité :: addAction(); si mes champs supplémentaires sont remplis – rwired

+0

Ah oui, désolé, j'ai le mauvais bout de bâton sur lequel vous avez des problèmes. Est-il impossible de déplacer la logique de votre module personnalisé dans la caisse surchargée, ce qui élimine le besoin d'un module supplémentaire? – Simon

-3

Il a été beeing un cauchemar pour moi, je créé un tutoriel dans mon blog:

CONTRÔLEUR/override/Frontend [...] # ^/client/compte/# /MyCustomer/compte/ [...]

Check this out! How to magento declare and override controllers

+0

Votre réponse doit contenir des données même si le lien est en panne. – Nicktar

0

Pour ceux qui sont restés sur cela j'ai écrit le moyen le plus simple pour résoudre ce problème sans surcharger les contrôleurs. Ma variante basée sur onepage checkout take a look in magento wiki