Jump to content

Quelqu'un pourrait m'indiquer ou se fait le traitement d'update de la base dans le résumé du panier


Recommended Posts

Bonjour.

 

Faire un "up" alors que vous postez entre midi et deux, c'est pas vraiment une bonne idée.

 

Vous souhaitez trouver le traitement par Prestashop ou savoir où faire un nouveau traitement ?

 

Les hooks sont "addproduct" et "updateproduct". Les traitements de Prestashop se font via l'AdminCatalog. Il faut rechercher là où la variable addproduct ou updateproduct est demandée.

 

Edit: en relisant le titre, je suis loin de ce que vous voulez. J'ai du mal à voir ce que vous voulez ? Je ne vois pas ces boutons. Vous parlez de l'action effectuée quand on supprime un produit de notre panier et quand on ajoute un produit dans notre panier ("Add to cart") ?

Link to comment
Share on other sites

Salut Sbizz, je suis content que ce soit vous qui me répondiez parce que vous êtes calé sur Prestashop!

 

En fait ce que je veux vraiment, c'est de savoir ou se fait le traitement d'update de la base de données lorsque l'on clique sur le bouton + ou - d'une ligne de produit dans le résumé du panier.

 

photo ici --> http://hpics.li/0dc03aa

 

J'ai déjà pencher sur le problème et j'ai trouvé une piste (qui ne m'a mené nulle part...), le chemin, je pense, est lors de l'appui sur le bouton, il arrive sur le fichier ajax-cart.js, ensuite sur le fichier CartController.php puis sur Cart.php (la classe Cart).

 

Ce que je veux exactement, c'est de savoir si c'est possible de faire pareil pour un bouton que je crée et qui fera l'action d'uploader un champ dans la table cart_product.

 

Mon entreprise souhaite pour ses clients, qu'ils choisissent un dépôt ou leur colis sera livré et donc je suis dans l'obligation de faire cela avec une liste déroulante et de ce fait, d'uploader la réponse dans cart_product.

 

Suis-je un peu plus clair ?

Link to comment
Share on other sites

Oui, c'est un peu plus clair !

 

Alors ajax-cart gère le panier sur votre droite (ou gauche, bref le block). Après quelques recherches, votre demande se trouve plus au niveau du fichier /themes/mytheme/js/cart-summary.js

 

$('.cart_quantity_up').unbind('click').click(function(){ upQuantity($(this).attr('id').replace('cart_quantity_up_', '')); return false; });
 $('.cart_quantity_down').unbind('click').click(function(){ downQuantity($(this).attr('id').replace('cart_quantity_down_', '')); return false; });

 

Ils appellent donc la fonction upQuantity ou downQuantity.

 

Étant donné que vous avez créé un nouveau champ, vous devrez faire votre propre système (donc faire-vous même les fonctions JS puis surcharger le CartController).

 

Pour le fichier JS, y'a pas trop de difficulté : sur le onChange de votre liste déroulante, vous faite un appel AJAX. Ce dernier appellera la page cart.php qui se charge d'appeler le CartController.

 

Dans le CartController, en revanche, il va falloir vous démarquer un peu, pour éviter de faire appel à une autre fonction. Il faudra déjà passer la variable "ajax" à "true" (ça évite de faire appel au fonction displayHeader(), displayContent() et displayFooter() qui rendront vos données de retour obsolètes).

 

Ensuite, vous remarquerez que Prestashop vérifie la présence de la variable "summary". Si elle n'existe pas, il fait appel à includeCartModule(). Entre les deux, vous rajoutez un "elseif" avec une variable que vous aurez nommé :

 

if (Tools::getIsset('summary'))
  {
  }
elseif (Tools::getIsset('my_var'))
{
}
  else
$this->includeCartModule();

 

Vous n'avez plus qu'à faire vos controles de données et faire un appel SQL si cela est nécessaire.

Link to comment
Share on other sites

Merci pour ces explications mais j'ai fait quelques recherches et j'ai trouvé du coup comment appeler les fonctions et le résultat fonctionne bien, le seul problème est que ceci est avec des boutons et non des listes déroulantes!

 

Je ne sais pas comment m'y prendre avec des listes déroulantes, faut'il forcement que j'écrive du javascript dans le code ?

 

le code ci dessous représente les listes déroulantes: (ne fonctionne pas)

 
<td class="cart_depot">
  <select name="Depot">
   {if $product.qte_bourg > 0}
 {if $depot == 11}
  <option value="{$link->getPageLink('cart.php', true)}?depot&id_product={$product.id_product|intval}&id_depot=11&token={$token_cart}" selected="selected"><a rel="nofollow" class="cart_depot" id="{$product.id_product}_{$product.id_product_attribute}" href="">Bourg.</a></option>
 {else}
  <option value="{$link->getPageLink('cart.php', true)}?depot&id_product={$product.id_product|intval}&id_depot=11&token={$token_cart}"><a rel="nofollow" class="cart_depot"  id="{$product.id_product}_{$product.id_product_attribute}" href="">Bourg.</a></option>
 {/if}
   {/if}
   {if $product.qte_bron > 0}
 {if $depot == 12}
  <option value="12" selected="selected"><a rel="nofollow" class="cart_depot" id="{$product.id_product}_{$product.id_product_attribute}" href="{$link->getPageLink('cart.php', true)}?depot&id_product={$product.id_product|intval}&id_depot=12&token={$token_cart}">Bron</a></option>
 {else}
  <option value="12"><a rel="nofollow" class="cart_depot" id="{$product.id_product}_{$product.id_product_attribute}" href="{$link->getPageLink('cart.php', true)}?depot&id_product={$product.id_product|intval}&id_depot=12&token={$token_cart}">Bron</a></option>
 {/if}
   {/if}
</select>
</td>

 

le code ci dessous représente les boutons: (fonctionne)

{if $product.qte_bourg > 0}
  <a rel="nofollow" class="cart_depot" id="cart_depot_{$product.id_product}_{$product.id_product_attribute}" href="{$link->getPageLink('cart.php', true)}?depot&id_product={$product.id_product|intval}&id_depot=11&token={$token_cart}" title="{l s='Subtract'}"><img src="{$img_dir}icon/quantity_down.gif" alt="{l s='Subtract'}" width="14" height="9" /></a>
 {/if}
 {if $product.qte_bron > 0}
  <a rel="nofollow" class="cart_depot" id="cart_depot_{$product.id_product}_{$product.id_product_attribute}" href="{$link->getPageLink('cart.php', true)}?depot&id_product={$product.id_product|intval}&id_depot=12&token={$token_cart}" title="{l s='Subtract'}"><img src="{$img_dir}icon/quantity_down.gif" alt="{l s='Subtract'}" width="14" height="9" /></a>
 {/if}

 

Pour les boutons qui fonctionnent, lors de l'appuie, il y a un href qui fais appel à cart.php et cela fonctionne mais je n'arrive pas à y faire fonctionner sur les listes déroulantes.

 

Pourrais-je avoir de l'aide pour régler mon problème de liste déroulante svp ?

Link to comment
Share on other sites

Vous êtes obligé de passer par du Javascript. Bien que j'ai jamais essayé un truc, je regarde ... non c'est pas possible.

 

Les boutons de Prestashop sont en faite des balises <a> redesignée. Or, une liste déroulante ne peut contenir de balise <a>.

 

Il faut donc passer par du Javascript. D'ailleurs, sachez que Prestashop ne passe pas par un rechargement de page : si il détecte que l'utilisateur a activé Javascript, il stop la redirection. Du coup, tout se fait en live. Si l'utilisateur n'a Javascript d'activé, alors il est redirigé.

Link to comment
Share on other sites

Bonjour Sbizz,

pourriez-vous m'aider sur la construction de la liste déroulante en javascript, je bloque sur le code à écrire en javascript.

 

Je ne vois pas trop comment insérer du javascript dans un .tpl, je pense que ce n'est pas possible, j'aimerai le faire via un fichier .js mais je ne sais pas ou il faut le déclarer!

 

Une petite idée, svp ? :)

 

Cordialement.

Link to comment
Share on other sites

Vous pouvez le faire "proprement", c'est à dire surcharger la méthode setMedia() du FrontController pour y ajouter votre nouveau fichier JS. Vous pouvez aussi le faire à-la-va-vite, en touchant à un fichier déjà mis en place (je pense que le mieux serait le fichier /themes/mytheme/js/tools.js).

 

Ensuite, vous identifiez votre <select> :

 

<select id="myselect">
<option value="a">A</option>
<option value="b">B</option>
</select>

 

Pour finir, dans votre fichier JS il suffit de récupérer le changement :

 

$('#myselect').change(function(){
var myvalue = $(this).val();
$.ajax({
....
});
});

Link to comment
Share on other sites

Je ne comprend pas très bien comment le faire, pourtant je pense que cela est simple.

 

Les templates et les fichiers php me rendent confus!

 

J'ai un bouton, qui, lorsque l'on click dessus effectue une action menée par un href!

 

<a rel="nofollow" class="cart_depot" id="cart_depot_{$product.id_product}_{$product.id_product_attribute}" href="{$link->getPageLink('cart.php', true)}?depot&id_product={$product.id_product|intval}&id_depot=11&token={$token_cart}" title="{l s='Subtract'}"><img src="{$img_dir}icon/depot11.gif" alt="{l s='Subtract'}" width="14" height="9" /></a>

 

Comment faire aussi simple avec une liste déroulante ?

Link to comment
Share on other sites

On peut pas, je vous l'ai dit...

 

Les boutons de Prestashop sont en faite des balises <a> redesignée.

 

D'ailleurs, sachez que Prestashop ne passe pas par un rechargement de page : si il détecte que l'utilisateur a activé Javascript, il stop la redirection.

 

 

une liste déroulante ne peut contenir de balise <a>

 

Vous pouvez faire pareil après, si vous n'avez que très peu d'options. Mais ça risque d'encombrer.

 

Il n'y a rien de difficile, mais si vous vous lancez sur Prestashop sans connaître un minimum Javascript (+ JQuery, qui, pourtant, est largement plus simple que le Javascript en lui-même) et l'architecture MVC, tout sera difficile.

 

Je sais pas si vous êtes dans une boîte qui vous demande de développer vite, mais vous devriez prendre le dessus sur votre patron si vous ne voulez pas être débordé. En Août je ne connaissais rien de Prestashop et mon patron m'a mis un projet sur le dos qui devait être rendu 1 mois et demi après. Le projet est obsolète, crade et pas du tout exportable. J'ai discuté avec mon patron pour me laisser faire une V2 mais en ne m'imposant pas de limite de temps (car ça vous met la pression). Je connais maintenant Prestashop et je suis entrain de développer le même module, qui pourra être installé en deux cliques (et c'est loin d'être un simple module). Je l'ai d'ailleurs bientôt fini, après 2 mois de dév.

Link to comment
Share on other sites

D'abord, bravo pour votre courage vis à vis de votre patron, lui tenir tête n'est pas une chose facile...

 

Pour ce qui est du temps, je n'en ai pas beaucoup, à la base de mon contrat j'ai signé pour créer un seul site en un an sous prestashop, et bam 3 mois après il me sort qu'il en faut 2 pour mi décembre! J’avoue que je lui ai fais un travail assez crade parce qu'il n'y a pas de surcharge propre ou de module crées de ma part. Donc j'ai tout appris sur le tas et modifié par ci par là.

 

Je n'ai pas le temps de me pencher sur Jquery, je connais beaucoup php mais pas Jquery.

 

En tout cas merci de votre aide, sans vous je n'aurais même pas pu faire un site! :)

 

Cordialement.

Link to comment
Share on other sites

D'abord, bravo pour votre courage vis à vis de votre patron, lui tenir tête n'est pas une chose facile...

 

Je suis en stage et je voulais pas présenter un projet aussi crade dans mon rapport de stage.

 

Pour ce qui est du temps, je n'en ai pas beaucoup, à la base de mon contrat j'ai signé pour créer un seul site en un an sous prestashop, et bam 3 mois après il me sort qu'il en faut 2 pour mi décembre! J’avoue que je lui ai fais un travail assez crade parce qu'il n'y a pas de surcharge propre ou de module crées de ma part. Donc j'ai tout appris sur le tas et modifié par ci par là.

 

Mon patron est assez sympa, ce n'est peut être pas le cas du votre. Mais il m'explique certaines attitudes à avoir.

 

Vous êtes développeur, il est Chef de projet. Ceux sont deux choses différentes et il faut que vous lui fassiez savoir. Quand il vous demande de faire quelque chose, vous lui dites "J'analyse et je vous donne une réponse". Vous ne donnez jamais de réponse rapidement. De même, si il vous demande quelque chose de compliqué, vous lui dites pas "Non", vous lui proposez deux solutions : "Ma méthode : plus simple, plus légère et plus rapide à concevoir ou votre méthode : plus technique mais vous rajoutez 2 semaines de boulot".

 

Bref, le Chef de projet propose des idées, vous, vous proposez des solutions. Si vous ne le faites pas, vous vous retrouvez comme dans le cas où vous êtes. Comme dans le cas où je me suis retrouvé. Ça me dérangera pas de vous racontez mon stage, mais je dois d'abords finir mon projet pour qu'il soit dévoilé à la vente et que je ne sois plus sous secret professionnel.

 

Bon après, je vous dis pas de gueuler sur votre patron : il reste votre supérieur. Mais ça veut pas dire que c'est le méchant loup.

Link to comment
Share on other sites

Bonnes remarques, mais en fait le patron que je cite est le grand patron, mon maître de stage est juste infographiste et au pire, s'occupe de la paperasse administrative, moi je suis en licence professionnelle en alternance et je n'ai jamais auparavant touché à prestashop.

 

Le patron ne veut pas savoir si j'y connais grand chose en prestashop, il veut juste que je fasses ces deux sites le plus rapidement possible, va savoir pourquoi, après tout il est patron et moi employé, je ne peux pas comprendre sont point de vue...

 

J'aurais bien aimé savoir comment développer des modules sous prestashop, le problème c'est que je dois apprendre sur le tas et que je n'ai pas le temps de le faire, il n'y a pas de bon tutoriel sur comment faire un module quand on est noob.

 

Comment avez-vous pu savoir tout ce que vous m'avez dis sur les problèmes que j'ai rencontré avec le site ?

Link to comment
Share on other sites

Je suis dans une école qui nous apprend l'auto-formation. J'ai donc l'habitude de chercher par moi-même.

 

Pour les modules, je l'ai souvent linké : le site de Nethercott Construction est très bien pour débuter. L'anglais n'est pas un réel problème, vu que j'ai réussi à le comprendre.

 

Pour votre problème, j'ai d'abord cherché les deux boutons dont vous m'avez parlé, j'ai ensuite cherché l'id et la classe dans tous les fichiers JS de Prestashop grâce à Notepad++. Ensuite, c'est assez facile quand on connait le système. Enfin, je comprends le système de Prestashop je savais donc comment ça se passait par la suite, mais n'hésitez pas à rechercher des mots (si vous utilisez Notepad++*), cela vous permet de suivre un peu le chemin du traitement et peut être de comprendre comment fonctionne Prestashop.

 

* on peut rechercher dans le fichier et / ou dans tous les fichiers avec un filtre, grâce à NP++ en pressant CTRL + F. On peut même faire un search and replace dans le fichier ou dans tous les fichiers (dangereux).

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