Affichage fête du mois et vidéo de la fête de la semaine, en php ?

Avatar du membre
Eléphanteau du PHP | 28 Messages

03 juin 2015, 19:33

Bonjour,

Pour : http://ippai.free.fr/

Je voudrais afficher les fêtes du mois dans la colonne de droite

En utilisant un include ou tout autre méthode php.

il faudrait un script php qui récupère le mois pour afficher les fêtes du mois.
mise dans 12 fichiers include php différents, par mois.

Et qui afficherais en plus luxe suprême, une vidéo youtube de la fête de la semaine en cours, dont je mettrait aussi le lien dans un include php

Est-ce faisable de façon simple ?

avec les opérateurs de la date atomique ?

Merci
Modifié en dernier par Virginie le 03 juin 2015, 23:45, modifié 1 fois.

Mammouth du PHP | 688 Messages

03 juin 2015, 19:46

$mois = date('n');
include("chemin/nom".$mois.".extension");

Avatar du membre
Eléphanteau du PHP | 28 Messages

04 juin 2015, 10:54

Merci de ta réponse.
J'ai donc tapé :

Code : Tout sélectionner

<?php $mois = date('m'); include("http://ippai.free.fr/matsuri_".$mois.".tpl"); ?>
avec le fichier externe du mois à la racine : matsuri_06.tpl

et j'obtient .... rien

Qu'Est-ce que j'ai mal fait 8-| ?
Modifié en dernier par Virginie le 04 juin 2015, 11:24, modifié 1 fois.

Mammouth du PHP | 688 Messages

04 juin 2015, 11:18

http://ippai.free.fr/
vu que free ne permet pas les accès http

Avatar du membre
Eléphanteau du PHP | 28 Messages

04 juin 2015, 11:27

J'ai déjà rajouté dans le code :

Code : Tout sélectionner

<?php $mois = date('m'); include("http://ippai.free.fr/matsuri_".$mois.".tpl"); ?>
C'est donc fichue en php ?

Avatar du membre
Eléphanteau du PHP | 28 Messages

11 juin 2015, 09:53

Bonjour je cherche toujours une solution.

Est-ce que je peut remplacer le date ('m') php
par un getMonth() javascript en gardant l'include php ?

Merci.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 juin 2015, 11:06

Bonjour,

Non, tu ne peux pas remplacer du php par du javascript pour l'utiliser ensuite dans du php. Le php est exécuté côté serveur et permet de générer le code html et js qui est envoyé à l'utilisateur pour un traitement côté client. Tu ne peux donc pas réutiliser le résultat d'un javascript pour l'injecter dans le php qui a permit d'envoyer la page au navigateur :)

Quoi qu'il en soit, le problème ne vient pas de date('m') qui fait exactement ce que tu attends de lui, à savoir te retourner le numéro du mois sur 2 caractères :)

Si tu ouvres directement la page "http://ippai.free.fr/matsuri_06.tpl" tu obtiens une erreur 404, est-ce que le fichier "matsuri_06.tpl" existe réellement et se trouve-t-il bien à la racine de ton site ? Si tu n'y a pas accès, php non plus ne pourra pas l'ouvrir :) (Attention aux majuscules, minuscules, ...)

Et pour l'include, il est préférable d'utiliser des chemins relatifs à partir du script qui cherche à inclure la page que de passer par du http, surtout si ton script est sur le même site :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Eléphanteau du PHP | 28 Messages

12 juin 2015, 12:36

Merci ! Bien vu !
C'est l'adresse en http:// qui ne fonctionnait pas, je n'avais pas bien saisit la remarque de Tof73.
Il faut effectivement un chemin relatif du type "./"

Pour les matsuri_**.tpl, je les avais supprimé du serveur pensant que c'était fichu, mais là ça renvoie bien les fêtes du mois en bas à droite :) !

http://ippai.free.fr/

Je trouvais bizarre aussi qu'une fonction php aussi basique ne fonctionnait pas chez free :) !

Code : Tout sélectionner

<?php $mois = date('m'); include("./matsuri_".$mois.".tpl"); ?>
Si en plus je voudrais inclure une vidéo youtube d'une des fêtes du 1er Juin au 9 Juin.

Est-ce faisable sous une format du genre ?

Code : Tout sélectionner

<?php $jours = date('m_j'); include("./matsuri_".$jours.".tpl"); ?>
matsuri_06_01-02-03-04-05-06-07-08-09.tpl
matsuri_06_10-11-12-13.tpl
matsuri_06_14.tpl
matsuri_06_15.tpl
matsuri_06_16-17-18-19-20-21-22-23-24-25-26-27-28-29-30.tpl

Je ne suis pas certaine de la syntaxe du nom du *.tpl pour que ça fasse du 1er au 9 Juin.

je demande sans doute quelque choses de tarabiscoté sur ce final :roll: ...
Modifié en dernier par Virginie le 12 juin 2015, 13:38, modifié 3 fois.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

12 juin 2015, 12:45

Hmm, c'est effectivement une approche un peu complexe :)

Le plus simple serait de déterminer la date du jour comme tu le fais pour le mois et en fonction de cette valeur proposer la page qui va bien ;)
<?php 
  $mois = date('m'); 
  $jour = date('d'); 

  if ($jour <=9) // de 1 à 9
    $tpl = 'XXX.tpl';
  elseif ($jour <=13) // de 10 à 13 
    $tpl = 'YYY.tpl';
  elseif ...

  include ('./matsuri_' . $mois . '_' . $tpl); 
?>
Tu peux ainsi nommer tes templates comme tu le souhaites sans forcément devoir lister tous les jours associés :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Eléphanteau du PHP | 28 Messages

12 juin 2015, 13:10

Merci de ta réponse rapide Ryle :) !

Donc quelque chose comme ça, pour être plus précise :) ?
<?php 
  $mois = date('m'); 
  $jour = date('d'); 

  if ($mois = 06 && $jour <=9) // de 1 à 9
    $tpl = 'matsuri_06_01.tpl';
  elseif ($mois = 06 && $jour <=13) // de 10 à 13 
    $tpl = 'matsuri_06_10.tpl';
   elseif ($mois = 06 && $jour =14) // 14 
    $tpl = 'matsuri_06_14.tpl';
   elseif ($mois = 06 && $jour =15) // 15 
    $tpl = 'matsuri_06_15.tpl';
 elseif ($mois = 06 && $jour <=30) // 16 à 30 
    $tpl = 'matsuri_06_16.tpl';
  include ('./matsuri_' . $mois . '_' . $tpl); 
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

15 juin 2015, 10:54

C'est bien cela à deux petites erreurs prêt :)

La première : l'opérateur "=" est un opérateur d'affectation. Quand tu fais "$mois = 06", tu mets la valeur 06 dans ta variable $mois. Si tu veux comparer la valeur de $mois, il faut utiliser "==". Tu peux alors faire "$mois == 6" qui te renverras donc TRUE ou FALSE selon que le test est vrai ou pas :)
Attention par ailleurs : 6, 06 et '06' ne sont pas tout à fait identique :
* 6 = c'est le chiffre (ouais... bon jusque là ça va, je t'apprends rien :))
* 06 = c'est le chiffre, mais en base 8 ou octale (aïe, ça se complique ;)).
Pour faire simple (ou du moins essayer), l'octale est une base de calcul de 8 valeurs (de 0 à 7), C'est comme la base binaire (0 ou 1), décimale (de 0 à 9) - qu'on utilise dans la vie de tous les jours -, l'hexadécimale qui va de 0 à 15 (0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F) ... ou des bases plus tordues comme celles des heures (qui va de 0 à 23) ou des minutes (de 0 à 59).
* '06' = c'est la chaîne de caractères, la valeur est la même, mais le type est différent (Nombre Vs Chaîne)

Je te laisserais chercher plus d'infos sur les bases et les types de variables si le coeur t'en dit ;)

Et l'autre erreur est que si ta variable $tpl contient le nom du fichier avec le mois, le jour et l'extension, dans l'include il ne faut pas les ajouter à nouveau : " include ('./' . $tpl); " suffit largement :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Avatar du membre
Eléphanteau du PHP | 28 Messages

07 juil. 2015, 02:59

Bonjour, désolé de mon silence et merci pour ses rappels sur la syntaxe.

Donc pour Juin et juillet j'ai fait :) !
<?php 
  $mois = date('m'); 
  $jour = date('d'); 

  if ($mois == 6 && $jour <=9) // de 1 à 9
    $tpl = 'matsuri_06_01.tpl';
 elseif ($mois == 6 && $jour <=13) // de 10 à 13 
    $tpl = 'matsuri_06_10.tpl';
 elseif ($mois == 6 && $jour =14) // 14 
    $tpl = 'matsuri_06_14.tpl';
 elseif ($mois == 6 && $jour =15) // 15 
    $tpl = 'matsuri_06_15.tpl';
 elseif ($mois == 6 && $jour <=30) // 16 à 30 
    $tpl = 'matsuri_06_16.tpl';
    
 elseif ($mois == 7 && $jour <=12) // de 1 à 12 
    $tpl = 'matsuri_07_07.tpl';
elseif ($mois == 7 && $jour =13) // 13 
    $tpl = 'matsuri_07_13.tpl';
elseif ($mois == 7 && $jour =14) // 14 
     $tpl = 'matsuri_07_14.tpl';
elseif ($mois == 7 && $jour =15) // 15 
    $tpl = 'matsuri_07_15.tpl';
elseif ($mois == 7 && $jour =16) // 16
    $tpl = 'matsuri_07_13.tpl';
elseif ($mois == 7 && $jour <=19) // de 17 à 19 
    $tpl = 'matsuri_07_17.tpl';
elseif ($mois == 7 && $jour =20) // 20
    $tpl = 'matsuri_07_20.tpl';  
elseif ($mois == 7 && $jour <=24) // de 21 à 24 
    $tpl = 'matsuri_07_17.tpl';   
 elseif ($mois == 7 && $jour <=26) // 25 à 26 
    $tpl = 'matsuri_07_25.tpl';
elseif ($mois == 7 && $jour <=31) // 27 à 31
    $tpl = 'matsuri_07_27.tpl';
           
  include ('./' . $tpl); 
?>
ça semble bien tourner :o !

Encore merci Ryle :D !

Je me demande juste, si ça ne vas pas poser soucis de passer en elseif d'un mois à l'autre comme ça 8-| ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

07 juil. 2015, 16:52

Pas de quoi :)

Et non, il n'y a pas de soucis pour passer d'un omis à l'autre avec le elseif, tant que tu respectes l'ordre des dates, php s'arrêtera à la première condition qui sera vraie. Par contre on peut effectivement rendre ça un peu plus lisible en regroupant les contrôles avec des if() imbriqués ou même une structure de type switch/case :
<?php 
  $mois = date('m'); 
  $jour = date('d'); 

if ($mois == 6) { // Juin
 if ($jour <=9) // de 1 à 9
    $tpl = 'matsuri_06_01.tpl';
 elseif ($jour <=13) // de 10 à 13 
    $tpl = 'matsuri_06_10.tpl';
 elseif ($jour ==14) // 14 
    $tpl = 'matsuri_06_14.tpl';
 elseif ($jour ==15) // 15 
    $tpl = 'matsuri_06_15.tpl';
 elseif ($jour <=30) // 16 à 30 
    $tpl = 'matsuri_06_16.tpl';
}
elseif ($mois == 7) { // Juillet
 if ($jour <=12) // de 1 à 12 
    $tpl = 'matsuri_07_07.tpl';
 elseif ($jour ==13) // 13 
    $tpl = 'matsuri_07_13.tpl';
 elseif ($jour ==14) // 14 
     $tpl = 'matsuri_07_14.tpl';
 elseif ($jour ==15) // 15 
    $tpl = 'matsuri_07_15.tpl';
 elseif ($jour ==16) // 16
    $tpl = 'matsuri_07_13.tpl';
 elseif ($jour <=19) // de 17 à 19 
    $tpl = 'matsuri_07_17.tpl';
 elseif ($jour ==20) // 20
    $tpl = 'matsuri_07_20.tpl';  
 elseif ($jour <=24) // de 21 à 24 
    $tpl = 'matsuri_07_17.tpl';   
 elseif ($jour <=26) // 25 à 26 
    $tpl = 'matsuri_07_25.tpl';
 elseif ($jour <=31) // 27 à 31
    $tpl = 'matsuri_07_27.tpl';
}           
  include ('./' . $tpl); 
?>
Attention encore le "=" est un opérateur d'affectation, pas de comparaison. Quand tu fais " elseif ($mois == 7 && $jour =14) ", il compare $mois à 7 (ce qui est vrai en juillet) et mets la valeur 14 dans $jour (ce qui du coup est toujours vrai puisqu'il écrase la valeur au lieu de la comparer), et ce n'est pas ce que tu souhaites ;)

Et histoire de pousser un peu plus loin, voici une autre solution plus lisible, basée sur un tableau et une boucle qui le parcours à la recherche de la date qui va bien (a compléter et tester, y a peut être des erreurs qui traînent) :
<?php 
$mois = date('m'); 
$jour = date('d'); 

$calendrier = array (
	6 => array ( // juin
		1 => 'matsuri_06_01.tpl'
		, 10 => 'matsuri_06_10.tpl'
		, 14 => 'matsuri_06_14.tpl'
		, 15 => 'matsuri_06_15.tpl'
		, 30 => 'matsuri_06_16.tpl'
	)
	, 7 => array ( // juillet
		1 => 'matsuri_07_01.tpl'
		, 13 => 'matsuri_07_13.tpl'
		, 14 => 'matsuri_07_14.tpl'
		, 15 => 'matsuri_07_15.tpl'
		, ... // à compléter
	)
);


$tpl = 'page_par_defaut.tpl'; // template par défaut si nécessaire

if (isSet($calendrier[$mois])) { // s'il existe des template pour le mois courant
	for ($i=$jour; $i>0 ; $i--) { // parcour le calendrier en descendant à partir de la date du jour
		if (isSet($calendrier[$mois][$i])) { // si la date existe
			$tpl = $calendrier[$mois][$i]; // récupère le template pour la date trouvée
			break; // quitte la boucle dès qu'un résultat est trouvé
		}
	}
}

include ('./' . $tpl); 
?>
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...