Jump to content

difficultés à faire passer la valeur d’un champ de product.tpl vers CartController.php


Recommended Posts

Bonjour à toutes et à tous.

 

Sur ma page produit j'ai rajouter un champs texte.

Je souhaite que la valeur saisie dans ce champs soit récupéré par CartController.php c'est à dire lorsque l'on clique sur 'ajout au panier'.

 

Dans le fichier product.tpl j'ai placé mon input "champs_texte" de façon à ce qu'il soit pris en compte dans le form du bouton.

<form id="buy_block" {if $PS_CATALOG_MODE AND !isset($groups) AND $product->quantity > 0}class="hidden"{/if} action="{$link->getPageLink('cart')|escape:'html'}" method="post">
   <!-- hidden datas -->
   <p class="hidden">
      <input type="hidden" name="token" value="{$static_token}" />
      <input type="hidden" name="id_product" value="{$product->id|intval}" id="product_page_product_id" />
      <input type="hidden" name="add" value="1" />
      <input type="hidden" name="id_product_attribute" id="idCombination" value="" />

      <input type="hidden" name="mon_entier" value="" />     <-- ici
   </p>

Ensuite dans CartController.php j'ai procédé comme ceci

public $php_self = 'cart';

protected $id_product;
protected $id_product_attribute;
protected $id_address_delivery;
protected $customization_id;
protected $qty;
public    $ssl = true;

protected $mon_entier;     <-- ma variable

et

public function init()
{
   parent::init();
   // Send noindex to avoid ghost carts by bots
   header("X-Robots-Tag: noindex, nofollow", true);

   // Get page main parameters
   $this->id_product = (int)Tools::getValue('id_product', null);
   $this->id_product_attribute = (int)Tools::getValue('id_product_attribute', Tools::getValue('ipa'));
   $this->customization_id = (int)Tools::getValue('id_customization');
   $this->qty = abs(Tools::getValue('qty', 1));
   $this->id_address_delivery = (int)Tools::getValue('id_address_delivery');

   $this->mon_entier= (int)Tools::getValue('mon_entier', 1);     <-- Récupération de la valeur saisie
}

J'envoie ensuite "mon_entier" vers une fonction de Cart.php

 

Et seule la valeur par défaut (ici 1) m'est retournée.

 

Bien sûr si je donne une valeur fixe à $this->mon_entier=10, j'ai bien le retour de cette valeur.

 

En plus, je ne comprends pas comment la valeur du champs "qty" est récupérée car elle ne se trouve pas dans une section "form".

 

En désespoir de cause j'ai placé le champs "mon_entier" un peu partout sur product.tpl mais sans succès.

 

Je ne sais plus trop quoi pensé à part que ce doit être un autre fichier qui récupère les valeurs mais je ne vois pas du tout lequel.

 

Si quelqu'un a une idée sur la question il est le bienvenu  :)

 

Merci.

Edited by frieurieud (see edit history)
Link to comment
Share on other sites

Bonjour,

 

En fait, la récupération de "qty" qui vous surprends aurait du vous mettre sur la voie... de l'ajax ! Hé oui, l'ajout au panier est en réalité traité par du JavaScript. [https://github.com/PrestaShop/PrestaShop/blob/1.6/themes/default-bootstrap/js/modules/blockcart/ajax-cart.js#L316]

 

C'est en fait dans ce fichier qu'il vous faut modifier la ligne:

data: 'controller=cart&add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): ''),
			success: function(jsonData,textStatus,jqXHR) 

Afin d'y rajouter votre paramètre avec la valeur récupérée via jQuery, finalement.

  • Like 1
Link to comment
Share on other sites

YES !!! Ca marche !  ;)

 

Pour ceux que ça intéresse voilà ce que j'ai modifié :

 

Product.tpl

<form id="buy_block" {if $PS_CATALOG_MODE AND !isset($groups) AND $product->quantity > 0}class="hidden"{/if} action="{$link->getPageLink('cart')|escape:'html'}" method="post">
   <!-- hidden datas -->
   <p class="hidden">
      <input type="hidden" name="token" value="{$static_token}" />
      <input type="hidden" name="id_product" value="{$product->id|intval}" id="product_page_product_id" />
      <input type="hidden" name="add" value="1" />
      <input type="hidden" name="id_product_attribute" id="idCombination" value="" />
 
      <input type="hidden" name="mon_entier" id="idmon_entier" value="" />     <-- ici ajout d'un id
   </p>

ajax-cart.js

//send the ajax request to the server
$.ajax({
        type: 'POST',
	headers: { "cache-control": "no-cache" },
	url: baseUri + '?rand=' + new Date().getTime(),
	async: true,
	cache: false,
	dataType : "json",
	data: 'controller=cart&add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): '') + ( (parseInt(idmon_entier) && idmon_entier!= null) '&masaisie=' + parseInt(idmon_entier): ''),     <-- Récupération de mon_entier
	success: function(jsonData,textStatus,jqXHR)
	{

CartController.php

public $php_self = 'cart';

protected $id_product;
protected $id_product_attribute;
protected $id_address_delivery;
protected $customization_id;
protected $qty;
public    $ssl = true;

protected $recup_saisie ;     <-- ici

protected $ajax_refresh = false;
public function init()
	{
		parent::init();

		// Send noindex to avoid ghost carts by bots
		header("X-Robots-Tag: noindex, nofollow", true);

		// Get page main parameters
		$this->id_product = (int)Tools::getValue('id_product', null);
		$this->id_product_attribute = (int)Tools::getValue('id_product_attribute', Tools::getValue('ipa'));
		$this->customization_id = (int)Tools::getValue('id_customization');
		$this->qty = abs(Tools::getValue('qty', 1));
		$this->id_address_delivery = (int)Tools::getValue('id_address_delivery');
		$this->recup_saisie = (int)Tools::getValue('masaisie', 1);       <-- et là
	}

J'ai fait exprès de placer différents nom (plutôt que mon_entier partout) afin de mieux comprendre le cheminement.

 

Ça fonctionne très bien mais il faut que je règle une chose : maintenant lorsque je clique sur 'ajout au panier' ça me renvoie directement sur la page panier  :D

 

pffff enfin bon c'est les risques du métier ! (ouai bin si c'était plus simple j'aurai encore tout mes cheveux  -_- )

Edited by frieurieud (see edit history)
  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...