Submitted by Stevenp on
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 !
Vous devez utiliser la
Permalien Soumis par hles le 22 Juin, 2012 - 17:25
Vous devez utiliser la fonction PHP strtotime pour comparer 2 dates. Pour l'instant, vous comparez des chaines de caractères.
Dois-je modifier mon code
Permalien Soumis par Stevenp le 22 Juin, 2012 - 19:53
Dois-je modifier mon code comme cela ?
"
"
Cela affiche cette fois-ci toujours le field note, même si le film n'est pas sortie.
Regardez bien la doc de
Permalien Soumis par hles le 22 Juin, 2012 - 20:11
Regardez bien la doc de strtotime, verifiez les valeurs de vos variables $dateA et $dateB et je suis sur que vous trouverez :)
Bonjour, j’ai regardé le doc
Permalien Soumis par Stevenp le 23 Juin, 2012 - 12:28
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 :
"
"
Essayez comme
Permalien Soumis par hles le 23 Juin, 2012 - 13:27
Essayez comme ceci:
Je suppose que je dois
Permalien Soumis par Stevenp le 23 Juin, 2012 - 16:00
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 :
"
"
UP :(
Permalien Soumis par Stevenp le 25 Juin, 2012 - 14:35
UP :(
Bonjour, Tu as fait un
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 15:11
Bonjour,
Tu as fait un dpm($dateSortie) pour voir ce qu'il y avait dedans ? je pense qu'il retourne un array c'est pour ca que ta comparaison ne marche pas. Fais un dpm($content['field_date_de_sortie']); directement pour voir ce qu'il te retourne.
pour utiliser la function dpm() installer le module devel http://drupal.org/project/devel
Bonjour, Effectivement, cela
Permalien Soumis par Stevenp le 25 Juin, 2012 - 15:26
Bonjour,
Effectivement, cela me retourne un array, comment dois-je procéder ?
Quand tu fais un
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 15:32
Quand tu fais un dpm($content[‘field_date_de_sortie’]); tu as quoi ?
quand je fais un «print
Permalien Soumis par Stevenp le 25 Juin, 2012 - 15:37
quand je fais un "print dpm($content['field_date_de_sortie']) ;" cela m'affiche "Array" sur ma page.
Il n’y a pas besoin du print,
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 15:39
Il n'y a pas besoin du print, as tu installé devel ?
Quand un dpm t'affiche un truc tu peux déplier ce qu'il t'affiche pour voir à l'intérieur
ah désolé, oui j’ai un bloc
Permalien Soumis par Stevenp le 25 Juin, 2012 - 15:42
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
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 15:49
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
Je crois avoir trouver quelle
Permalien Soumis par Stevenp le 25 Juin, 2012 - 16:17
Je crois avoir trouver quelle variable utiliser, mais j'avoue que je ne sais pas vraiment comment faire pour m'en servir par la suite
voici une capture de ce que j'ai trouvé, si j'ai bien compris je dois me servir du champ "value" contenue dans l'array "field_date_de_sortie" ?
http://www.cinehorizons.net/cap.jpg
Oui c’est ca donc tu peux le
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 16:21
Oui c'est ca donc tu peux le convertir en timestamp, faire de même pour l'autre champ (celui auquel tu veux comparer celui que tu viens de trouver), et comparer les deux timestamp pour savoir lequel est plus grand.
Est-ce que tu peux me montrer
Permalien Soumis par Stevenp le 25 Juin, 2012 - 16:33
Est-ce que tu peux me montrer comment coder cela ? ou au moins une partie ? malgrès tes explications je nage un peu :(
$dateexploser = explode('-',
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 16:33
$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.
Oups, j’avais pas vu ton
Permalien Soumis par Stevenp le 25 Juin, 2012 - 16:35
Oups, j'avais pas vu ton dernier message ^^
Oui je veux comparer la date de sortie avec la date du jour. je vais regarder ton code de plus près, merci !
Oui pcq y’a des erreurs,
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 16:37
Oui pcq y'a des erreurs, $content['#object'] c'est un objet du coup c'est une fleche après et non pas des crochets.
Quand je retire les crochets
Permalien Soumis par Stevenp le 25 Juin, 2012 - 16:59
Quand je retire les crochets pour les remplacer par des flèches, ma page ne s'affiche pas.
"$content['object']->'field_date_de_sortie'->'und'->0"
Il n’y a pas de
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 17:08
Il n'y a pas de '
$content[‘#object’]->field_date_de_sortie['und’][0]
En fait, quand c’est un objet
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 17:12
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’].
Attention au copié collé, sur
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 17:18
Attention au copié collé, sur le forum les ' ne sont pas les même que dans ton éditeur pour coder.
Si j’ai bien compris la ligne
Permalien Soumis par Stevenp le 25 Juin, 2012 - 19:40
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" ?
Oui c’est ca =)
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 22:07
Oui c'est ca =)
Ce que tu peux faire c’est
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 22:09
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)
D’accord mais est-ce normal
Permalien Soumis par Stevenp le 25 Juin, 2012 - 23:31
D'accord mais est-ce normal que ma variable "$timestampdetadate" ne renvoi rien lorsque je fais un print dessus ? pour le "$now", j'ai bien le nombre de secondes qui apparait.
fais un dpm des variables
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 23:48
fais un dpm des variables $moi $jour $année voir si elles renvoient les bonnes valeurs ?
Salut :) Rien n’apparait
Permalien Soumis par Stevenp le 26 Juin, 2012 - 11:14
Salut :)
Rien n'apparait quand je fais un dpm, est-ce que j'ai mal tapé le code ?
"
dpm($moi);
dpm($jour);
dpm($annee);
"
Le code semble bon c’est
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 11:37
Le code semble bon c'est juste le code qui instancie ces variables qui doit être mauvais. Tu es bien logger sur ton site ? Sinon le dpm ne marche pas, il faut être co en tant qu'admin
Oui je suis bien loggé en
Permalien Soumis par Stevenp le 26 Juin, 2012 - 11:42
Oui je suis bien loggé en admin sur mon site, d'ailleurs quand je test à nouveau avec "dpm($content['field_date_de_sortie']) ;" le code apparait bien, mais pas pour les trois autres variables.
Je suis en formation je peux
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 11:47
Je suis en formation je peux pas trop t'aider niveau code, essaye de faire étape par étape des dpm
Genre dpm($dateexploser); etc pour voir où ca foire.
As tu modifié la ligne
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 11:51
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
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 11:55
Si $content[‘field_date_de_sortie’] renvoie bien ta date tu peux directement faire :
$dateexploser = explode(‘-‘, $content[‘field_date_de_sortie’]) ;
j’ai fais un dpm pour la
Permalien Soumis par Stevenp le 26 Juin, 2012 - 11:55
j'ai fais un dpm pour la variable $dateexploser, voici la capture :
http://www.cinehorizons.net/cap2.jpg
Et un dpm de
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 12:03
Et un dpm de $content[‘field_date_de_sortie’] ?
le dpm sur
Permalien Soumis par Stevenp le 26 Juin, 2012 - 12:12
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
tu peux montrer le début du
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 12:24
tu peux montrer le début du dpm de http://www.cinehorizons.net/cap.jpg stp ?
as tu bien vérifié les ' dans ton code qui ne sont pas les même que dans le forum.
Voici le début du dpm :
Permalien Soumis par Stevenp le 26 Juin, 2012 - 13:01
Voici le début du dpm : http://www.cinehorizons.net/cap4.jpg
oui j'ai bien vérifié les ' dans mon code et je n'ai pas noté d'erreur
C’est étonnant qu’il y ai ca
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 14:22
C'est étonnant qu'il y ai ca dans $content['field_date_de_debut'], tu peux faire un dpm($content); stp ?
Sinon reprends le code de
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 14:24
Sinon reprends le code de tout à l'heure et ajoute des cotes autour de [0] soit ['0'] après ['und']
J’ai rajouté les ’ et je me
Permalien Soumis par Stevenp le 26 Juin, 2012 - 14:34
J'ai rajouté les ' et je me retrouve dans le même cas de figure que => http://www.cinehorizons.net/cap2.jpg
Pour le dpm $content
http://www.cinehorizons.net/cap5.jpg
Pour recadrer les choses
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 14:38
Pour recadrer les choses $content[‘#object’]->field_date_de_sortie[‘und’][0] te renvoyait quoi ?
Dsl mais c'est un peu dur à distance =/
cette ligne de code me
Permalien Soumis par Stevenp le 26 Juin, 2012 - 15:13
cette ligne de code me renvoie : http://www.cinehorizons.net/cap2.jpg
Ne t'excuses pas, c'est vraiment sympa de ta part de consacrer de ton temps pour m'aider !
C’est devel qui n’arrive pas
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 15:16
C'est devel qui n'arrive pas à faire un dpm du field, essaye de prendre la dernière version de devel je crois qu'ils ont résolu le problème.
J’ai pourtant téléchargé la
Permalien Soumis par Stevenp le 26 Juin, 2012 - 15:23
J'ai pourtant téléchargé la dernière version :s (7.x-1.3)
=/ J’essaye de te répondre
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 15:28
=/ J'essaye de te répondre dès que je peux, essaye de jouer avec les variables dont on parle depuis le début tu vas bien finir par récup ce que tu veux =)
Peux tu faire un var_dump o
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 16:08
Peux tu faire un var_dump o lieu d'un dpm pour la variable qui fini par ['und'][0] ?
En faisant ce que tu me dis
Permalien Soumis par Stevenp le 26 Juin, 2012 - 16:15
En faisant ce que tu me dis (var_dump($dateexploser);) j'obtiens ce message :
array(1) { [0]=> string(0) "" }
Nan pas de $dateexploser de
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 16:21
Nan pas de $dateexploser de $content[‘#object’]->field_date_de_sortie[‘und’][0]
var_dump($content[‘#object’]->field_date_de_sortie[‘und’][0])
Ah ok, là ça me renvoi : NULL
Permalien Soumis par Stevenp le 26 Juin, 2012 - 16:27
Ah ok, là ça me renvoi : NULL
Et tu es sur de l’avoir
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 16:29
Et tu es sur de l'avoir renseigné quand tu as créé ton contenu ?
renseigné ? c’est à dire ? :s
Permalien Soumis par Stevenp le 26 Juin, 2012 - 16:32
renseigné ? c'est à dire ? :s
La c’est les champs d’un type
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 16:36
La c'est les champs d'un type de contenu "film", quand tu as créé ton film, tu as bien rempli ce champ date qu'on essaye d'afficher ?
Bien sur, je t’ai envoyé un
Permalien Soumis par Stevenp le 26 Juin, 2012 - 16:44
Bien sur, je t'ai envoyé un mp pour te donner l'url de la page du site, peut-être que cela peut t'aider
Fais un dpm de $node plutôt
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 16:51
Fais un dpm de $node plutôt que $content
dpm($node);
Voilà, tu peux voir ça
Permalien Soumis par Stevenp le 26 Juin, 2012 - 16:56
Voilà, tu peux voir ça directement sur le lien que je t'ai donné en mp
Il ne faudrait pas plutôt
Permalien Soumis par Stevenp le 26 Juin, 2012 - 16:57
Il ne faudrait pas plutôt utiliser "field_date_de_sortie['und'][0]['value']" ?
Il y a un value dans
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 17:03
Il y a un value dans l'array ?
Je vois toujours null, c’est
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 17:03
Je vois toujours null, c'est ce que renvoi le dpm de $node ? Tu vides le cache à chaque fois pour être sur ?
cela me renvoi un bloc
Permalien Soumis par Stevenp le 26 Juin, 2012 - 17:10
cela me renvoi un bloc dépliant :
http://www.cinehorizons.net/cap7.jpg
Oui tu peux voir un "value" dans la capture
En effet il y en a un, tu
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 17:12
En effet il y en a un, tu peux le rajouter alors pour récup notre variable =) ['und'][0]['value']
je fais quoi ensuite ? j’ai
Permalien Soumis par Stevenp le 26 Juin, 2012 - 17:21
je fais quoi ensuite ?
j'ai testé
var_dump($content['#object']->field_date_de_sortie['und'][0]['value']);
qui me renvoi toujours un "NULL"
ainsi que :
dpm($content['#object']->field_date_de_sortie['und'][0]['value']);
n'affiche rien
et :
dpm($dateexploser);
me renvoi toujours => http://www.cinehorizons.net/cap2.jpg
ce n’est pas $content mais
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 17:25
ce n'est pas $content mais $node qu'il faut que tu utilises:
$node->field_date_de_sortie[‘und’][0][‘value’]
j’ai fais un
Permalien Soumis par Stevenp le 26 Juin, 2012 - 17:40
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']);
?
Ouaip ! Change le
Permalien Soumis par garnett2125 le 26 Juin, 2012 - 19:33
Ouaip ! Change le
ça fonctionne :D Un grand
Permalien Soumis par Stevenp le 27 Juin, 2012 - 11:26
ça fonctionne :D
Un grand merci à toi, c'était vraiment sympa de m'aider autant !
Pas de soucis ! Tu peux
Permalien Soumis par garnett2125 le 27 Juin, 2012 - 11:42
Pas de soucis ! Tu peux passer l'issue en résolue stp ?
Un exemple d’un dpm fait sur
Permalien Soumis par garnett2125 le 25 Juin, 2012 - 15:42
Un exemple d'un dpm fait sur un $form:
http://cl.ly/1N0G352o13330b003g0O