computed field - Notice: Undefined index: und eval()

balazsgabi képe

Ü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!

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

<?php
if(!empty($entity->field_b[LANGUAGE_NONE][0]['value']{
?>

Csak így első ránézésre, onnan nem hiányzik az if záró zárójele?

0
0
segi képe

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.

2
0

Drupal developer at Cheppers

nevergone képe

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.

0
0
york képe

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.

1
0
balazsgabi képe

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

Inkabb keszits egy fieldet ahol a kiszamolt erteket tarolni akarod

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!

0
0
Sk8erPeter képe

@segi: az első érved elfogadom a másodikkal nem teljesen értek egyet

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ó.

@nevergone: köszönöm, logikusnak és hasznosnak tűnik.

É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. :)

0
0