Je viens d'installer Magento Community Edition version 1.8.0.0 (paramètres par défaut).
Système -> Configuration -> Ventes -> Paiement -> Options de paiement
Activer le paiement en une page: Oui
Autoriser le départ des invités: Oui
J'essaie d'ajouter un produit au panier en utilisant la méthode de la chaîne de requête.
Selon toutes les ressources que j'ai trouvées, voici les bonnes manières de le faire:
[store]/checkout/cart/add/product/1/
[store]/checkout/cart/add?product=1&qty=1
mais ils ne travaillent pas ... le chariot reste vide.
Après un certain temps, j'ai trouvé la solution de travail:
[store]/checkout/cart/add/product/1/form_key/yu6b5VEzwSU2V7YE/
Cependant, j'aimerais que pas mette form_key paramètre dans l'URL.
Cette fonctionnalité de sécurité n’est pas nécessaire dans mon cas.
Par exemple, la comparaison de produits fonctionne correctement sans form_key:
[store]/catalog/product_compare/add/product/1/
L'idée est de mettre un lien statique sur certains autres sites Web (le formulaire généré dynamiquement n'est pas connu), ainsi, si un client clique dessus, il est immédiatement redirigé vers le magasin avec un panier rempli.
Est-il possible de se débarrasser du paramètre form_key tout en pouvant ajouter un produit au panier? Et si oui, alors comment?
Ce que j'ai fait est de remplacer la CartController
de Magento par un module personnalisé. J'ai créé un fichier dans: \app\code\local\Espace de noms\AddProductFromUrl\controllers\Checkout\CartController.php
<?php
require_once 'Mage/Checkout/controllers/CartController.php';
class Namespace_AddProductFromUrl_Checkout_CartController extends Mage_Checkout_CartController {
# overloaded addAction
public function addAction() {
// generate form_key if missing or invalid
if (!($formKey = $this->getRequest()->getParam('form_key', null)) || $formKey != Mage::getSingleton('core/session')->getFormKey()) {
$this->getRequest()->setParams(array('form_key' =>Mage::getSingleton('core/session')->getFormKey()));
}
// do parent actions
parent::addAction();
}
}
?>
(Le module doit avoir le fichier config.xml et être activé sous etc/modules/
comme pour chaque module personnalisé magento. Changez Namespace
avec celui que vous utilisez.)
Cela fonctionne parfaitement comme magento 1.7 et avec un impact minimal; le form_key
est généré s'il manque et c'est tout.
Cela fonctionne mieux pour moi dans Magento C 1.8
<?php
$formKey = Mage::getSingleton('core/session')->getFormKey();?>
<form action="/checkout/cart/add/product/<?php echo $productid; ?>" method="post">
<input type="hidden" name="form_key" value="<?php echo $formKey; ?>" />
<input type="text" name="qty"> QTY
<input type="submit" value="Add to basket" />
</form>
Cette étape n'est pas très compliquée! J'espère que cette aide.
//Namespace need to change with your namespace
//AddProduct need to change with your module name
class Namespace_AddProduct_AddController extends Mage_Core_Controller_Front_Action {
public function indexAction() {
$product_id = $this->getRequest()->getParam('products');
$qty = $this->getRequest()->getParam('qty'); //used if your qty is not hard coded
$cart = Mage::getModel('checkout/cart');
$cart->init();
if ($product_id == '') {
continue;
}
$productModel = Mage::getModel('catalog/product')->load($product_id);
//I added only Virtual product here. If no need, remove this condtion
if ($productModel->getTypeId() == Mage_Catalog_Model_Product_Type::TYPE_VIRTUAL) {
try
{
$cart->addProduct($productModel, array('qty' => '1')); //qty is hard coded
}
catch (Exception $e) {
continue;
}
}
$cart->save();
if ($this->getRequest()->isXmlHttpRequest()) {
exit('1');
}
$this->_redirect('checkout/cart');
}
}
Utilisez le lien "Ajouter au panier" de votre produit où que vous soyez sur un site Web Magento ::
Le code suivant peut être utile:
$product = Mage::getModel('catalog/product')->load($YourProductID);
echo Mage::helper('checkout/cart')->getAddUrl($product);
De magento 1.8 besoin d'ajouter la clé de formulaire $formKey = Mage::getSingleton('core/session')->getFormKey();?>
à l'URL
Voici comment je le fais dans Magento 1.8.1
<a href="<?= $this->getAddtoCartUrl($_product, array('qty' => $_price['price_qty'])) ?>">
Les éléments suivants peuvent être utilisés avec un ensemble de quantité:
$product = Mage::getModel('catalog/product')->load($getProductID);
echo Mage::helper('checkout/cart')->getAddUrl($product, array('qty'=>$getQty));
En fin de compte, ce que j’ai fait est de comparer les nouvelles modifications avec l’ancien code et j’ai découvert que le bouton Ajouter au panier était réglé sur type = "bouton" et ne soumettait pas.
Changer le bouton pour simplement taper = "submit" et aucune autre modification ne l'a réellement fait fonctionner Ceci est dans [theme]/template/catalogue/produit/vue/addtocart
peut avoir à se déplacer du dossier de base s'il est inexistant