Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [Résolu] JDateTime - problème pour passer une date en parametre

Posted by Dunbo on 01/13/2012 12:35

Bonjour à tous,

Nouveau sur ce forum je développe une petite application destinée à la gestion d'un parc immobillier.

Je suis en train de faire un plugin de fonction overdelayed jTpl que j'appelle au moyen de la commande :

{if $log->comment_date}
   {assign $test = $log->comment_date|jdatetime:'db_date'}
   {overdelayed $test , $current_date , 2}
{/if}

$current_date est du format TIMESTAMP_FORMAT

code de la fonction :

<?php
function jtpl_function_html_overdelayed($bdate, $edate, $range)
{
	echo $bdate . $edate . $range;
}
?>

Si je mets une valeur autre ça plante pas sinon j'ai une page blanche

En gros je suis un peu bloqué la.

Dans l'attente de vous lire

Merci d'avance

  [Opened] JDateTime - problème pour passer une date en parametre

Reply #1 Posted by laurentj on 01/13/2012 14:45

Bonjour,

L'utilisation des modificateurs de valeurs comme |jdatetime:'db_date' ne sont possibles que pour les instructions d'affichage. Donc impossible de faire cela pour un tag {assign}.

Tu peux utiliser la classe jDateTime directement dans ton plugin...

  [Opened] JDateTime - problème pour passer une date en parametre

Reply #2 Posted by Dunbo on 01/13/2012 15:25

Bonjour Laurent,

Merci de ta réponse. Donc si je passe mon objet de la façon suivante :

{overdelayed $log->comment_date , $current_date , 2}

ça passe en revanche je ne peux pas le convertir à la réception dans le plugin car il ne reconnait pas la nature de l'objet.

Merci de ta réponse

  [Opened] JDateTime - problème pour passer une date en parametre

Reply #3 Posted by laurentj on 01/13/2012 16:24

en revanche je ne peux pas le convertir à la réception dans le plugin car il ne reconnait pas la nature de l'objet.

Je ne vois pas où est le problème. Tu peux appeler jDateTime quand même dans ton plugin, non ?

ou encore, tu peux avoir aussi un overdelayedlog qui fasse la convertion, et le overdelayed sans convertion. (ou alors un parametre supplémentaire sur overdelayed indiquant le format de la date passé, format que l'on passera à jDateTime...)

  [Opened] JDateTime - problème pour passer une date en parametre

Reply #4 Posted by Dunbo on 01/13/2012 17:02

Je viens de faire le test : Appel de fonction :

{overdelayed $log->comment_date, $current_date, 2}

Fonction

<?php
function jtpl_function_html_overdelayed($bdate, $edate, $range)
{
	echo $bdate->toString(jDateTime::LANG_DFORMAT);
}
?>

Résultat quand je fais le echo le code de la page s'arrete Merci pour ton aide.

Cordialement

  [Opened] JDateTime - problème pour passer une date en parametre

Reply #5 Posted by laurentj on 01/13/2012 17:23

Pourquoi tu fais un toString ? $log->comment_date est un objet jDateTime ? Ce ne serait pas plutôt une chaine ? (j'en sais rien, je ne sais pas ce qu'est ton $log->comment_date)..

Si tu suis l'exemple de la doc, ce serait un truc du genre :

<?php
function jtpl_function_html_overdelayed($bdate, $edate, $range)
{

   $dt = new jDateTime();
   $dt->setFromString($bdate, jDateTime::DB_DFORMAT);
   echo $dt->toString(jDateTime::LANG_DFORMAT);
   echo $edate . $range;
}
?>

Après au niveau des formats, étant donné que je ne sais pas ce que tu as dans $log->comment_date ni ce que tu veux afficher, à toi d'indiquer le bon format...

  [Opened] JDateTime - problème pour passer une date en parametre

Reply #6 Posted by Dunbo on 01/16/2012 14:09

Merci pour ta réponse,

Pour information je découvre la chose suivante, le premier paramêtre de ma fonction a comme affectation de fait le nom du template donc j'ai rajouté un paramêtre $tpl afin de ne plus être embéter.

voici le code de la fonction

<?php
function jtpl_function_html_overdelayed($tpl,$bdate,$edate, $range)
{
	Print $range;
	Print $edate->toString(jDateTime::LANG_DFORMAT);
	Print $bdate->toString(jDateTime::LANG_DFORMAT);
}
?>

Dans ce cas Print $range fonctionne comme la ligne suivante. Au demeurant la varable que j'affecte à edate est du type jDateTime via le controlleur en voici la partie qui affecte :

$dt = new jDateTime();
$dt->now();
$tpl->assign('current_date',$dt);

le problème n'intervient que sur Print $bdate->toString(jDateTime::LANG_DFORMAT); qui arrete la production html.

Si je fais : {$log->comment_date|jdatetime:'db_date':'lang_date'} dans mon template ici encore pas de souci ça marche en revanche si j'appel {overdelayed $log->comment_date, $current_date, 2} directement alors impossible de manipuler ce parametre en temps que jDateTime et ma page s'arrete lors de l'exécution de cette fonction.

Voilà, j'espère que tu aurras assez d'éléments pour comprendre.

Cordialement

PS : Je ne veux rien afficher mais juste comparer deux date de deux tables différentes au niveau du template

  [Opened] JDateTime - problème pour passer une date en parametre

Reply #7 Posted by laurentj on 01/16/2012 16:45

Si je fais : {$log->comment_date|jdatetime:'db_date':'lang_date'} dans mon template ici encore pas de souci ça marche

ok donc si j'ai bien compris, (et tu ne m'avais pas répondu directement) dans $log->comment_date tu as une chaine, pas un objet jDatetime.

Donc quand tu fais {overdelayed $log->comment_date, $current_date, 2}, tu lui passes une chaine, donc $bdate est une chaine. Or, tu essayes ensuite de lui appeler une méthode toString. Une chaine n'est pas un objet. Bref, ça revient donc à faire ce que j'ai mis dans mon exemple.

<?php
function jtpl_function_html_overdelayed($tpl,$bdate,$edate, $range)
{
	Print $range;
	Print $edate->toString(jDateTime::LANG_DFORMAT);

       $dt = new jDateTime();
       $dt->setFromString($bdate, jDateTime::DB_DFORMAT);
       echo $dt->toString(jDateTime::LANG_DFORMAT);
}
?>

  [Opened] JDateTime - problème pour passer une date en parametre

Reply #8 Posted by Dunbo on 01/16/2012 17:37

Désolé,

J'aurai juré que $log->comment_date était un objet de type jDateTime, en effet quand je faisait un print bdate; il me renvoyait une erreur.

C'est donc résolu.

Merci encore pour ton aide qui me débloque.

Salutations les meilleures

 
Page
  1. Re: Modifier un control jForm dans un controlleur >
  2. Re: [error 307] : le code php default n'est pas autorisé >
  3. [Résolu] module d'administration : comment creer un module d'admin >
  4. Re: Crud plusieurs templates >
  5. Affecter une classe de manière alternative. >
  6. [Résolu] créer un bouton annulé dans un formulaire >
  7. Jauth version jelix 1.1 >
  8. JDateTime - problème pour passer une date en parametre