Jump to content

[résolu] afficher uniquement les jours d'ouvertures dans la page magasin


Recommended Posts

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 by Natc77 (see edit history)
Link to comment
Share on other sites

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

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 by Natc77 (see edit history)
Link to comment
Share on other sites

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

@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

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]
		];
	}
} 

 

  • Like 1
Link to comment
Share on other sites

  • Natc77 changed the title to [résolu] afficher uniquement les jours d'ouvertures dans la page magasin

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