Tartalom mentésének megakadályozása adott feltételek esetén

Drufan képe

Üdv!

Az van, hogy egy mezőt kellene validálni, és ha a feltétel nem teljesül, akkor meg kéne akadályozni a tartalom mentését.
Ez így is van akkor, ha a mezőbe a felhasználó visz be adatot, ezt megoldja a Field Validation modul.
Nekem viszont olyan mezőnek az értékét kéne figyelni, ami nem bevitellel történik, ez egy Computed Field mező, illetve van más olyan is, ami nem beviteli mező, de figyelni kéne.
Próbáltam azt, hogy kötelezővé teszem a mező kitöltését és nem jó adat esetén üresen áll, de ez se működik, ha nem beviteli mező, tehát ha nem jelenik meg a tartalom bevitelekor, márpedig a számított mező nem jelenik meg ott.
És még végigjátszottam ilyen próbálkozásokat, hogy azt állítottam be a Computed Field mezőnél, hogy Not null, de hiába üres, akkor se áll le a mentés előtt.

Aztán próbáltam Rules-szal, de, ha az esemény az, hogy Új tartalom mentése, akkor ugyebár mindenképpen ment és majd utána végzi el amit szeretnék, jelen esetben már csak a törlést lehet, de ez nem jó megoldás.
Próbáltam, hogy az esemény az, hogy Tartalom mentése előtt, de akkor semmit se csinál, illetve beállítottam, hogy kötelező legyen mentés előtt az előnézet, akkor működik rá a Megtekintett tartalom esemény, de csak egyszer, tehát utána simán engedi menteni, és nem is akarom azt a nem túl szép előnézetet megjeleníteni (egy bevezető és a teljes együtt).

Próbáltam a Field Conditional States modult, de nem működik számított mezőkkel, tehát hiába egy text mezőre állítom be, nem képes figyelni a számított mezőt, hanem minden esetben, már a beállításnál Ajax hibaüzenet, ha mégis trükkösen elmentem, akkor meg elszáll az egész oldal egy nagy fehér üres oldalt eredményezve.

Szóval: hogyan lehet a mentést megakadályozni, amíg egy nem beviteli mezőben lévő érték nem megfelelő?

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

Szerintem hamarabb megy mint contrib modulok armadajat osszeollozni

1
0
Drufan képe

Már csak programozni kéne tudni hozzá php-ban, és kitanulni, hogyan lehet profin, szabályosan beilleszteni a Drupal környezetbe...

0
0
dongodani képe

4-5-6 év és meg is van. Lehet, hogy mégiscsak gyorsabb modulokkal összekattintgatni?:-)

0
-1
Drufan képe

Mármint megtanulni PHP 4-6 év?

0
0
dongodani képe

Ha gyorsan tanulsz és jó érzéked van a kódoláshoz, akkor hamarabb is mehet a dolog, de ne felejtsd el, hogy mindehhez még a Drupal specifikus dolgokkal is alaposan meg kell barátkozni. 1-2 hónap alatt ez így egyben ritkán szokott összejönni:-).

Csak egy tipp, nekem anno mintha olykor bejött volna, hogy ha direktben nem tudtam validálni egy mezőt, akkor Rules-al(switch-case...stb.) egy közbeiktatott másik, teszem azt logikai mezőt, vagy sima szövegest úgy módosítottam, hogy arra viszont már lehetett validálni. Persze amíg a computed field ki nem hozza a szükséges értéket - azaz még nem áll rendelkezésre - addig validálni sincs mit. Ez az érték meg ugyebár a mentés után áll a rendelkezésre.

Amikor logikailag nem építhető fel egy jó megoldás, akkor célszerű egy másik, alternatív modellt kidolgozni a feladatra és nem küzdeni feleslegesen. Nálam ez legalábbis be szokott válni. Még ha végül meg is lehet oldani a problémát, megéri-e a ráfordított sok időt és energiát? Nekem többnyire nem.

0
0
Drufan képe

Igen, ezt is végigjátszottam, hogy egy másik mező által tudjam ellenőriztetni, de ez is elbukott azon, hogy a Rules csak mentés után vizsgálja érdemben.
Végül nagyon csúnya megoldással megoldottam a dolgot, de mivel ez nem elegáns és nem is profi, nem szemetelem össze vele a fórumot.

Viszont el tudom képzelni, hogy megírni egy php kódsort, ami azt vizsgálja, hogy adott mező értéke (ami nem látszik) megfelel-e a feltételnek és időben is akkor csinálja, amikor kell nekem (tehát nem akkor, mint a validate modul), egy profinak talán csak pár óra.
A Drupalba illesztést meg nyilván csak egyszer kell megérteni és akkor már az is megy.

Szóval neki kell állnom php-zni, mert nem mindegy, hogy ezzel hány napot kínlódtam, és mennyi lett volna, ha simán megvalósítom, amit én akarok.

1
0
szantog képe

Ez nem fog menni saját kód nélkül..
Az a baj, hogy a computed_field mező értéke _node_presaveben számolódik, neked meg form validáláskor kell ugyanaz az érték. A form validálás meg jóval korábban történik, mint a _node_presave.
A dolog szép része: Hogyha ezt meg tudod csinálni, nem lesz többé szükséged computed_field-re.

1
0

----
Rájöttem, miért kérdezek olyan ritkán a drupal.hu-n. Amíg szedem össze az infokat a kérdéshez, mindig rájövök a megoldásra.

Drufan képe

Akkor jól sejtettem, hogy itt a „mikorok" miatt nem működnek a dolgok.

Az ezt meg tudom csinálni alatt azt érted, ha PHP-ban csinálok egy kódot, amit saját modulként telepítek a Drupal-ba, vagy másra gondoltál?

És a Rules mentés előtti eseménye mikor érvényesül? Mert ha szó szerint nézem a jelentését, akkor éppen erre lenne szükségem, azonban hidegen hagyja minden. Ráadásul akkor van egy olyan feltétel lehetőség is, ezt az esemény választva, hogy mentett node, meg nem mentett node, amit nem is tudok értelmezni, hiszen ha mentés előtti az esemény, akkor hogy jön ide a mentett node? Hacsak nem egy tartalom szerkesztésénél, amikor már van a node-ban mentett mező is, és van még ki nem töltött.

0
0