Computed field kódok napi újrafuttatása

d.pryke képe

Sziasztok!

Van egy "ember" nodetípusom aminek egy date fielddel meg lehet adni a születési dátumát.
Mellé egy computed field mező kiszámolja a kort.
A computed fieldnek 2 működési módja van:
1., a computed fieldben levő php kód futásának eredményét a node beküldésekor eltárolja az adatbázisban
2., a php kódot minden node megtekintékor lefuttatja és az eredményét megjeleníti

Látszik, hogy mivel a kor függ az aktuális adátumtól, ezért nem jó az adatbázisban tárolós verzió csak az "on the fly" phpkódfuttatásos megoldás.

De ekkor viszont a views modul nem látja a computed filedet mert nincs tárolva cck mezőként az adatbázisban. Viszont nekem nagyon kellene, hogy a cck is lássa.

Azt találtam ki, hogy az 1., azaz az eltárolós megoldást kellene választani, de minden nap mondjuk hajnali 0 óra 1 perckor le kellene futtatni a computed field kódokat és eltárolni az értékeket. Ezt vajon hogyan lehet megoldani, mennyire rázós ezt leprogramozni? Van erre kész megoldás? Van valami globális node szerkesztésre megnyitó majd a nodeot változatlanul elmentő (tehát computed field kód lefuttató) modul? :S

Melyik modulhoz, modulokhoz kapcsolódik a téma?: 
Drupal verzió: 
pp képe

Nem lehet, hogy a views is tud számolni? Tehát a szűrési feltételnél is tudsz ilyet betenni?

pp

0
0
d.pryke képe

Megnéztem, csak akkor jelenik meg a mezők közt a viewsben, ha a computed fieldre beállítom, hogy tárolja. Amint kiveszem onnan a pipát, a views már nem kínálja fel a fieldet a megjeleníthető fieldek közt.

0
0
Illyés Edit képe

Van valami globális node szerkesztésre megnyitó majd a nodeot változatlanul elmentő (tehát computed field kód lefuttató) modul? :S

Nincs, neked kell megírni. node_load() és node_save() függvényekre keress rá, ezeket kell meghívnod a modulodneve_cron() függvénnyel.

De szerintem ez mehet sminkbe is. Ez itt nem egy "valódi" adat, csak a date meződben tárolt információ egy másfajta megjelenítése, nem sok értelme van emiatt az adatbázist kétszer dolgoztatni.

0
0
d.pryke képe

Még nem írtam modult, tán itt az ideje, ha tényleg nincs más lehetőség :)
köszönöm a tippet!

0
0
aboros képe

minek az???

kell egy date típusú cck mező. ott állíthatja be vivien, hogy mikor született.
ezt a mezőt sminkeled egy előfeldolgozóval vagy egy saját .tpl.php -val, amiben a mai dátum és a mező eredeti értéke alapján írsz ki egy értéket.

a (sites/all/modules/)cck/theme könyvtárban találsz egy csomó .tpl.php filet, neked a content-field.tpl.php fog kelleni, azt másold át a sminked mappájába, nevezd át content-field-field_TEMEZŐDNEVE.tpl.php -ra és kedvedre módosítsad a tartalmát.

a nézeteidben (views generálta oldalak, blokkok, akármik) nem fogja használni a drupal ezt a sablont, ezért egy ugyanilyet kellene még készítened views-view-field-TEMEZODNEVE.tpl.php néven is. (lehet, hogy ennek kicsit más lesz a tartalma, de az elv ugyan az)

ahhoz, hogy lássa és használja is a drupal ezeket a sablonokat, miután létrehoztad őket, ürítened kell a smink regisztrációs tárat az ismert módszerek valamelyikével.

én először computed field nélkül próbálnám ezt megoldani, nem lehetetlen, sőt talán még jobb is lesz így az egész szisztéma.

0
0

-
clear: both;

d.pryke képe

neki is álltam a leírásod alapján, aztán rájöttem, hogy azért nem lesz jó, mert azon kívül, hogy a view-ben a táblázatban ott kell lennie a kornak, azon kívül ugyanitt egy felfedett szűrővel szűrnöm kellene rá. Tehát: listázza azokat, akiknek a kora x és y közt van. Ha viszont tárolni valójában csak date-ként tároljuk, akkor arra date from és date to módon tudok felfedetten szűrni, tehát akkor a usernek kell fejben kikalkulálnia, hogy milyen dátumtól milyen dátumig kell szűrnie, hogy pont azokat a korúakat kapja, ez pedig nem olyan ergonómikus.

0
0
aboros képe

semmi akadálya, hogy a felfedett szűrőben felülírjad a megjelenő értékeket ám.
és akkor lehet from 42 éves to 43 éves.. a szűrőben "adatként" attól még a dátum szerepel, hogy x years ago.

de egy cron típusú modul megírása még nulla modulírási ismerettel (php azért kelleni fog) se tart tovább egy fél napnál szerintem. ;)

0
0

-
clear: both;