Jump to content

Update stock from a tpl file


Recommended Posts

 

I wish to update the stock from the product page (product.tpl),
when a customer goes on the product page, I will check the stock on an external database, it returns me a value,
Is it possible to save this value as the new stock of the product?

Thank you
Sebastian

 

Je voudrais pouvoir mettre à jour le stock depuis la page produit,
lorsqu'un client va sur la page produit, je vais vérifier le stock sur une base de données externer, cela me retourne une valeur,
Est-il possible d’enregistrer cette valeur comme le nouveau stock du produit ?

Merci
Sébastien

Edited by pa2i (see edit history)

Share this post


Link to post
Share on other sites

Bonjour,


Merci pour votre réponse.
Si j'ai bien compris, il faudrait donc rajouter une fonction php chargée dans l'entête,

Il n'est pas possible de le faire simplement en travaillant sur le fichier product.tpl
{StockAvailable::setQuantity($product.id, 0, $product.stock)} par exemple 


 

Share this post


Link to post
Share on other sites

C'est pas que c'est pas possible, c'est surtout que c'est n'importe quoi.

Je pense que vous vous lancez dans un truc qui dépasse très largement vos connaissances et compétences en développement.

  • Like 1

Share this post


Link to post
Share on other sites

Sachant que l'on ne peut pas mettre de code php dans un tpl il est impossible de faire quoi que se soit en rapport avec le traitement de données.

Donc, non, c'est impossible juste en balancement du code dans un tpl.

Share this post


Link to post
Share on other sites

6 minutes ago, Mediacom87 said:

Sachant que l'on ne peut pas mettre de code php dans un tpl il est impossible de faire quoi que se soit en rapport avec le traitement de données.

Donc, non, c'est impossible juste en balancement du code dans un tpl.

Jusqu'à la 1.6 tu peux appeler une méthode d'un objet chargé comme variable Smarty. Donc techniquement tu pourrais arriver au résultat souhaité.

Mais on est d'accord que c'est tordu et que ça va à l'encontre des bonnes pratiques et du bon sens. 

Share this post


Link to post
Share on other sites

il y a 2 minutes, BeComWeb a dit :

Jusqu'à la 1.6 tu peux appeler une méthode d'un objet chargé comme variable Smarty

Et PrestaShop a quoi comme objet chargé de base qui appel une base de données externe ?

On peut raconter tout le fonctionnement de PrestaShop mais là on est loin d'un simple bout de code et la pratique est tellement aberrante que je préfère dire que c'est impossible plutôt que laisser entrevoir la moindre parcelle de possibilité en faisant n'importe quoi. C'est de notre responsabilité de professionnel de ne pas expliquer au gens comment faire des trucs débiles, même si c’est faisable..

Share this post


Link to post
Share on other sites

4 minutes ago, BeComWeb said:

Jusqu'à la 1.6 tu peux appeler une méthode d'un objet chargé comme variable Smarty. Donc techniquement tu pourrais arriver au résultat souhaité.

Mais on est d'accord que c'est tordu et que ça va à l'encontre des bonnes pratiques et du bon sens. 

Pour moi cette solution est la meilleure, le stock ne sera mise à jour que s'il a été modifié dans la base, donc cela ne devrait pas ralentir tant que cela l'affichage, en tout cas ce sera plus pratique qu'un cron qui devra relire 30000 produits toutes les 5 minutes si l'on veut être certain du stock.

Share this post


Link to post
Share on other sites

1 minute ago, Mediacom87 said:

Et PrestaShop a quoi comme objet chargé de base qui appel une base de données externe ?

On peut raconter tout le fonctionnement de PrestaShop mais là on est loin d'un simple bout de code et la pratique est tellement aberrante que je préfère dire que c'est impossible plutôt que laisser entrevoir la moindre parcelle de possibilité en faisant n'importe quoi. C'est de notre responsabilité de professionnel de ne pas expliquer au gens comment faire des trucs débiles, même si c’est faisable..

Sur la fiche-article, $product est un objet. Tu lui rajoutes une méthode et tu peux l'appeler dans le template.

Pour la suite je suis totalement d'accord avec toi. Et tu remarqueras que j'ai bien appuyé sur le côté débile de la demande. Je fais tout pour le décourager et il est évident que de toute façon il n'y arrivera pas.

Share this post


Link to post
Share on other sites

à l’instant, BeComWeb a dit :

Tu lui rajoutes une méthode

Comme expliqué avant par nous 2 en créant proprement un module pour faire cette gestion.

il y a 5 minutes, pa2i a dit :

Pour moi cette solution est la meilleure, le stock ne sera mise à jour que s'il a été modifié dans la base, donc cela ne devrait pas ralentir tant que cela l'affichage, en tout cas ce sera plus pratique qu'un cron qui devra relire 30000 produits toutes les 5 minutes si l'on veut être certain du stock.

mais comme tu peux le constater, la porte est ouverte donc la personne s'engouffre dedans, même si on lui dit qu'elle va droit dans le mur et le pire c'est qu'elle trouvera une personne qui lui dira que c'ets possible et l'aidera même à faire son truc pour au bout du compte se rendre compte que c'est une mauvaise idée. C'est la dure lois de notre métier, il faut des compétences énormes et des connaissance dantesque mais elles sont en permanence remises en cause par ce genre d'attitude. Donc je ne cherche plus à me justifier du bien fondé de ma réponse. Soit il adhère et gagne du temps, soit il persiste et il perd du temps.

Share this post


Link to post
Share on other sites

1 hour ago, pa2i said:

{StockAvailable::setQuantity($product.id, 0, $product.stock)}

c'est tout à fait possible (si setQuantity est une statique publique) , encore faut-il utiliser le bon typage, ici $product est un objet et que tu ais toutes les valeur requises.

c'est néanmoins complètement stupide de faire cela. Quand tu shop (espérons-le) recevra plusieurs utilisateurs simultanés chaque affichage va locker le record pour tenter de faire l'update. De par la nature du web, ton scénario c'est dead-lock dès le 2eme visiteur simultané sur ta page. Et ne donne pas l'url de ton site, sinon en 2s ont te fait un DDOS grace à cette implémentation

 

Share this post


Link to post
Share on other sites

J'ai bien les deux valeurs requises,
cette méthode est utilisée sur mon site actuel mais sous magento, il supporte sans problème plusieurs centaines d'utilisateurs simultanés depuis des années

Je cherche à savoir s'il est préférable que je passe de magento 1 à 2 ou à prestashop
j'ai quelques spécificités sur mon site, si vous me dites que cela n'est pas possible, sachant qu'il n'est pas question que je fasse tourner un con sur 30000 produits à longeur de journées, car là le site va être fortement ralenti, , je laisse tomber prestashop et reste sur magento
 

Share this post


Link to post
Share on other sites

Merci okom3pom

La base de donnée est chez moi, sur un serveur qui lui est dédié,
je ne suis pas rentré dans le détail, car c'est atypique,
la base de donnée (postgre) contient l'ensemble de nos produits, mais nous vendons en plus des produits stockés chez des fabricants,
pour ces produits, les stocks sont dans en simple fichier présent sur le même serveurs.

J'avais fait un script qui me retourne le stock en cherchant dans la base de données et les fichiers à partir d'un simple appel
file_get_contents('http://www ....)

cela je vois que smarty le gère bien, le temps d'affichage est similaire
je n'ai ensuite plus qu'à comparer cette valeur à $product.quantity
si le stock à changé, je voulais enregistré mon nouveau stock
à priorité c'est cela qui pose problème et et qu'il ne faut pas faire

Share this post


Link to post
Share on other sites

Imaginons tout ça dans le contexte d'un commerce physique classique, un magasin quoi.

Si on suit votre raisonnement, vous voulez créer le système suivant :

  • dans le magasin tous les produits sont emballés dans leur carton et rangés dans des rayons
  • pour tous ces produits en rayon vous ajoutez un système de détection
  • dès qu'un client regarde un produit en rayon le détecteur se met à sonner
  • quand l'employé du magasin entend le détecteur sonner, il doit appeler l'entrepôt pour leur demander "c'est quoi le stock du produit X ?" 
  • quand l'entrepôt a répondu l'employé autorise le client à ouvrir l'emballage et lui dit "il y en a x en stock"

Si l’entrepôt ne répond pas le client ne peut pas voir le produit.

Si 4 clients veulent voir le même produit en même temps, l'employé va appeler l'entrepôt 4 fois d'affilée pour poser 4 fois la même question. Pas simultanément mais tour à tour, le 4ème client ne pourra voir le produit qu'après que les 3 autres aient été "renseignés".

C'est totalement absurde mais pourtant c'est exactement ce que vous voulez faire.

 

Share this post


Link to post
Share on other sites

D'accord, je comprends
Sauf que j'ai plusieurs canaux de ventes et des ventes sur des marketplace, le stock varie trop pour ne pas être à jour en temps réel
dommage que cela ne soit pas possible sur prestashop, ou en tout cas déconseillé

Share this post


Link to post
Share on other sites

Je sais que ce n'est pas très logique à priori, au départ je voulais voir si cela était possible, puis mesurer le temps d'exécution.
Il faut prendre en compte le nombre de produits, d'expérience, quel serait le temps d'exécution pour le cron sur 30000 produits avec par exemple 500 produits dont le stock change ?
le site est sur un dédié (128 gb, bi xeon, disque ssd)
 

Share this post


Link to post
Share on other sites

10 hours ago, seb-presta said:

dommage que cela ne soit pas possible sur prestashop, ou en tout cas déconseillé

On a jamais dit que ce n'était pas possible avec Prestashop.

Il y a au moins 4 personnes qui viennent de vous expliquer qu'il ne faut pas le faire dans un template mais qu'il faut créer un module. On ne demande pas à une vue d'appeler un script de mise-à-jour de stock, ça n'a aucun sens.

Est ce que vous faites bien la distinction entre front-end et back-end ? Connaissez vous le principe MVC ? 

Et pour le cron la solution de mettre en place un horodatage dans la source de données. Il faut que le cron récupère les valeurs de stock qui ont changé depuis son dernier passage, pas la totalité de la table à chaque fois...

Share this post


Link to post
Share on other sites

Il y a 12 heures, seb-presta a dit :

dommage que cela ne soit pas possible sur prestashop, ou en tout cas déconseillé

je vais répéter, cela n'a aucun rapport avec PrestaShop c’est juste incohérent (car débile ne seme pas vous parler depuis le début de cette conversation).

Tous les intervenants de ce topic vous disent tous la même chose.

Faite une tâche cron.

Vous nous demandez le temps de traitement ???? Impossible à dire, cela dépend de la connexion au serveur distant, de la charge des 2 serveurs, de la structure de la base de données, de la requête envoyée et ej dois oublier des éléments.

Dans tous les cas, une tâche cron toutes les 5 minutes devrait passer sans soucis avec une structure cohérente de base de données. Bien entendu on ne va pas s'amuser à ouvrir les fichiers des partenaires, c'est sur le serveur de stock que cette tâche doit être faites tous les jours pour n'avoir qu'une seule base de données à attaquer pour connaître le stock à un instant T.

 

Share this post


Link to post
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
 Share

×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More