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

MkFramework Discussion :

Problème saisie de dates


Sujet :

MkFramework

  1. #1
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2012
    Messages : 10
    Points : 12
    Points
    12
    Par défaut Problème saisie de dates
    Bonjour,

    Je me remets à MkFramework et j'ai quelques soucis avec les dates.
    J'ai une table avec un champ de type date, dans la génération du CRUD j'ai indiqué un type date pour ce champ.
    Deux questions :
    - je ne peux saisir les dates qu'en format américain (YYYY-MM-DD). est ce normal ?
    - je ne vois pas comment associer le calendrier à ce champ - comment faire ? (d'autre part, quand sur le calendrier je clique sur l'année, le mois... je sors de mon écran - peut être un problème sur le sModuleAction du calendrier) ?

    Voici les sources actuels :

    module/acteur/main.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
    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
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
     
    <?php 
    class module_acteur extends abstract_module{
     
    	public function before(){
    		$this->oLayout=new _layout('template1');
    		//$this->oLayout->addModule('menu','menu::index');
    	}
     
     
    	public function _index(){
    	    //on considere que la page par defaut est la page de listage
    	    $this->_list();
    	}
     
     
    	public function _list(){
    		$tActeur=model_acteur::getInstance()->findAll();
    		$oView=new _view('acteur::list');
    		$oView->tActeur=$tActeur;
    		$oModulePagination=new module_pagination;
    		$oModulePagination->setModuleAction('acteur::list');
    		$oModulePagination->setParamPage('page');
    		$oModulePagination->setLimit(5);
    		$oModulePagination->setPage( _root::getParam('page') );
    		$oModulePagination->setTab( $tActeur );
    		$oView->tActeur=$oModulePagination->getPageElement();
    		$this->oLayout->add('main',$oView);
    		$oViewPagination=$oModulePagination->build();
    		$this->oLayout->add('main',$oViewPagination);
    	}
     
     
     
    	public function _new(){
    		$tMessage=$this->processSave();
    		$oActeur=new row_acteur;
    		$oActeur=$this->fillRow($oActeur);
    		$oView=new _view('acteur::new');
    		$oModuleCalendrier = new module_calendrier;
    		$oModuleCalendrier->sModuleAction = 'acteur::list';
    		$oView->oViewCalendrier = $oModuleCalendrier->build();
    		$oView->oActeur=$oActeur;
    		$oPluginXsrf=new plugin_xsrf();
    		$oView->token=$oPluginXsrf->getToken();
    		$oView->tMessage=$tMessage;
    		$this->oLayout->add('main',$oView);
    	}
     
    	public function _edit(){
    		$tMessage=$this->processSave();
    		$oActeur=model_acteur::getInstance()->findById( _root::getParam('id') );
    		$oActeur=$this->fillRow($oActeur);
    		$oView=new _view('acteur::edit');
    		$oModuleCalendrier = new module_calendrier;
    		$oModuleCalendrier->sModuleAction = 'acteur::list';
    		$oView->oViewCalendrier = $oModuleCalendrier->build();
    		$oView->oActeur=$oActeur;
    		$oView->tId=model_acteur::getInstance()->getIdTab();
    		$oPluginXsrf=new plugin_xsrf();
    		$oView->token=$oPluginXsrf->getToken();
    		$oView->tMessage=$tMessage;
    		$this->oLayout->add('main',$oView);
    	}
     
    	public function _delete(){
    		$tMessage=$this->processDelete();
    		$oActeur=model_acteur::getInstance()->findById( _root::getParam('id') );
    		$oView=new _view('acteur::delete');
    		$oView->oActeur=$oActeur;
    		$oPluginXsrf=new plugin_xsrf();
    		$oView->token=$oPluginXsrf->getToken();
    		$oView->tMessage=$tMessage;
    		$this->oLayout->add('main',$oView);
    	}
     
     
     
    	private function fillRow($oActeur){
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return $oActeur;
    		}
     
    		$tId=model_acteur::getInstance()->getIdTab();
    		$tColumn=model_acteur::getInstance()->getListColumn();
    		foreach($tColumn as $sColumn){
    			if( _root::getParam($sColumn,null) === null ){ 
    				continue;
    			}else if( in_array($sColumn,$tId)){
    				 continue;
    			}
    			$oActeur->$sColumn=_root::getParam($sColumn,null) ;
    		}
    		return $oActeur;
    	}
     
    	private function processSave(){
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
     
    		$oPluginXsrf=new plugin_xsrf();
    		if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    			return array('token'=>$oPluginXsrf->getMessage() );
    		}
     
    		$iId=_root::getParam('id',null);
    		if($iId==null){
    			$oActeur=new row_acteur;	
    		}else{
    			$oActeur=model_acteur::getInstance()->findById( _root::getParam('id',null) );
    		}
     
    		$tId=model_acteur::getInstance()->getIdTab();
    		$tColumn=array('nom','prenom','sexe','date_naissance');
    		foreach($tColumn as $sColumn){
    			 $oPluginUpload=new plugin_upload($sColumn);
    			if($oPluginUpload->isValid()){
    				$sNewFileName=_root::getConfigVar('path.upload').$sColumn.'_'.date('Ymdhis');
     
    				$oPluginUpload->saveAs($sNewFileName);
    				$oActeur->$sColumn=$oPluginUpload->getPath();
    				continue;	
    			}else  if( _root::getParam($sColumn,null) === null ){ 
    				continue;
    			}else if( in_array($sColumn,$tId)){
    				 continue;
    			}
     
    			$oActeur->$sColumn=_root::getParam($sColumn,null) ;
    		}
     
    		if($oActeur->save()){
    			//une fois enregistre on redirige (vers la page liste)
    			_root::redirect('acteur::list');
    		}else{
    			return $oActeur->getListError();
    		}
     
    	}
     
    	public function processDelete(){
    		if(!_root::getRequest()->isPost() ){ //si ce n'est pas une requete POST on ne soumet pas
    			return null;
    		}
     
    		$oPluginXsrf=new plugin_xsrf();
    		if(!$oPluginXsrf->checkToken( _root::getParam('token') ) ){ //on verifie que le token est valide
    			return array('token'=>$oPluginXsrf->getMessage() );
    		}
     
    		$oActeur=model_acteur::getInstance()->findById( _root::getParam('id',null) );
     
    		$oActeur->delete();
    		//une fois enregistre on redirige (vers la page liste)
    		_root::redirect('acteur::list');
     
    	}
     
    	public function after(){
    		$this->oLayout->show();
    	}
     
    }
    et

    module/acteur/view/edit.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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
     
    <?php
    	$oForm = new plugin_form($this->oActeur);
    	$oForm->setMessage($this->tMessage);
    ?>
    <form action="" method="POST" >
     
    <table>
     
    	<tr>
    		<th>Nom</th>
    		<td><?php echo $oForm->getInputText('nom');?></td>
    	</tr>
     
    	<tr>
    		<th>Pr&eacute;nom</th>
    		<td><?php echo $oForm->getInputText('prenom');?></td>
    	</tr>
     
    	<tr>
    		<th>Sexe</th>
    		<td><?php echo $oForm->getListRadio('sexe', array('M'=>'Masculin', 'F'=>'Féminin'));?></td>
    	</tr>
     
    	<tr>
    		<th>Date de naissance</th>
    		<td><?php echo $oForm->getInputText('date_naissance'); echo $this->oViewCalendrier->show();?></td>
    	</tr>
     
    </table>
     
    <?php echo $oForm->getToken('token', $this->token);?>
    <input type="submit" value="Modifier" /> <a href="<?php echo $this->getLink('acteur::list')?>">Annuler</a>
    </form>
    Merci par avance de votre aide

    Bonne fin de journée

    Dominique

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Le module calendrier n'est pas un "date picker", je vous invite à utiliser le date picker de jquery ou autre pour afficher en javascript un calendrier de selection de la date

    Pour des raisons de licences, je ne peux pas inclure de librairies js externe au framework
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2012
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2012
    Messages : 10
    Points : 12
    Points
    12
    Par défaut
    OK Merci
    Bonne journée

  4. #4
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    Ce sujet m'intéresse. j'ai dans un formulaire un champ qui doit recevoir une date. Actuellement ce champ est un '$oForm->getInputText('date')'. Je désire changer cela et mettre à la place un champ qui m'affichera un datepicker.
    Mes questions:
    1) A ce jour y a -t-il un champ de cette nature dans le plugin_form ou ailleurs dans le framework?
    2) Sinon, quelle est la méthode à suivre pour avoir un tel champ dans mon formulaire sachant que le champ doit être vu par mon controleur?

    Merci pour les réponses

  5. #5
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Actuellement non il n'y a pas de méthode gérant le date picker, c'est prévu à long terme, mais pas encore, il faut voir quel librairie intégrer, quel licence...
    Le problème se pose moins avec les applications de type bootstrap (qui inclut déjà jQuery)

    Après, vous pouvez capitaliser en modifiant le plugin_form pour permettre à vos autres applications d'en bénéficier

    Je vais communiquer aujourd'hui/ demain sur la récente présence d'un market application permettant non seulement d'ajouter modules et/ou plugins mais également à vous, la communauté de participer en proposant vos propres modules/plugins
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  6. #6
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    j'ai compris que le framework ne prend pas encore cela en charge.
    Tombée sur un tuto de création de datepicker, http://www.webtutoriaux.com/tutoriel...atepicker.html. j'ai téléchargé un dossier contenant tout ce qu'il faut. Pourtant dans ma page le calendrier n’apparaît pas, y aurait-il un conflit entre MKF et JQuery qui expliquerais ce problème?
    Remarque:
    1- J'ai placé le dossier téléchargé dans le dossier 'public' de MKF sous le nom 'datepicker' au même niveau que le dossier 'css'.
    2- J'ai lié les fichier du dossier téléchargé dans le template de ma page web :
    Code html : 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
    <html>
    <head>
    <title><?php echo $this->title ?></title>
    <link rel="stylesheet" type="text/css" href="css/monStyle_front.css" media="screen" />
    <link rel="stylesheet" type="text/css" href="css/main.css" media="screen" />
    <script src="js/main.js" type="text/javascript"></script>
     
    <!-- pour le datepicker  -->
    <link rel="stylesheet" typePreview post="text/css" href="datepicker/demos.css">
    <link rel="stylesheet" type="text/css" href="datepicker/jquery-ui.css">
    <script src="datepicker/jquery-1.5.1.js"></script>
    <script src="datepicker/jquery.ui.core.js"></script>
    <script src="datepicker/jquery.ui.widget.js"></script>
    <script src="datepicker/jquery.ui.datepicker.js"></script>
     
    <script>
    $(function() {
    $( "#datepicker" ).datepicker();
    });
    </script>
    <!-- fin datepicker -->
     
    <link rel="alternate" type="application/rss+xml" title="RSS" href="<?php echo _root::getLink('article::newsrss') ?>"/>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    </head>
    3- Dans ma vue donc j'ai un champ 'date' comme ceci :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <div class="demo">
    	<tr>
    		<th>Date de l'entretien :</th>
     
    		<td><input type="text" name="date"/>
    		<!--?php echo $oForm->getInputText('date')?-->
    		</td>
    	</tr>
    </div>
    Mais dans ma page web il n'y a qu'un champ texte et en cliquant dessus le calendrier n’apparaît pas.
    Merci pour les réponses.

  7. #7
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Oups, en allant directement sur le site de JQuery j'ai remarqué qu'il faut ajouter ceci au input text:
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <input type="text" name="date" id="datepicker"/>
    Je flippais déjà!
    Voyons à présent comment récupérer et traiter la date avant son enregistrement en base de données.

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2006
    Messages
    5 239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 239
    Points : 19 100
    Points
    19 100
    Billets dans le blog
    17
    Par défaut
    Oui effectivement, après comme je vous l'ai dit vous pouvez capitaliser :

    Dans votre plugin plugin_form, ajoutez la méthode suivante:
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public function getInputTextDate($sName,$tOption=null){
    		$sHtml=null;
    		$sHtml.='<input id="datepicker'.$sName.'" type="text" name="'.$sName.'" value="'.$this->getValue($sName).'" '.$this->getOption($tOption).'/>';
    		$sHtml.=$this->getMessage($sName);
    		$sHtml.='<script>$( "#datepicker'.$sName.'" ).datepicker();</script>';
    		return $sHtml;
    	}
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  9. #9
    Membre régulier
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    304
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Gabon

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 304
    Points : 107
    Points
    107
    Par défaut
    Bonjour,

    je reviens ici car j'ai remarqué une différence entre la démarche du tutoriel http://mkframework.com/faq.html#automatiserrow et ce que j'ai dans mon model:
    Code php : 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
    public function save(){
    		if(!$this->isValid()){
    			return false;
    		}
     
    		/*FORMATAGE DES DATES*/
    		//on formate à la volée
           $oDate = new plugin_date($this->date_naiss,'d-m-Y');
           $this->date_naiss = $oDate->toString('Y-m-d');
     
    		parent::save();
    		return true;
    	}
     
    		/*FORMATAGE DES DATES*/
    	   //on surcharge le constructeur pour les enregistrements lus
        public function __construct($tRow=null){
     
           //on appel le constructeur normal de la row
           parent::__construct($tRow);
     
           //on modifie le champ date_mise_ajour avant d'initialiser l'objet
           $oDate = new plugin_date($tRow['date_mise_ajour'],'Y-m-d');
           $this->date_mise_ajour = $oDate->toString('d-m-Y');
     
    	   //on modifie le champ date_naiss avant d'initialiser l'objet
           $oDate = new plugin_date($tRow['date_naiss'],'Y-m-d');
           $this->date_naiss = $oDate->toString('d-m-Y');
    	}
    1- En ce qui concerne la modification des enregistrements lus, la signature du constructeur est différente. C'est mal?
    2- Dans cette même fonction, faut-il formater les dates avant d'appeler le constructeur normal de la row, ou l'inverse?

    Merci pour les précisions

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème concernant la saisie des dates
    Par napi15 dans le forum ASP.NET MVC
    Réponses: 11
    Dernier message: 20/06/2013, 21h53
  2. problème saisie des Dates à partir d'un calendrier
    Par girlworld86 dans le forum IHM
    Réponses: 4
    Dernier message: 23/06/2007, 17h53
  3. [TMaskEdit] Problème de saisie de date
    Par Pill_S dans le forum Delphi
    Réponses: 4
    Dernier message: 10/07/2006, 16h36
  4. Saisie des dates
    Par J-P-B dans le forum XMLRAD
    Réponses: 5
    Dernier message: 04/07/2003, 11h08
  5. Réponses: 3
    Dernier message: 19/03/2003, 15h19

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