[Résolu] Problème pour afficher ou non un field si la date du jour est passé

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Je me creuse la tête depuis pas mal de temps pour trouver une solution à mon problème, j'ai créé un contenu "film", dans lequel j'ai ajouté un field "date_de_sortie" (module date) + un autre field pour noter le contenu (module fivestar).

J'aimerais qu'il soit possible de noter un film si il est déjà sortie au cinéma. Si le film n'est pas encore sortie, le field "note" n'apparait pas dans la page.

Voici le code que j'utilise (insérer dans une page perso => node--film.tpl.php) :

"

<?php
$today
= date('Y-m-d', time());
if(
render ($content['field_date_de_sortie']) <= $today)
print
render($content['field_note']); else print "Système de note désactivé";
?>

"

Le problème est qu'il s'affiche "Système de note désactivé" aussi bien pour une date de sortie inférieure ou supérieure à la date du jour.

Quelqu'un a une solution ? merci !

Forum : 

Dois-je modifier mon code comme cela ?

"

<?php
$dateA
= date('Y-m-d', time());
$dateB = render ($content['field_date_de_sortie']);
if(
strtotime($dateA) > strtotime($dateB))
{
print
render($content['field_note']);
}
else
{
print
"Système de note désactivé";
}
?>

"

Cela affiche cette fois-ci toujours le field note, même si le film n'est pas sortie.

Bonjour, j'ai regardé le doc que vous m'avez envoyé, mais je galère toujours :s,

Mes variables semblent avoir le même format mais mon code n'est toujours pas bon.

La variable $dateA renvoie la date du jour au format : "23 juin 2012"
La variable $dateB renvoie la date de sortie du film au format : "25 Juillet 2012"

Voici le code complet :

"

<?php
setlocale
(LC_TIME, 'fr_FR');
$dateA = strftime("%d %B %Y");
$dateB = render ($content['field_date_de_sortie'] );
if(
strtotime($dateA) > strtotime($dateB))
{
print
render($content['field_note']);
}
else
{
print
"Système de note désactivé";
}
?>

"

Essayez comme ceci:

<?php
$dateSortie
= "2009-04-04"; // format de date en Anglais
if (strtotime($dateSortie) <= strtotime("now")) {
  echo
"Système de note activé";
}
else {
  echo
"Système de note désactivé";
}
?>

Je suppose que je dois remplacer "2009-04-04" par "render ($content['field_date_de_sortie'])" ?

c'est ce que j'ai fais et malheureusement le code n'est toujours pas bon, quelque chose m'échappe :(

code :

"

<?php
$dateSortie
= render ($content['field_date_de_sortie']);
if (
strtotime($dateSortie) <= strtotime("now")) {
  echo
"Système de note activé";
}
else {
  echo
"Système de note désactivé";
}
?>

"

ah désolé, oui j'ai un bloc dépliant avec à l'intérieur :

... (Array, 16 elements)

#theme (String, 5 characters ) field
#weight (String, 1 characters ) 0
#title (String, 14 characters ) Date de sortie
#access (Boolean) TRUE
#label_display (String, 6 characters ) hidden
#view_mode (String, 4 characters ) full
#language (String, 3 characters ) und
#field_name (String, 20 characters ) field_date_de_sortie
#field_type (String, 8 characters ) datetime
#field_translatable (String, 1 characters ) 0
#entity_type (String, 4 characters ) node
#bundle (String, 4 characters ) film
#object (Object) stdClass
#items (Array, 1 element)
#formatter (String, 12 characters ) date_default
0 (Array, 1 element)

Ok donc fouille dans ton dpm pour trouver le champ date qui t'interesse et comme ca tu pourras y accéder genre $content['#object']['date'] contient ta date. Fais bien attention, quand c'est des array tu peux accéder à la valeur en faisant $content['LAVARIABLE'] mais des fois c'est des objets comme la ton exemple $content['#object']. La si tu veux accéder aux variables à l'intérieur vu que c'est un objet il faut faire $content['object']->LAVARIABLE.

Une fois que tu récupères la date tu pourras faire ta comparaison avec les fonctions de date php

$dateexploser = explode('-', $content['#object']['field_date_de_sortie']['und'][0]);
$annee=$dateexploser[0];
$moi = $dateexploser[1];

$jourexplode = explode(' ', $dateexploser[2]);

$jour =$jourexplode[0];

$timestampdetadate = mktime(0, 0, 0, $moi, $jour, $annee);

Il te reste à faire un timestamp de ton autre date (peut-être c'est la date du jour ?) je sais pas. Et pour finir tu compares.

En fait, quand c'est un objet tu fais ->field pour accéder à la variable, mais après si la variable en question est un array, tu continues avec des crochets $content['#objet']->field['variable_suivante’].

De plus bien reprendre le nom de l'objet ou de l'array, il y a un # devant object $content[‘#object’].

Si j'ai bien compris la ligne "$timestampdetadate = mktime(0, 0, 0, $mois, $jour, $annee);" sert à afficher un temps écoulé en secondes entre la date du 1 janvier 1970 et la date de sortie ?

Ensuite je dois ajouter la ligne "$now = time();" (qui affiche la date actuelle en secondes depuis le 1 janvier 1970) et comparer la variable "$now" et "$timestampdetadate" ?

Ce que tu peux faire c'est faire un dpm de tes deux variables pour récupérer le timestamp et aller sur un site qui fait la conversion timestamp => date normale, voir si tu retombes bien sur les dates que tu avais au départ (date de début et date du jour)

As tu modifié la ligne :$dateexploser = explode('-', $content['#object']['field_date_de_sortie']['und'][0]);
Correction : $dateexploser = explode('-', $content['#object']->field_date_de_sortie['und'][0]);
dpm($dateexploser);

Si $content[‘field_date_de_sortie’] renvoie bien ta date tu peux directement faire :
$dateexploser = explode(‘-‘, $content[‘field_date_de_sortie’]) ;

le dpm sur field_date_de_sortie me renvoi la même chose que la première capture que je t'ai envoyé.

http://www.cinehorizons.net/cap.jpg

sinon en changeant la ligne "$dateexploser = explode(‘-‘, $content[‘#object’]->field_date_de_sortie[‘und’][0]) ;"

par

"$dateexploser = explode(‘-‘, $content[‘field_date_de_sortie’]) ;"

Il y a une différence lorsque je fais ensuite un dpm sur $dateexploser

http://www.cinehorizons.net/cap2.jpg

http://www.cinehorizons.net/cap3.jpg

j'ai fais un "dpm($node->field_date_de_sortie['und'][0]['value']);"

et j'ai maintenant cela d'affiché :

2012-07-25 00:00:00

c'est bon signe ?^^

au fait, est-ce que je dois aussi modifier la ligne

$dateexploser = explode('-', $content['#object']->field_date_de_sortie['und'][0]['value']);

par

$dateexploser = explode('-', $node->field_date_de_sortie['und'][0]['value']);

?