seb-presta Posted April 2, 2019 Share Posted April 2, 2019 (edited)  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 April 2, 2019 by pa2i (see edit history) Link to comment Share on other sites More sharing options...
Mediacom87 Posted April 2, 2019 Share Posted April 2, 2019 Bonjour, un module greffer sur header devrait pouvoir faire cela, mais bon, au risque de ralentir ou bloquer le site, il serait préférable de choisir une autre méthode. Link to comment Share on other sites More sharing options...
BeComWeb Posted April 3, 2019 Share Posted April 3, 2019 đłÂ La mise Ă jour des stocks n'a rien Ă faire en front office CrĂ©ez un module qui se connecte Ă cette base de donnĂ©es et lancez la tĂąche Ă intervalle rĂ©gulier avec un cron. Link to comment Share on other sites More sharing options...
seb-presta Posted April 3, 2019 Author Share Posted April 3, 2019 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 More sharing options...
BeComWeb Posted April 3, 2019 Share Posted April 3, 2019 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. 1 Link to comment Share on other sites More sharing options...
Mediacom87 Posted April 3, 2019 Share Posted April 3, 2019 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. Link to comment Share on other sites More sharing options...
BeComWeb Posted April 3, 2019 Share Posted April 3, 2019 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 More sharing options...
Mediacom87 Posted April 3, 2019 Share Posted April 3, 2019 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 More sharing options...
seb-presta Posted April 3, 2019 Author Share Posted April 3, 2019 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 More sharing options...
BeComWeb Posted April 3, 2019 Share Posted April 3, 2019 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 More sharing options...
Mediacom87 Posted April 3, 2019 Share Posted April 3, 2019 Ă 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 More sharing options...
doekia Posted April 3, 2019 Share Posted April 3, 2019 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 More sharing options...
seb-presta Posted April 3, 2019 Author Share Posted April 3, 2019 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 More sharing options...
doekia Posted April 3, 2019 Share Posted April 3, 2019 Compte tenu de l'usine à gaz lancé par StockAvailable::setQuantity, nous t'avons répondu que ce sera catastrophique. Link to comment Share on other sites More sharing options...
BeComWeb Posted April 3, 2019 Share Posted April 3, 2019 (edited) 34 minutes ago, pa2i said: je laisse tomber prestashop et reste sur magento Oui voilĂ , c'est encore ce qu'il y a de mieux pour tout le monde je pense Edited April 3, 2019 by BeComWeb (see edit history) Link to comment Share on other sites More sharing options...
seb-presta Posted April 3, 2019 Author Share Posted April 3, 2019 vous ĂȘtes super agrĂ©able, quel est l'intĂ©rĂȘt de votre message ?  Link to comment Share on other sites More sharing options...
seb-presta Posted April 3, 2019 Author Share Posted April 3, 2019 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 More sharing options...
seb-presta Posted April 3, 2019 Author Share Posted April 3, 2019 non car je ne suis pas capable de détecter le changement de valeur au niveau des fichiers contenant les stocks fabricants Link to comment Share on other sites More sharing options...
seb-presta Posted April 3, 2019 Author Share Posted April 3, 2019 Les fichiers sont mis à jour un fois par jour Link to comment Share on other sites More sharing options...
BeComWeb Posted April 3, 2019 Share Posted April 3, 2019 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 More sharing options...
seb-presta Posted April 3, 2019 Author Share Posted April 3, 2019 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 More sharing options...
seb-presta Posted April 3, 2019 Author Share Posted April 3, 2019 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 More sharing options...
BeComWeb Posted April 4, 2019 Share Posted April 4, 2019 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 More sharing options...
Mediacom87 Posted April 4, 2019 Share Posted April 4, 2019 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 More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now