Üdv Mindenkinek!
Barátkozom a Computed Field modullal (úgy néz ki barátok leszünk)
Lehet hogy túl nagy fába vágtam a fejszém rögtön az elején, de olyasmit szeretnék, hogy van 3 mező amiből kell kiszámítani a negyediket, pontosabban a létező háromból csak 2. Ugyanis a b és c mezők közül csak az egyik. Mivel a feladat esetében 10ből 9szer százalékot kell számolni, így annak (ez a c mező) van alapértelmezett értéke, míg a fennmaradó 1 esetben fix összeggel kell számolni (ez a b mező).
Külön-külön végzi a dolgát de így nyakatekerten csak dobja a hibát. Tudom ez csak notice, de akkor is! Rákeresve azt találtam, hogy ez azért van mert az egyik (vagy másik) mező a mentéskor üres, azaz nincs értéke. És valóban, ha a fixet (b) is ellátom értékkel akkor nincs hibaüzi. Azt megtehetném, hogy annak is adok értéket pl. 0-át, de nem hiszem el, hogy nem lehetne ezt szebben megoldani. Akkor ezek szerint lehet a feltételem sem jó?:
and you'll need to wrap your computed code with a conditional check.
$a = $entity->field_a[LANGUAGE_NONE][0]['value']; $b = $entity->field_b[LANGUAGE_NONE][0]['value']; $c = $entity->field_c[LANGUAGE_NONE][0]['value']; $d = 0; if(!empty($entity->field_b[LANGUAGE_NONE][0]['value']{ $d = $b; } else { $d = (($a * $c) / 100); }
előre is köszönöm!
szintaktikai hiba?
Csak így első ránézésre, onnan nem hiányzik az if záró zárójele?
Ne használjátok a computed field-et,
akinek van már annyi tapasztalata php-ban hogy computed field-et használjon, az írjon rá modult.
Első nyomos érv mellette hogy nem lehet debug-olni ha valami nem működik, a másik hogy php kódot soha nem írunk közvetlen bele az oldalba.
Én is találkoztam hasonló dologgal, ahol hasonló volt a feladat hogy több field értékét figyelembe véve egy sokadikat kitölteni. Annyival még kiegészítettem hogy Field permissions modult használva csak az adminnak tettem láthatóvá a "kiszámítandó" field-et és mondjuk minden node mentéskor kiszámítom a tartalmát.
További tanács, hogy ha field-kel kell foglalkoznunk, akkor használjuk az Entity api-t e tutorial alapján meg lehet érteni és sokkal gyorsabban és egyszerűbben tudod a field-ed tartalmát manipulálni.
Drupal developer at Cheppers
apró kiegészítés
Apró kiegészítés:
Ha valahol az oldalon mégis szükség van közvetlen PHP kód megadására (nem csak a Computed Fieldnél), akkor érdemes függvényként megírva egy külön modulban összegyűjteni, majd az oldalon csak a függvényt meghívni. Javít a debuggolhatóságon, fatal errornál könnyebben javítható (nem kell adatbázisban átírkálni a kódot) stb.
Ezt a kis apró ötletet anno Kléri Bálint mutatta nekem a Debreceni Drupal Napokon, kritikus helyzetben többször segített már.
Választ szeretnél? - Új kérdés, új téma - Tesztoldal - Trollkezelés - Frissítés
Computed filed, ha jol tudom
Computed filed, ha jol tudom mindig kiszamolja magat, ami azert nem egy jo dolog.
Inkabb keszits egy fieldet ahol a kiszamolt erteket tarolni akarod, a kodot meg ird pl. hook_node_presave-be.
Igy nem szabad field erteteket kinyerni, van erre core fuggveny:
https://api.drupal.org/api/drupal/modules%21field%21field.module/functio...
ha nem tetszik az entity module.
---
http://drupalaton.hu
kedves mindenki
engedjétek meg, hogy így egyben reflektáljak:
@Edith: csak itt maradt le, a feltétel működik (a tesztoldalon)
@segi: az első érved elfogadom a másodikkal nem teljesen értek egyet, de ennek kifejtése túlmutatna e témán. Mindenesetre a tanácsod igyekszem megfogadni.
@nevergone: köszönöm, logikusnak és hasznosnak tűnik.
@york: csak mentéskor és frissítéskor "computingol", egy a feladat későbbi részénél ez így nagyon hasznosnak tűnt. Van egy kötegelő modul is hozzá ha nem akarná valaki egyesével újraszámíttatni. Ezt a részt
nem vágom teljesen, de ez egyéb hiányosságaimnak tudható be. mindenesetre szem előtt tartom - most, hogy már a drupalista útra lettem terelve - a továbbiakban ezt is.
Az Entity modul telepítése előtt addig a részig olvastam, hogy kifejezetten back-end és más modulok függősége melyek entitásokkal dolgoznak, így megvan de még nem ismerem.
Nem tudom, hogy a feldobott kérdésem okafogyottá válna-e ha az általatok javasolt módon intézném el (meg fogom tudni, csak nekem ehhez kicsit több idő kell), azért azon még tűnődök, hogy a field-es modulok közül elég előkelő helyet foglal el - letöltési stat. szerint - és lehet, hogy a készítője elfogult volt de tetszett ahogy "lesvájcibicskázta". Köszönöm még egyszer a jó tanácsokat, igyekszem megfogadni!
Tényleg mindenféle UI-on való PHP-s kódírást kerülj
Azzal, hogy "Első nyomos érv mellette hogy nem lehet debug-olni ha valami nem működik, a másik hogy php kódot soha nem írunk közvetlen bele az oldalba" ("az oldalba" gondolom inkább "az adatbázisba" akart lenni)? Pedig ennek minden szava igaz. :)
Legundormányabb és legkarbantarthatatlanabb dolog az adatbázisba bepasszírozni a bármilyen PHP-kódot, és a UI-on szerkeszteni egy PHP-kódot. Az egyszerűen nem oda való.
Én is csináltam régen, hogy magát a függvényt a modulom fájljába írtam, és legalább a UI-ra csak magát a függvényhívást raktam (mármint a PHP-s textarea-ba, pfujj), így egyetlen sorral elintézhető volt, és jóval karbantarthatóbbnak látszott, de aztán rájöttem, hogy ha már modul kódjába írogatok, akkor ez a megoldás IS totálisan értelmetlen, amennyiben van mondjuk az adott feladatra normális API. :)
Szóval kényszermegoldásként, gyors tűzoltásra, fogszívva még valamelyest tolerálható megoldás, de egyébként nem. :)
Komolyan, csak több a probléma az ilyen PHP-s textareakkal, mint a haszon. Kártékony, azzal együtt, hogy a "hű, de jó, megoldottam a feladatot" hamis illúzióját kelti. :)