HTML

Laza Bálint Drupal naplója

Archív Drupal-blog.

Kontakt

Friss topikok

Linkblog

Életkor kiszámítása születési dátumból

2009.06.02. 16:04 Laza vagyok

Gyakran lehet szükségünk arra, hogy születési dátumból életkor számoljunk. (Például ha társkereső oldalt csinálunk, vagy ha társkereső oldalt csinálunk.)

Eléggé szánalmas, ha a regisztrációkor a felhasználó születési dátuma mellett bekérjük az életkorát is :) A regisztrációkor ezért hozzáadunk még egy CCK mezőt, de nem akármilyent: Computing Fieldet.

Ez egy külön modul, letölthető itt: http://drupal.org/project/computed_field

Ezután már hozzá tudjuk adni a Computed típusú mezőt a profil tartalmunkhoz és a regisztrációhoz. Esetemben a profile node típushoz a kor mezőt.

Ezt itt tudjuk beállítani: admin/content/node-type/profile/fields/field_kor

Az általános beállításokban a Computed code: űrlapba kell a kódot írnunk mely a számítást végrehajtja. Szúrjuk be a következő kódot (ahol field_szuletesi_ido cserélendő annak a fieldnek az azonosítójára, amelyik a születési dátumot kéri be!)

if (!$node->nid) node_save($node);

  $dob = $node->field_dob[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;


Ahhoz, hogy meg is jelenjen valami, kattintsuk be, hogy display this field! És a display mezőbe írjuk a következő kódot:

$display = $node_field_item['value']; Figyeljünk rá, hogy a data type integer legyen, ha úgy szeretnénk dolgozni vele a továbbiakban, hogy pl. viewsben szűkíthető legyen vele az életkor... Mint a kódból látható, ez a művelet akkor hajtódik végre, ha elmentjük a nodeot, tehát utólag, már felvitt nodeokra magától nem fog kiszámolódni :)

A kód forrása: http://drupal.org/node/142151#comment-986330

6 komment

Címkék: drupal cck computed field

A bejegyzés trackback címe:

http://laza.blog.hu/api/trackback/id/tr961159388

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Lali_ 2009.06.02. 20:06:49

Hú, köszi, ez nagyon hasznos tipp. Asszem a közeljövőben nagy hasznát fogom venni, ennél a pontnál pont megakadtam :)

Laza vagyok 2009.06.03. 08:36:03

@Lali_: Örülök, hogy segíthettem :)

Paal 2009.06.10. 14:28:00

Üdv,

Mi a különbség ha így viszed fel, és nem külön kéred be az életkorát (azon kívül, hogy megspórolsz neki egy beviteli mezőt)? Mert azt írtad, hogy a mentés pillanatában számolja ki, és menti el. Vagyis ha 2 év múlva megnézem, akkor sem fog az életkora változni, nem?

Laza vagyok 2009.06.10. 15:57:49

Hm. Azt hiszem ott a pont, és ezt még át kell gondolnom :) Érdekes, hogy jó pár szálat megnéztem ezzel kapcsolatban, és ez sehol sem vetődött fel :)

Jelen esetben tehát csak akkor lesz X év múlva is a helyes dátum, ha valamikor valamiért frissíti a nodeot... Esetleg erre kell írni valamit, hogy nézegesse, de az meg elég felesleges munkának tűnik...

Laza vagyok 2009.06.10. 16:05:45

@Paal: azt hiszem a megfelelő születésnap megoldást inkább ez a modul nyújtja: drupal.org/project/birthdays

Lali_ 2009.06.14. 16:45:44

@Laza vagyok: Csak azzal egy gond van, hogy az Profile alapú és ha Content profile-al dolgozik az ember, akkor jobb ha CCk alapú. De azért meglesem

Esetleg lehet, olyan trigger+actiont csinálni, ami mondjuk havonta lefut és frissíti a nodeot