Natc77 Posted December 8, 2021 Share Posted December 8, 2021 (edited) Bonjour, Dans la page stores.tpl, j'aimerais que ne s'affiche que les jours avec des horaires d'ouvertures. Le code est : <table> {foreach $store.business_hours as $day} <tr> <th>{$day.day}</th> <td> <ul> {foreach $day.hours as $h} <li>: {$h}</li> {/foreach} </ul> </td> </tr> {/foreach} </table> J'ai beau essayé de mettre des conditions à différents endroits dans la boucle, impossible d’empêcher l'affichage de la ligne si l'horaire de la journée est vide. Quelqu'un peut m'aider à trouver la formule magique svp ? Edited December 10, 2021 by Natc77 (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted December 8, 2021 Share Posted December 8, 2021 supprimez les $day vides dès le départ mais dans le php, pour n'envoyer au tpl que les $day ouverts^^ Link to comment Share on other sites More sharing options...
Natc77 Posted December 8, 2021 Author Share Posted December 8, 2021 51 minutes ago, Eolia said: supprimez les $day vides dès le départ mais dans le php, pour n'envoyer au tpl que les $day ouverts^^ Dès le départ, ça veut dire qu'en amont de cette commande smarty il y a un traitement php quelque part ? Je pensais que le smarty remplaçait du php ? Je suppose que je dois chercher dans un controller ? Link to comment Share on other sites More sharing options...
Eolia Posted December 8, 2021 Share Posted December 8, 2021 faites un override du controleur StoreController.php sur la fonction public function renderStoreWorkingHours($store) en commentant les jours sans horaires Link to comment Share on other sites More sharing options...
Natc77 Posted December 10, 2021 Author Share Posted December 10, 2021 (edited) Merci @Eolia, depuis j'ai avancé et en en effet trouvé la partie à changer dans StoresController.php qui a une présentation différente de la tienne. Je ne dois pas bloquer d'office des jours car les jours d'ouvertures peuvent changer, si l'horaire est renseigné, on affiche le jour, si l'horaire est vide, on affiche pas le jour. Le code se présente ainsi : $temp = json_decode($store['hours'], true); unset($store['hours']); $store['business_hours'] = [ 'day' => $this->trans('Monday', array(), 'Shop.Theme.Global'), 'hours' => $temp[0], ], [ 'day' => $this->trans('Tuesday', array(), 'Shop.Theme.Global'), 'hours' => $temp[1], ], [ 'day' => $this->trans('Wednesday', array(), 'Shop.Theme.Global'), 'hours' => $temp[2], ], [ 'day' => $this->trans('Thursday', array(), 'Shop.Theme.Global'), 'hours' => $temp[3], ], [ 'day' => $this->trans('Friday', array(), 'Shop.Theme.Global'), 'hours' => $temp[4], ], [ 'day' => $this->trans('Saturday', array(), 'Shop.Theme.Global'), 'hours' => $temp[5], ], [ 'day' => $this->trans('Sunday', array(), 'Shop.Theme.Global'), 'hours' => $temp[6], ], ]; Alors j'ai commencé par séparer chaque jour (ça fonctionne j'ai les 7 jours d'affichés) , puis j'ai voulu appliqué une condition si temp[..] est vide, alors pas de ligne dans le tableau, si horaire alors ligne. Exemple sur le lundi, j'ai essayé : if (!empty($temp[0])) { $store['business_hours'][0] = [ 'day' => $this->trans('Monday', array(), 'Shop.Theme.Global'), 'hours' => $temp[0] ]; } Ça ne fonctionne pas, si le lundi a un horaire, il ne s'affiche pas. Alors j'ai essayé : if (strlen($temp[0])>2) { $store['business_hours'][0] = [ 'day' => $this->trans('Monday', array(), 'Shop.Theme.Global'), 'hours' => $temp[0] ]; } Idem, si horaire, pas d'affichage Je dois mal faire ma condition ? Je continue à chercher et à tester Edited December 10, 2021 by Natc77 (see edit history) Link to comment Share on other sites More sharing options...
Eolia Posted December 10, 2021 Share Posted December 10, 2021 Oui mais moi je suis pas en 1.7^^ Perso je ferais autrement. Un tableau des jours $days = array( $this->trans('Monday', array(), 'Shop.Theme.Global'), $this->trans('Tuesday', array(), 'Shop.Theme.Global'), $this->trans('Wednesday', array(), 'Shop.Theme.Global'), $this->trans('Thursday', array(), 'Shop.Theme.Global'), $this->trans('Friday', array(), 'Shop.Theme.Global'), $this->trans('Saturday', array(), 'Shop.Theme.Global'), $this->trans('Sunday', array(), 'Shop.Theme.Global') ); et une boucle foreach: $store['business_hours'] = array(); foreach($days as $key => $day) { if (!empty($temp[$key])) { $store['business_hours'][] = [ 'day' => $day, 'hours' => $temp[$key] ]; } } Link to comment Share on other sites More sharing options...
Natc77 Posted December 10, 2021 Author Share Posted December 10, 2021 @Eolia pardon j'aurais dû préciser que c'était sur 1.7 Je viens de tester ton code, mais c'est toujours pareil, tous les jours s'affichent, même ceux qui sont sans horaire C'est comme si la fonction empty, strlen, mb_strlen etc n'avait aucun effet sur $temp[$key] Link to comment Share on other sites More sharing options...
Eolia Posted December 10, 2021 Share Posted December 10, 2021 Normal $temp[$key] n'est pas vide c'est un tableau^^ Ce code ci fonctionne: $days = array( $this->trans('Monday', array(), 'Shop.Theme.Global'), $this->trans('Tuesday', array(), 'Shop.Theme.Global'), $this->trans('Wednesday', array(), 'Shop.Theme.Global'), $this->trans('Thursday', array(), 'Shop.Theme.Global'), $this->trans('Friday', array(), 'Shop.Theme.Global'), $this->trans('Saturday', array(), 'Shop.Theme.Global'), $this->trans('Sunday', array(), 'Shop.Theme.Global') ); $store['business_hours'] = array(); foreach($days as $key => $day) { if ($temp[$key][0]) { $store['business_hours'][] = [ 'day' => $day, 'hours' => $temp[$key] ]; } } 1 Link to comment Share on other sites More sharing options...
Eolia Posted December 10, 2021 Share Posted December 10, 2021 Quand je pense que vous m'obligez à aller regarder le code de cette version... 1 Link to comment Share on other sites More sharing options...
Natc77 Posted December 10, 2021 Author Share Posted December 10, 2021 Merci @Eolia ça fonctionne !!!!! merci, merci, merci 😁 Link to comment Share on other sites More sharing options...
Eolia Posted December 10, 2021 Share Posted December 10, 2021 Ouep, suis têtu moi^^ 1 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