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)
Link to comment
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 


 

Link to comment
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. 

Link to comment
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..

Link to comment
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.

Link to comment
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.

Link to comment
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.

Link to comment
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

 

Link to comment
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
 

Link to comment
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

Link to comment
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.

 

Link to comment
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é

Link to comment
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)
 

Link to comment
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...

Link to comment
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.

 

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