Refresh für alle Datensätze
am 09.10.2009 - 08:27 Uhr in
Hallo,
ich habe mit Drupal eine Datenbankfrontend gebaut, das mit einem eigenen Inhaltstyp für jede Person bei der Eingabe des Geburtsdatums das entsprechende heutige Alter berechnet. Hierfür war mir das Modul Computed Fields sehr hilfreich, denn ich brauchte nur noch den gültigen php-Code für das Feld zur Berechnung des Alters eintragen.
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;
Leider erneuert sich die Berechnung des Alters nicht, wenn die Erstellung des Datensatzes einen Tag oder länger zurückliegt. Erst, wenn ich den angelegten Datensatz erneut speichere, wird das Alter richtig und neu berechnet. Dies ist aber bei einigen Tausend Daten nicht praktikabel.
Wie kann ich also erreichen, dass automatisch oder per auszulösender Aktion alle Datensätze in einem Rutsch neu gespeichert werden?
Renardo
- Anmelden oder Registrieren um Kommentare zu schreiben
Alter
am 09.10.2009 - 08:55 Uhr
Moin.
Das Alter einer Person ist ein dynamischer Wert, der für gewöhnlich nicht gespeichert wird.
Warum berechnest Du das Alter nicht einfach bei der Anzeige des Inhalts? Dann benötigst Du auch computed_field nicht und der Wert ist immer korrekt.
computed_fieldist nämlich dafür gedacht, zu speichernde Werte aufgrund diverser anderer Daten zu berechnen, nicht um berechnete Werte anzuzeigen.
hth,
Stefan
--
sei nett zu Deinem Themer
Wir brauchen Deine Stimme für die DrupalCon 2010 oder 2011 in Berlin!
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Dynamische Altersberechnung
am 09.10.2009 - 09:53 Uhr
Warum berechnest Du das Alter nicht einfach bei der Anzeige des Inhalts?
Klingt logisch, jedoch weiß ich nicht, wohin ich genau welchen Code schreiben müsste. Hier im Forum fand ich zu dieser Frage leider nicht viel.
Ich habe einen Inhaltstyp Person und das Feld geboren. Wie könnte ich konkret vorgehen, um das Alter dynamisch zum aktuellen Tag zu berechnen.
Renardo
Alter berechnen
am 09.10.2009 - 10:02 Uhr
Ich habe einen Inhaltstyp Person und das Feld geboren. Wie könnte ich konkret vorgehen, um das Alter dynamisch zum aktuellen Tag zu berechnen.
Du kannst Dir für jeden Inhaltstypen ein eigenes Template erstellen (siehe dazu auch Core templates and suggestions).
In Deinem Fall wäre dies also eine Datei namens node-person.tpl.php (auf Basis der node.tpl.php).
Dort fügst Du dann an der gewünschten Stelle den Code zur Berechnung des Alters ein und gibts ihn auch gleich aus:
<?php
$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 */
print '??? - negative age.';
}
if (($diff > 0) && (date('z',$now) < date('z',$then))) {
$diff --;
}
print $diff;
?>
hth,
Stefan
--
sei nett zu Deinem Themer
Wir brauchen Deine Stimme für die DrupalCon 2010 oder 2011 in Berlin!
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
Dynamische Altersberechnung
am 09.10.2009 - 10:40 Uhr
Danke Sefan,
das wird mir bestimmt weiterhelfen. Letztlich bliebe dann nur noch die Frage offen, ob ich es bei einem View auch themen muss oder hier noch anderer Weg möglich ist?
PS:
Was hältst Du eigentlich von der Idee, Drupal als Datenbankfrontend einzusetzen? Ich hatte lange gezögert und komme nun doch zügig voran.
Renardo
-------
Wer Recht hat, lebt gefährlich...
custom field
am 09.10.2009 - 12:20 Uhr
das wird mir bestimmt weiterhelfen. Letztlich bliebe dann nur noch die Frage offen, ob ich es bei einem View auch themen muss oder hier noch anderer Weg möglich ist?
Views custom field.
Das gibt Dir alles aus, was Du haben möchtest (naja, fast alles).
Was hältst Du eigentlich von der Idee, Drupal als Datenbankfrontend einzusetzen? Ich hatte lange gezögert und komme nun doch zügig voran.
Ich versteh den Zusammenhang nicht wirklich. Drupal *ist* im erweiterten Sinne ein Frontend für in Datenbanken abgelegte Daten.
Wenn Du das im Sinne von "Verwaltung bestimmter Adressdaten" meinst (Beispiel), dann ist dies nur ein spezieller Anwendungsfall von Drupal. Also eigentlich nichts Ungewöhnliches.
Stefan
--
sei nett zu Deinem Themer
Wir brauchen Deine Stimme für die DrupalCon 2010 oder 2011 in Berlin!
Tipp: Beachte die Verhaltensregeln des DrupalCenter.
format_interval
am 09.10.2009 - 12:55 Uhr
Um eine vergangene Zeitperiode auszugeben, gibt es übrigens die Funktion: http://api.drupal.org/api/function/format_interval/6
vg
--
md - DrupalCenter.de
mdwp*
vg
md - DrupalCenter.de
mdwp* Drupal Consulting & Services