Appelle page php ne marche plus?

ou

— A tu testé le plugin html display ?

Merci à tous pour vos réponses

@Salvialf ==> je ne connaissais pas, mais je ne suis pas sur de pouvoir le mettre dans une fonction ? je dois déclarer toutes mes variables ? Si oui, comment je les récupère sur mon design ?

@ajja17orange ==> j’ai lu le post et je ne vois pas comment faire ? Sur mon design j’ajoute un texte/html et je note ton script sur l’autre post

en mettant bien sur mon ip local à la place de test.php. ça ne marche pas :frowning:

@olive ça aurait bien car j’ai tous mes menus avec mais c’est du php et ça gère que le html…?

sinon voici mon code php codé en 30min donc y’a surement mieux :slight_smile:

<?php 


date_default_timezone_set('Europe/Paris');
setlocale(LC_TIME, 'fr_FR.utf8','fra');

$jour = strftime("%A");
$demain = strftime("%A",time()+86400);

$semaine = date('W');

	if($semaine % 2 == 0)
	{
	$semaine_lettre = "B";
	$semaine2_lettre = "B";
	}
	else
	{
	$semaine_lettre = "A";
	$semaine2_lettre = "A";
	} 	
	
		if($demain == "dimanche")
		{
			echo $semaine+1;
			if($semaine % 2 == 0)
			{
			$semaine2_lettre = "A";
			$demain = "lundi";
			}
			else
			{
			$semaine2_lettre = "B";
			$demain = "lundi";
			}
		}		

$joursemaine = $jour.$semaine_lettre;
$jour2semaine = $demain.$semaine2_lettre;


 
  $horaire = array(
 
      'lundiA' => '10h ==> 19h', 
      'mardiA' => '10h ==> 18h45', 
      'mercrediA' => '10h30 ==> 19h30', 
      'jeudiA' => 'Repos',
      'vendrediA' => 'Repos',
      'samediA' => '11h ==> 19h30',
      'dimancheA' => 'Repos',
	  'lundiB' => '10h30 ==> 19h', 
      'mardiB' => '9h ==> 16h', 
      'mercrediB' => '9h ==> 18h30', 
      'jeudiB' => '8h ==> 17h',
      'vendrediB' => '8h ==> 16h30',
      'samediB' => 'Repos',
      'dimancheB' => 'Repos',
  );
  
  
 
 echo 'SEMAINE ',$semaine_lettre ,'</br>  ',$jour,' ', $horaire[$joursemaine] ,'<br/>  ',$demain ,' ', $horaire[$jour2semaine] ;

?>
<br/>	
<br/>




<?php 
  date_default_timezone_set('Europe/Paris');
  setlocale(LC_TIME, 'fr_FR.utf8','fra');

  $horaire = array(
    'lundiA' => '10h ==> 19h', 
    'mardiA' => '10h ==> 18h45', 
    'mercrediA' => '10h30 ==> 19h30', 
    'jeudiA' => 'Repos',
    'vendrediA' => 'Repos',
    'samediA' => '11h ==> 19h30',
    'dimancheA' => 'Repos',
      
    'lundiB' => '10h30 ==> 19h', 
    'mardiB' => '9h ==> 16h', 
    'mercrediB' => '9h ==> 18h30', 
    'jeudiB' => '8h ==> 17h',
    'vendrediB' => '8h ==> 16h30',
    'samediB' => 'Repos',
    'dimancheB' => 'Repos'
  );

  $today = time();
  $resu = '<table border="1">';
  $resu .= '<tr><th>Date</th><th>Horaire</th><th>Semaine</th></tr>';
  for($i=0;$i<14;$i++) {
    $J1 = $today+$i*86400;
    if( date('W',$J1) %2 == 0) $lettreJ1 = 'B';
    else $lettreJ1 = 'A';
    $resu .= '<tr>';
    $resu .= '<td align="right">'.strftime('%A %d %B',$J1) .'</td>';
    $resu .= '<td>' .$horaire[strftime('%A',$J1).$lettreJ1].'</td>';
    $resu .= '<td>'.date('W',$J1)." $lettreJ1</td>";
    $resu .= '</tr>';
  }
  $resu .= "</table>";
  echo $resu;
?>

Résultat sur un design:
image

Chez moi, votre code fonctionne sans erreur.

1 « J'aime »

Ah oui en effet c’est plus propre comme code.
Mais dans le design, tu l’affiches comment ? La page est hébergé sur un serveur php ?

Ah moins que je me trompe mais ton script ne fait pas comme le mien si ?

N’afficher que aujourd’hui et demain et si on est samedi, afficher samedi et lundi en gérant le changement de semaine ?

Si vous voulez utiliser la méthode de @Salvialf au dessus.
Il faut éditer le fichier : data/php/user.function.class.php et coller la fonction ci-dessous:

 public function MonHoraire($nb_day) { 
    date_default_timezone_set('Europe/Paris');
    setlocale(LC_TIME, 'fr_FR.utf8','fra');

    $horaire = array(
      'lundiA' => '10h ==> 19h', 
      'mardiA' => '10h ==> 18h45', 
      'mercrediA' => '10h30 ==> 19h30', 
      'jeudiA' => 'Repos',
      'vendrediA' => 'Repos',
      'samediA' => '11h ==> 19h30',
      'dimancheA' => 'Repos',
        
      'lundiB' => '10h30 ==> 19h', 
      'mardiB' => '9h ==> 16h', 
      'mercrediB' => '9h ==> 18h30', 
      'jeudiB' => '8h ==> 17h',
      'vendrediB' => '8h ==> 16h30',
      'samediB' => 'Repos',
      'dimancheB' => 'Repos'
    );

    $today = time();
    $resu = '<table border="0">';
    $resu .= '<tr><th>Date</th><th>Horaire</th><th>Semaine</th></tr>';
    for($i=0;$i<$nb_day;$i++) {
      $J1 = $today+$i*86400;
      if( date('W',$J1) %2 == 0) $lettreJ1 = 'B';
      else $lettreJ1 = 'A';
      $resu .= '<tr>';
      $resu .= '<td align="right">'.strftime('%A %d %B',$J1) .'</td>';
      $resu .= '<td>' .$horaire[strftime('%A',$J1).$lettreJ1].'</td>';
      $resu .= '<td>'.date('W',$J1)." $lettreJ1</td>";
      $resu .= '</tr>';
    }
    $resu .= "</table>";
    return $resu;
  }

Ensuite, dans un virtuel avec mise à jour chaque jour :
image
Créer une commande:
image

La commande peut maintenant être placée dans un design.

Dans le virtuel, j’ai choisi d’afficher 2 jours. ( le paramètre de MonHoraire )

J’ai laissé les horaires du dimanche au cas où vous ayez envie. :wink:

2 « J'aime »

trop bien ça fonctionne, merci :slight_smile: Faut juste que je peaufine le code je pense car j’ai les jours en anglais et sur le tableau, les horaires n’apparaissent pas. Je pensais que ça venait de la taille du cadre mais je ne peux pas l’agrandir, la petite flèche n’apparaît pas

screen

Essayes d’ajouter plutôt l’équipement virtuel complet sur le design si jamais tu n’avais ajouté que la commande

Et si vous ne voulez pas voir le dimanche, il suffit d’ajouter dans la fonction
après

for($i=0;$i<$nb_day;$i++) {
  $J1 = $today+$i*86400;
  if(strftime('%A',$J1) == 'dimanche') $J1 += 86400; // A ajouter

Si vous ne voulez voir que vos prochains jours de travail, il faut un peu modifier la boucle qui devient:

for($i=0;$i<$nb_day;$i++) {
      $J1 = $today+$i*86400;
      if( date('W',$J1) %2 == 0) $lettreJ1 = 'B';
      else $lettreJ1 = 'A';
      $trav = $horaire[strftime('%A',$J1).$lettreJ1];
      if($trav == 'Repos') continue;
      $resu .= '<tr>';
      $resu .= '<td align="right">'.strftime('%A %d %B',$J1) .'</td>';
      $resu .= '<td>' .$trav.'</td>';
      $resu .= '<td>'.date('W',$J1)." $lettreJ1</td>";
      $resu .= '</tr>';
    }

merci pour le complément pour le dimanche :slight_smile:

Par contre même en mettant l’équipement virtuel complet (pas en commande) ça me sort la même chose qu’en commande, en anglais et sans les horaires

Les horaires n’apparaissent pas car les jours ne sont pas en français.
Comme vous aviez utilisé strftime je pensais que les locales étaient installés sur votre système.

Pour les installer, il faut se connecter en ssh sur la machine Jeedom
Tapez locale -a pour avoir la liste des locales installés.
Puis sudo dpkg-reconfigure locales
dans la liste des locales affichés, il faut sélectionner fr_FR.UTF8 UTF-8 et faire l’install.

Vos horaires pour la semaine prochaine:
image

Attention au changement d’année, cette année il y a une semaine 53 suivie d’une semaine 1 en 2021

Ah cool merci, j’essaie ça dès que je rentre et merci pour l’info de la semaine 53 :grin:

Pour un vrai « une semaine sur deux » qui est différent des « semaines paires ou impaires » :

intdiv(#timestamp#,86400*7)%2

Le changement de semaine se faisant le jeudi à 01:00:00 +01:00.

Pour un changement de semaine à une autre période de la semaine, il suffit d’ajouter le nb de secondes adéquat à #timestamp#.

Pour le lundi à 01:00:00 +01:00 :

intdiv(#timestamp#+(86400*4),86400*7)%2

Merci @Jeandhom pour la clarification, je prends note :slight_smile:

@jpty j’ai installé le ‹ fr › mais ça ne fonctionnait pas, même après reboot, du coup j’ai désinstallé le ‹ en › et maintenant ça fonctionne :slight_smile:

C’est pas gênant d’avoir viré le ‹ en › pour jeedom ou autre ?

Bonjour,

Quel est le résultat de locale -a ?

maintenant j’ai ça

root@jeedom:~# locale -a
C
C.UTF-8
fr_FR.utf8
POSIX

avant j’avais le en utf8 en plus

Tant qu’il reste les C/C.UTF-8, ça doit fonctionner. On ne peut pas les supprimer.
Jeedom n’utilise pas strftime.

Je pense que c’est l’absence du locale fr ( sur votre mini+ ) qui faisait que vous aviez le message d’erreur du début.

je pense aussi (mais je suis rendu sur smart, je viens de modifier mon profil :slight_smile: )
Encore merci à toi, j’ai plus qu’à tester les versions avec et sans dimanche :smiley:

Bonsoir @sikuland

Si votre pb est résolu, pourriez-vous SVP, choisir une solution parmi toutes les réponses que vous avez eues?