Utiliser des fonctions dans template.php

Catégories:

Bonjour,

je souhaite utiliser template.php pour formater un élément de Views (une date).

J’ai donc créé la fonction :

phptemplate_preprocess_views_view_field__actualites__block__field_datedepublication_value(&$vars) {
  $vars['output'] = $vars['field']->render($vars['row']);
}

Seulement, si j’essaie de placer une fonction, ça ne me retourne rien :

phptemplate_preprocess_views_view_field__actualites__block__field_datedepublication_value(&$vars) {
  $get_date = $vars['field']->render($vars['row']);
  $vars['output'] = my_date_function($get_date);
}

alors que si je mets un argument en dur :

phptemplate_preprocess_views_view_field__actualites__block__field_datedepublication_value(&$vars) {
  $get_date = $vars['field']->render($vars['row']);
  $vars['output'] = my_date_function('2010-05-27T00:55:17');
}

ça marche parfaitement et ça me retourne «27 mai 2010». Quelqu’un peut me dire pourquoi et comment procéder ?

Merci d’avance ! :-)

#

soit ton $get_date n a pas le bon format.
Sinon essaye en mettant

$vars[‘output’] = my_date_function((string)$get_date) ;

MOMO Drupal en force

#

J’ai déjà essayé de placer (string), et ça ne fonctionne toujours pas…

$get_date = $vars['field']->render($vars['row']);
$vars['output'] = gettype($get_date);

me retourne bien «string».

Ma fonction est simple :

<?php
function my_date_function($date)
{
 
$months = array( '01' => 'janvier', '02' => 'février', '03' => 'mars', '04' => 'avril', '05' => 'mai', '06' => 'juin', '07' => 'juillet', '08' => 'août', '09' => 'septembre', '10' => 'octobre', '11' => 'novembre', '12' => 'décembre' );
   
 
$date = substr($date,0,10);

  if (strstr($date, '/'))
  {
    list(
$day, $month, $year) = explode("/", $date);
   
$readable_date = "$day $months[$month] $year";
    return
$readable_date;
  }
  else if (
strstr($date, '-'))
  {
    list(
$year, $month, $day) = explode("-", $date);
   
$readable_date = "$day $months[$month] $year";
    return
$readable_date;
  }
}
?>

et je ne pense pas que ça vienne de là, puisqu’en fait, aucune fonction ne marche… Un simple :

$get_date = $vars['field']->render($vars['row']);
$vars['output'] = substr($get_date,0,10);

ne me retourne rien non plus ! Alors que :

$vars['output'] = substr('2010-05-27T15:27:03',0,10);

me retourne bien «2010-05-27»… :’(

(Pour info, j’utilise un sous-thème de Zen…)


Lionel

#

Je doute que ta fonction retourne bien le bon format.car il y a dedans

$readable_date = «$day $months[$month] $year» ;

des variable php entre des cote ??

Ca ne retourne pas ce que tu veut.

MOMO Drupal en force

#

Les variables PHP passent très bien dans des doubles quotes (technique peu recommandée par les puristes à cause de mauvaises performances).

Je viens de trouver ce qui ne fonctionne pas ; en fait, $vars['field']->render($vars['row']) me retourne :
<span class="date-display-single">21/04/2010 - 18:03</span>

Donc dans template.php :

function phptemplate_v3_preprocess_views_view_field__actualites__block__field_datedepublication_value(&$vars) {
  $get_date = strip_tags($vars['field']->render($vars['row']));
  $vars['output'] = my_function_date($get_date);
}

et ça fonctionne nickel.

En revanche, ça ne résout pas mon problème initial puisque la fonction phptemplate_v3_preprocess_views_view_field__actualites__block__field_datedepublication_value() est forcément attachée au fichier views-view-field—actualites—block—field-datedepublication-value.tpl.php dont je souhaite me passer ! Il y a une discussion sur ce sujet : http://drupal.org/node/258089

Je pense que je vais devoir choisir une méthode et m’y tenir. Je passe le sujet en résolu :)

EDIT : apparemment, on ne peut pas éditer le post initial, donc euh… RÉSOLU ! ;-)


Lionel

#

oki

MOMO Drupal en force

Syndiquer le contenu