Jump to content

Comment consulter la table ps_cart_product de la base dans un .js ?


Recommended Posts

Bonsoir

 

je commence tout juste avec prestashop.

 

J'ai des connaissances en prog C, donc côté algorithmie, pas de soucis. Par contre j'ai des lacunes côté dev javascript et accès aux bases de données.

 

Mon problème : dans ajax-cart.js, je souhaite modifier un comportement qui nécessite d'aller consulter la base de données.

 

La fonction de ajax-cart modifiée sera "add" (add : function(idProduct, idCombination, addedFromProductPage, callerElement, quantity, whishlist)).

 

Je veux consulter la table ps_cart_product qui contient la liste des éléments actuellement dans le panier.

 

Quelle fonction/requête faire pour accéder à ps_cart_product (pour par exemple en tirer les produit présents (id_product)) dans cette fonction "add" ?

 

PS: je suis sous PS 1.4.4.1

 

Merci

Matt

Link to comment
Share on other sites

hello,

 

premier élément de réponse qui a son importance, tu ne consulteras pas la base avec js... à moins de bosser sur un hébergement fonctionnant avec node.js ou équivalent, js travaille côté client (machine utilisateur)

 

donc, tu as deux possibilités

- surcharger le ou les controleurs qui vont chercher les données dont tu as besoin pour qu'il te le livre dans la page (ou un fichier json). Si dans la page, tu peux ensuite mettre tout ça dans des tableaux ou objets (façon json) javascript que tu pourras ensuite manipuler à ta guise

- soit créer une page avec son contrôleur que tu attaques en ajax, pour le coup avec js, pour manipuler et afficher ce que tu veux

 

dans les deux cas, les données seront en tout cas extraites de la base en php et ensuite mises dans un format manipulable pas js

(pour t'en donner une idée, regarde dans product.tpl comment les données $combinations sont manipulées en js et permettent d'updater le prix en fonction de la valeur d'une caractéristique (feature pour ps))

 

have swing

Link to comment
Share on other sites

Hello

 

tu parles du product.tpl dans themes/prestashop ?

 

Tout ce que j'ai c'est ce code :

// Combinations
{foreach from=$combinations key=idCombination item=combination}
 addCombination({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity});
{/foreach}
// Colors
{if $colors|@count > 0}
 {if $product->id_color_default}var id_color_default = {$product->id_color_default|intval};{/if}
{/if}

 

Et j'y comprend pas grand chose :(

 

Matt

Link to comment
Share on other sites

hello,

 

en fait, je parlais de product.tpl pour ce qui se passe en haut du template, tu peux y voir la façon dont ps manipule des données, récupérées en php puis inscrites dans des variables javascript avec smarty.

Seul truc c'est que, évidemment, du coup, le js en question se trouve dans la page, au moins les tableaux et variables instanciées.

Ensuite, la partie manipulation au click pour changer à la volée l'affichage du prix et autres joyeusetés dans cette même page se trouve dans product.js (regarde par ex la fonction updatedisplay

 

garde juste à l'esprit que cette façon de procéder ne peu fonctionner que sur les évènements js postérieurs à load pour window et, a fortiori, domready/document ready (click sur un élément ou autre change d'un input par ex)

si, pour ce que tu veux faire, js doit intervenir sur le load ou le domready, tes fonctions doivent se trouver après l'instanciation des variables pour les avoir dispo au moment de s'exécuter et devront donc être aussi dans la page ou, au moins dans une feuille appelée sous l'apparition des variables en question

 

have swing

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