IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

EDI, CMS, Outils, Scripts et API PHP Discussion :

[Calendrier] Créer un planning


Sujet :

EDI, CMS, Outils, Scripts et API PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut [Calendrier] Créer un planning
    Bonsoir à tous.

    j'ai lu et vu pas mal de tutoriel concernant les calendriers.
    je me suis dis que ça serait une bonne base pour la création d'un planning qui me permettrait de gérer le planning des personnes.

    j'ai donc fait ceci : ( ma page d'index )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    <!doctype html>
    <html>
        <head>
        <meta charset="UTF-8">
        <title>planning</title>
        <link rel="stylesheet" type="text/css" href="style.css" />
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
        </head>
     
        <body>
            <?php
            require('date.php');
            $date = new Date();
            $year = date('Y');
            $dates = $date->getAll($year);  
            ?>
     
            <div class="periods">
                <div class="year"><?php echo $year; ?></div> 
                    <div class="months">
                        <ul>
                            <?php foreach ($date->months  as $id=>$m): ?>
                                <li><a href="#" id="linkMonth<?php echo $id+1; ?>"><?php echo utf8_encode(substr(utf8_decode($m),0,3));?></a></li>                
                            <?php endforeach; ?>
                        </ul>
                    </div>
                    <?php $dates = current($dates); ?>
                    <?php foreach ($dates as $m=>$days): ?>
     
                        <div class="month" id="month<?php echo $m; ?>">
                        <table>
                            <thead>
                                <tr>
                                    <?php foreach ($date->days as $d) : ?>
                                        <th><?php echo substr($d,0,3); ?></th>
                                    <?php endforeach; ?>
                                </tr>
                            </thead>
     
                            <tbody>
                                <tr>
                                    <?php foreach ($days as $d=>$w) : ?>
                                        <td><?php echo $d; ?></td>
                                    <?php endforeach; ?>
                                </tr>
                            </tbody>
                        </table>
                        </div> 
                    <?php endforeach; ?>
     
            </div>
        <pre><?php print_r($dates); ?></pre>
     
    </body>
    </html>
    ma page date.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?php
    class Date{
    	var $days = array ('Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi','Dimanche');
    	var $months = array ('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Aout','Septembre','Octobre','Novembre','Décembre');
    	function getAll($year){
    		$r = array();
    		$date = new DateTime($year.'-01-01');
    		while ($date->format('Y') <= $year){
    		//Ce que je veux obtenir => $r[ANNEE][MOIS][JOUR] = JOUR DE LA SEMAINE
    		$y = $date->format('Y');
    		$m = $date->format('n');
    		$d = $date->format('j');
    		$w = str_replace('0','7',$date->format('w'));
    		$r[$y][$m][$d] = $w;
    		$date->add(new DateInterval('P1D'));	
    		}
    		return $r;
     
    	} 
    }
    si je continue ainsi j'arriverais à faire un ......calendrier mais comme je veux faire un planning j'ai besoin d'afficher les nom des jours sous les les numéros de jours.

    je pense que je dois faire une boucle à cette endroit de mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <thead>
                                <tr>
                                    <?php foreach ($date->days as $d) : ?>
     
                                        <th><?php echo substr($d,0,3); ?></th>
     
                                      <?php endforeach; ?>
                                </tr>
                            </thead>
    mais pour l'instant toutes les boucles que j'ai écrites boucle à l’infinie et font planter mon navigateur car je n'arrive pas à récupérer le numéro des jours ( enfin je pense que c'est ce qu'il faut faire. par exemple dire qu'il faut afficher les noms des jours tant que le mois n'est pas finis. )

    merci de votre aide.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Je ne sais pas comment tu fais des boucles infinies avec des foreach toi

    Grossierement, un exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    <?php
    class Date{
    	var $days = array (1=>'Lundi',2=>'Mardi',3=>'Mercredi',4=>'Jeudi',5=>'Vendredi',6=>'Samedi',7=>'Dimanche');
    	var $months = array ('Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre');
    	function getAll($year){
    		$r = array();
    		$date = new DateTime($year.'-01-01');
    		while ($date->format('Y') <= $year){
    		//Ce que je veux obtenir => $r[ANNEE][MOIS][JOUR] = JOUR DE LA SEMAINE
    		$y = $date->format('Y');
    		$m = $date->format('n');
    		$d = $date->format('j');
    		$w = $date->format('N');
    		$r[$y][$m][$d] = $w;
    		$date->add(new DateInterval('P1D'));	
    		}
    		return $r;
     	}
     
    	function dayofweek($n) {
    		return substr($this->days[$n],0, 3);		
    	}
    }
     
    $objDate = new date;
     
    $fullyear = $objDate->getAll(2016);
     
    $year_line = '';
    $month_line = '';
    $day_line1 = '';
    $day_line2 = '';
    $ndays = 0;
     
    foreach ($fullyear as $year=>$months) {
    	foreach ($months as $month=>$days) {
    		$month_line .= '<td colspan="' . count($days) . '">'. $month .'</td>';
    		foreach ($days as $day=>$n) {
    			$day_line1 .= '<td>' . $n . '</td>';
    			$day_line2 .= '<td>' . $objDate->dayofweek($n) . '</td>';
    			$ndays++;
    		}
    	}
    	$year_line .= '<td colspan="' . $ndays . '">' . $year . '</td>';
    }
    ?>
    <table border="1">
    	<tr><?php echo $year_line; ?></tr>
    	<tr><?php echo $month_line; ?></tr>
    	<tr><?php echo $day_line1; ?></tr>
    	<tr><?php echo $day_line2; ?></tr>
    </table>
    Au passage, utilise 'N' pour avoir le dimanche en 7.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    en gros en faisant comme j'ai fait j’obtiens un tableau du genre :

    lun mar mer jeu ven sam dim
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14

    etc.....

    je cherche à obtenir ça :

    lun mar mer jeu ven sam dim lun mar mer jeu ven sam dim
    1 2 3 4 5 6 7 8 9 10 11 12 13 14

    etc.....

    pour tenté d'obtenir ce que je veux j'ai donc une boucle foreach qui parcours mon tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <thead>
                                <tr>
                                    <?php foreach ($date->days as $d) : ?>
     
                                        <th><?php echo substr($d,0,3); ?></th>
     
                                      <?php endforeach; ?>
                                </tr>
                            </thead>
    dans cette boucle foreach j'ai tenté de faire une boucle while en tentant d' afficher les noms des jours tant que le mois n'est pas finis et c'est la que la boucle infinis fait planté mon navigateur !!!!

    en tout cas merci de ton aide c'est vraiment sympa !

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    Tu aurais pu prendre un peu de temps pour voir ce que faisais precisemment mon code et comment l'adapter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $day_line1 .= '<td>' . $objDate->dayofweek($n) . '</td>';
    $day_line2 .= '<td>' . $ndays . '</td>';
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    oui oui je suis deja dessus....juste je t'expliquais mon histoire de boucle voila tout !!!!!

    je te tiens au courant demain si j'arrive à mes fins....je suis un vieux débutant donc le temps que je comprenne toutes les subtilités

    mais en tout cas merci pour ton aide !

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 67
    Par défaut
    hello à tous.

    bon du coup j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    <?php
    setlocale(LC_ALL, 'FR_fr');
    if(empty($_GET)){
    	$firstDay = date('Y-m-d', strtotime('first day of this month'));
    	$lastDay = date('Y-m-d', strtotime('last day of this month'));
    	$nextYear = date('Y-m-d', strtotime('+ 1 year'));
    	$prevYear = date('Y-m-d', strtotime('- 1 year'));
    	$currentYear = date('Y');
    }
    else{
    	$firstDay = date('Y-m-01', strtotime($_GET['month']));
    	$lastDay = date('Y-m-t', strtotime($_GET['month']));
    	$nextYear = date('Y-m-d', strtotime($_GET['month'].' + 1 year'));
    	$prevYear = date('Y-m-d', strtotime($_GET['month'].' - 1 year'));
    	$currentYear = date('Y', strtotime($_GET['month']));
    }
     
    //la variable $nextMonth = le mois suivant au mois en court
    $nextMonth=DateTime::createFromFormat('Y-m-d',$firstDay)->add(new DateInterval('P1M'))->format('Y-m-d');
    //la variable $prevMonth = le mois precedant au mois en court
    $prevMonth=DateTime::createFromFormat('Y-m-d',$firstDay)->sub(new DateInterval('P1M'))->format('Y-m-d');
     
    //on créer un tableau qui va récupérer tout les jours du mois
    $datesMonth=array();
     
    //on definit les dates du mois en court qui seront stockées dans la variable $period On utile DatePeriod pour définir une période qui va du début du mois ($firstDay) au dernier jour du mois ($lastDay) et ce jour par jour.
    $period=new DatePeriod(
    		new DateTime($firstDay),
    		new dateInterval('P1D'),
    		(new DateTime($lastDay))->modify('+ 1 day'));
     
     
    //on recupere toute les dates dans un tableau
    foreach($period as $p){
    	array_push($datesMonth,$p->format('Y-m-d'));
    }
     
     
    //echo $firstDay.'</br>'.$lastDay.'</br>'.$nextYear.'</br>'.$prevYear.'</br>';
    //echo $nextMonth.'</br>'.$prevMonth.'</br>';
    ?>
     
     
    <!doctype html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>planning</title>
    <link rel="stylesheet" type="text/css" href="style.css" />
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script>
    </head>
     
    <body>
    <div id="main">
    	<div class="row">
     
        	<h3><?=strftime('%B',strtotime($firstDay)).'&nbsp;'.$currentYear;?></h3>
     
        	 <a href="index.php?month=<?=$prevYear;?>" class="btn btn-warning"> << <?php echo date('Y',strtotime($prevYear));?></a>&nbsp;
             <a href="index.php?month=<?=$prevMonth;?>" class="btn"> << <?php echo strftime('%B',strtotime($prevMonth));?></a>&nbsp;
     
             <a href="index.php?month=<?=$nextYear;?>" class="btn btn-warning">  <?php echo date('Y',strtotime($nextYear));?>>></a>&nbsp;
             <a href="index.php?month=<?=$nextMonth;?>" class="btn"><?php echo strftime('%B',strtotime($nextMonth));?>>></a>&nbsp;
     
        </div>
     
        <table class="tableau">
        	<thead>
            	<tr>
                	<?php foreach ($datesMonth as $d):?>
                    	<th><?=strftime('%a',strtotime($d));?></th>
                    <?php endforeach ?>
                </tr>           
            </thead>
            <tbody>
            	<tr>
                	<?php  foreach ($datesMonth as $d):?>
                    	<td><?=date('d',strtotime($d));?></td>
                    <?php endforeach ?>
                </tr>
            </tbody>
        </table> 	
     
    	</div> <!-- fin de main -->
     
    </body>
    </html>
    ça marche comme il faut.
    par contre au niveau de la structure du code c'est pas trop propre donc j'aurais besoin d'un coup de main pour créer des objets.(j'y connais pas grand chose !!!! )

    j'ai donc fait un test et regardé et lu tout plein de tutoriel et j'ai fait un test avec ça :

    MA CLASSE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    class calendrier{
    		//on creer un tableau contenant les élement de la date.
    		//$periods=array();
     
    		public $firstDay;
    		public $lastDay;
    		public $nextYear;
    		public $prevYear;
    		public $nextMonth;
    		public $prevMonth;
    		public $currentYear;
     
    		public function period(){
     
    			return"($this->firstDay
    				  $this->lastDay
    				  $this->nextMonth
    				  $this->prevMonth
    				  $this->nextYear
    				  $this->prevYear)";
     
    		}
    }
    ?>
    LA PAGE QUI RÉCUPÈRE ET AFFICHE MON OBJET
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php
    require('date.php');
    $maPeriod=new calendrier();
    $maPeriod->firstDay = date('Y-m-d', strtotime('first day of this month'));
     
    print "Date du 1er jour : " .$maPeriod->period() . "\n";
    ?>
    Est-ce que je dois mettre mon contrôle ( début du code ) dans ma classe et si oui comment procéder ?
    merci de votre aide.

Discussions similaires

  1. Réponses: 19
    Dernier message: 27/11/2007, 23h54
  2. calendrier au second plan
    Par RdO45 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 26/11/2007, 17h09
  3. Comment grouper et créer un plan en VBA Excel ?
    Par vacknov dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/11/2007, 07h00
  4. Créer un planning sur access...
    Par SpyesX dans le forum Access
    Réponses: 2
    Dernier message: 05/11/2005, 08h33
  5. grouper/créer un plan sous Excel
    Par EFCAugure dans le forum API, COM et SDKs
    Réponses: 6
    Dernier message: 06/10/2004, 16h46

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo