[gelöst] Alter berechnen mit Drupal 7 und Computed Field
am 09.03.2013 - 09:59 Uhr in
Ich hatte unter Drupal 6 mit folgenden Code das Alter einer Person berechnet. Hierfür verwendete ich das CCK-Feld: field_geboren_am
if (!$node->nid) node_save($node); $dob = $node->field_geboren_am[0]['value']; $now = time(); $then = strtotime($dob); $diff = date('Y', $now) - date('Y', $then); if($diff < 0) /* ideally you want to prevent this from happening */ echo '??? - negative age.'; if(($diff > 0) && (date('z',$now) < date('z',$then))) $diff --; $node_field[0]['value'] = $diff;
Wie muss ich diesen Code verändern, damit er auch unter Drupal 7 funktioniert. Ich habe schon vieles ausprobiert, bin aber mit PHP unter Drupal 7 noch unsicher.
Wäre schön, wenn mir jemand helfen könnte.
Renardo
- Anmelden oder Registrieren um Kommentare zu schreiben
Schau mal hier:
am 09.03.2013 - 10:53 Uhr
Schau mal hier: http://www.drupalcenter.de/node/44810
Don't code today what you can't debug tomorrow
Ariya Hidayat
Alter berechnen mit Drupal 7 und Computed Field
am 09.03.2013 - 12:00 Uhr
Hallo,
Schau mal hier: http://www.drupalcenter.de/node/44810
diesen Link kannte ich bereits. Der dort empfohlene Code:
$entity_field[0]['value'] = ( time() - strtotime($entity->field_dob[LANGUAGE_NONE][0]['value']) ) / 86400 / 365.25;
funktioniert leider nicht auf den Tag genau. Ist auch klar, denn der Divisor 365,25 stellt hier nur einen Näherungswert für die Schaltjahre dar.
Gibt es vielleicht noch andere Hinweise.
Danke
Renardo
Wenn Du eine genauere
am 09.03.2013 - 12:43 Uhr
Wenn Du eine genauere Schaltjahrberücksichtigung willst wird es halt von der Progamm-Logik her komplizierter.
An der prinzipellen Vorgehensweise ändert das nichts.
Ein Beispiel findest Du hier: http://www.php-resource.de/forum/showthread/t-77760.html
Don't code today what you can't debug tomorrow
Ariya Hidayat
Alter berechnen mit Drupal 7 und Computed Field
am 09.03.2013 - 12:51 Uhr
Hallo,
danke für den Hinweis. Am liebsten jedoch würde ich gerne den folgenden unter Drupal 6 funktionierenden Code verwenden, nur eben an Drupal 7 angepasst.
if (!$node->nid) node_save($node); $dob = $node->field_geboren_am[0]['value']; $now = time(); $then = strtotime($dob); $diff = date('Y', $now) - date('Y', $then); if($diff < 0) /* ideally you want to prevent this from happening */ echo '??? - negative age.'; if(($diff > 0) && (date('z',$now) < date('z',$then))) $diff --; $node_field[0]['value'] = $diff;
Wie müssen hier die Variablen geändert werden, damit die Altersberechnung auch in Drupal 7 funktioniert?
Renardo
kann es leider jetzt nich
am 09.03.2013 - 13:11 Uhr
kann es leider jetzt nich testen, aber bei den Feldern ist ist der Language-Index dazugekommen und das computed field hat sich (wie in der verlinkten Anleitung beschrieben) auch geändert.
Somit müsste der Code so aussehen - wie gesagt nicht getestet
if (!$node->nid) node_save($node);
$dob = $node->field_geboren_am[$node->language][0]['value'];
$now = time();
$then = strtotime($dob);
$diff = date('Y', $now) - date('Y', $then);
if($diff < 0) /* ideally you want to prevent this from happening */ echo '??? - negative age.';
if(($diff > 0) && (date('z',$now) < date('z',$then)))
$diff --;
$entity_field[0]['value'] = $diff;
Don't code today what you can't debug tomorrow
Ariya Hidayat
Dieser Code
am 09.03.2013 - 18:23 Uhr
funktioniert leider nicht. Schade.
Wie gesagt mit Drupal 6 funktioniert es so:
if (!$node->nid) node_save($node);
$dob = $node->field_geboren_am[0]['value'];
$now = time();
$then = strtotime($dob);
$diff = date('Y', $now) - date('Y', $then);
if($diff < 0) echo '??? - negative age.';
if(($diff > 0) && (date('z',$now) < date('z',$then))) $diff --;
$node_field[0]['value'] = $diff;
Mit Drupal 7 lässt sich so das Alter nicht berechnen. Was sollte hier geändert werden?
Danke
Renardo
Hab es jetzt doch noch
am 09.03.2013 - 19:02 Uhr
Hab es jetzt doch noch getestet:
$dob = $entity->field_geboren_am[LANGUAGE_NONE][0]['value'];
$now = time();
$then = strtotime($dob);
$diff = date('Y', $now) - date('Y', $then);
if($diff < 0) /* ideally you want to prevent this from happening */ echo '??? - negative age.';
if(($diff > 0) && (date('z',$now) < date('z',$then)))
$diff --;
$entity_field[0]['value'] = $diff;
muss ins computed field
Ich hoffe es klappt jetzt - bei mir schon auf's erste.
Die erste if-Anweisung habe ich aber jetzt aber nicht überprüft...
Gruß
Christian
Don't code today what you can't debug tomorrow
Ariya Hidayat
Super, jetzt hat 's auch
am 09.03.2013 - 19:04 Uhr
bei mir geklappt!
Gut, dass es dieses Forum gibt und Leute wie Dich, die echt helfen.
Danke
Renardo