Ajax dans magento (charge ou produit)bloc de
Ce que je veux réaliser:
En cliquant sur un lien du produit/de l'image (au moins dans certaines régions) pour ouvrir une pop-up avec le plein de produits (essentiellement tout le contenu de la vue du produit page).
Ce que j'ai fait/essayé jusqu'à présent:
- créé toutes les choses à l'extérieur de l'ajax code php (le module, des liens, des modèles, des réécritures)
- créé l'ajax contrôleur (qui peut être l'accès par un lien de ce type:
http://test.com/index.php/ajaxproductview/ajax/index/id/2
). - de suivre les différents tutoriels ( comme cette ou cette ) - qui m'a aidé à en arriver là. Mais je ne veux pas charger mon bloc personnalisé, je veux que le défaut du produit bloc(s).
- essayé d'ajouter un peu de code dans le indexAction(). Il y arrive, mais le code ne fonctionne pas. Je ne reçois pas toutes les erreurs/avis/rapports, juste ce qu'il semble comme une boucle infinie qui tue mon processeur.
$body = $this ->getLayout() ->createBlock('product.info') //taken from catalog.xml ->toHtml(); $this->getResponse()->setBody($body);
Toutes les autres pages fonctionnent très bien, et c'est un nouveau magento avec seulement magnéto et mon module est installé et activé.
Ma fonction AJAX obtient tout simplement ce code HTML de réponse, le met dans un div, et ouvre un pop-up.
Ma question(s) est(sont) - comment puis-je régler l'id de produit, de sorte que le bloc sait ce produit à charger, et comment puis-je charger ce bloc correctement. J'ai aussi essayé quelque chose de similaire à ceci:
Merci.
PS: j'ai aussi essayé ceci:
$layout = $this->getLayout();
$update = $layout->getUpdate();
$update->load('catalog_product_view');
$layout->generateXml();
$layout->generateBlocks();
$output = $layout->getOutput(); //$output is an empty string
OriginalL'auteur Vlad Preda | 2013-01-18
Vous devez vous connecter pour publier un commentaire.
Le contrôleur de Produit utilise une aide à définir le produit actif. Vous devriez être en mesure de faire de même dans votre contrôleur de!
Essayer avant de vous faire votre layouting:
Une autre chose à prendre en compte:
Si vous ajoutez un bloc comme le product.info le bloc. Il a besoin des autres enfants blocs si elle les appelle dans son fichier de modèle.
Il serait plus simple d'utiliser une mise en page personnalisée fichier xml. Vous pouvez ensuite ajouter une mise en page spécifique pour votre action à gérer (votre action de la poignée se compose de vos routeurs nœud dans votre module etc/config.xml fichier sous
<frontend><routers>
, par exemple<Yourmodule>
nœud, assurez-vous de minuscules il! Et puis avec des traits de soulignement ajouter le contrôleur nom et le nom de l'action, dans votre cas index_index) comme ceci:Cela rend la vue.phtml le bloc de la racine qui le rend lui-même à l'aide de son toHtml méthode.
Par conséquent, dans les actions de votre contrôleur, vous n'avez besoin que mes deux lignes ci-dessus, puis:
Oui, c'est exact. La plus simple serait d'ajouter votre propre xml fichier de mise en page dans le module. Ajoutez ensuite les blocs de votre action spécifique de la poignée comme "<yourmodule_index_index>...</yourmodule_index_index>". Je vais mettre à jour ma question par rapport à cela.
Élaboré sur cette.
Génial, merci beaucoup. il fonctionne parfaitement. Il semble que j'ai essayé quelque chose de similaire, mais manquait name="root" et output="toHtml"
Suite à tout ce qui est décrit ici m'a aidé énormément! J'ai maintenant le problème où je n'arrive pas à accéder à l'objet produit à partir de l'intérieur de mon modèle personnalisé, même si j'ai mis en place avec la ligne de Mage::helper('catalog/product')->initProduct($productId, $this) dans mon contrôleur. (le produit de l'enfant blocs s'affichent correctement). Je me demandais ce que d'appeler tout le monde fait pour y avoir accès?
OriginalL'auteur mpaepper