hook_form_alter és hook_nodeapi függvények használata

gyuxton képe

Sziasztok.
Kérdésem lenne a hook_form_alter és a hook_nodeapi függvényekkel kapcsolatban. Meglevő CCK image field beviteli eszközt szeretnék összekapcsolni saját modullal, csak nem nagyon értem hogyan . Tehát a kérdésem az lenne, hogy a
1. modulomat kapcsolom tartalom típushoz vagy a
2. saját formomhoz kapcsolok CCK elemet
Ha valakinek lenne kis példája arra, hogy hogyan tudom ezt megtenni, azt megköszönném. Valaki eltudná mondani hol kell meghívni ezeket a függvényeket és hogyan is működnek?
Nagyon szépen köszönöm a segítséget!

Drupal verzió: 
gyuxton képe

Kellene egy kis segítség : (
Szóval létrehoztam a saját modulomba egy _form_alter függvényt, amit csak a page_node_form tartalom típusnál jelenik meg. A kódja:

function formproba_form_alter(&$form, $form_state, $form_id) {
if ($form_id=='page_node_form') {
$form['workflow']['upload'] = array(
'#type' => 'select',
'#title' => t('Attachments'),
'#options' => array(t('Disabled'), t('Enabled')),
);
}
}

Mikor felviszem, akkor látom is, de mikor megnézem a tartalmat, akkor a „Rating: Unrated” feliratot kapom. Gondolom azért mert nem használtam _nodeapi függvényt.
Ezt a függvényt is megérteném, hogy kell insert, delete, update ágak és azok hívódnak meg amit éppen el akarunk végezni a tartalom típussal.
Kérdésem az lenne, hogy ezt a rendszer minként tárolja?
Tehát nekem mit kell tárolni abban a táblában, amire használom majd az INSERT, DELETE stb kódrészeket?

0
0
gyuxton képe

Addig eljutottam, hogy:

function formproba_form_alter(&$form, $form_state, $form_id) {
if ($form_id=='lakas_node_form') {
$form['workflow']['upload'] = array(
'#type' => 'select',
'#title' => t('Attachments'),
'#options' => array(t('Disabled'), t('Enabled')),
);
}
}

Tehát a lakas_node_form-nál megjelenik a select box.
Valamint az adatbázisba is ment, a következő föggvény szerint:

function formproba_nodeapi($node, $op) {

switch($op) {

case 'load':
$rating = db_result(db_query('SELECT rating FROM {node_example} WHERE vid = %d', $node->nid));
break;
case 'insert':
drupal_set_message('insert!');
db_query('INSERT INTO {node_example} (vid, rating) VALUES (%d, %d)', $node->vid, $node->nid);
break;
case 'update':
drupal_set_message('update!');
db_query('DELETE FROM {node_example} WHERE vid = %d', $node->nid);
db_query('INSERT INTO {node_example} (vid, rating) VALUES (%d, %d)', $node->vid, $node->nid);
case 'delete':
drupal_set_message('delete!');
if (variable_get('formproba_'. $node->type, TRUE)) {
db_query('DELETE FROM {node_example} WHERE vid = %d', $node->nid);
}
break;

}

}

Csak az a baj, hogy ha megnézrem a tartalomnál a bevitt tartalmat, akkor nem jelenik meg a select boksz tartalma az elmentett tartalomnál. Mi lehet itt a gond? Valamit még össze kell rendelni?
Kérem, segítsen valaki: (

0
0
pp képe

gondolom innen a példa: http://api.drupal.org/api/file/developer/examples/nodeapi_example.module/6

Láthatod a végén, hogy van egy view eset is azt is meg kell valósítanod. Gondolom a devel modul fent van, tehát meg tudod nézni a dev load fülnél, hogy visszatölteni sikerült-e az adatokat.

pp

0
0
eMeLA képe

Nemigazán arra valók ezek a függvények ami használni akarod (ha mindent jó értek).

A hook_form_alter-nél a kapott tömbben össze van állítvan állítva form tartalma, amikor ellenőrzi és tárolja majd a program akkor az itt bejövő tömb alapján teszi ezt. Ha egy új select elemet teszel bele, akkor azt nem fogja eltárolni, mivel a bejövő tömbbeb sem volt benne, vagyis egy ilyen itt belerakott új elemnél neked kell gondoskodnod az ellenőrzésről és és tárolásról.

Ezt a $form['submit'][] és a $form['validate'][] elemek bővítésével tudod megtenni (mos hirtelen nem tudom a pontos formáját, mert más a 5.x és más a 6.x-nél, de ha lilistázod a $form tömböt ott biztos van 'submit' érték). Ide az általad létrehozott függvények neveit kell beírni (ha megkeresed a 'submit'-nál szereplő függvényt a forrásban, láthatod mik a paraméterei).
Fontos a sorrend, mert az első lesz meghívva először....

A hook_nodeapi-val meg csínján kell bánni, mert ezek a függvények minden tartalomtípusnál meghívódnak. Szép kis gubancokat lehet vele okozni.

0
0

...mit tudok: http://web.termuves.hu

gyuxton képe

Nagyok köszönöm, hogy válaszoltál.
Szóval a saját modulomat akarom összeilleszteni saját tartalomtípussal. A tartalom típus a képeket jeleníti meg, a saját modulom pedig az adatokat. Ez tartalmaz select boxokat, javascriptet. A legegyszerűbb megoldás érdekelne engem, mert még nem vagyok annyira jártas a Drupal fejlesztésében. Addig eljutottam, hogy a tartalom típus ki kitöltésekor megjelennek a select boxok, bár a javascript nem fut még. Ezeket a formproba_form_alter függvénnyel teszem hozzá a tartalom típushoz, formproba_nodeapi függvényt is lehet úgy fejleszteni, hogy a select tartalmát bemásolja az általam létrehozott MySql táblába és elmentse a node értékét is.(insert, delete, update) Ha jól értem, akkor erre jó a formproba_nodeapi függvény?
De ha megnyitom a tartalmat az Adminisztráció/Tartalomból, akkor nem jelennek meg ezek az értékek. Ezt hogy lehet úgy hozzá rendelni, hogy megjelenten. Valamint a view segítségével ezt, hogy tudom megvalósítani?
Azt is jó megoldás lenne, ha valahogy az egész megjelent tartalom típust a saját modulommal be lehetne másolni a táblába?
Ha tudnál segíteni nagyon hálás lennék, mert pár napja ezen eszem magam.
Köszönöm szépen!

0
0
eMeLA képe

Nem igazán jó az út. Amit te szeretnél, az egy CCK field. Amit itt meg szeretnél oldani, az ott már meg van oldva...

0
0

...mit tudok: http://web.termuves.hu

gyuxton képe

Tudnál valami konkrét dolgot mondani amin el tudok indulni? Nagyon el vagyok már keseredve:(. Ezek a select boxok ajaxosak, egytól függnek.... Valaki azt mondja hogy az bonyolult, jobb ha a _form_alter és a nodeapit függvényeket használom. Tényleg kezdem feladni már... de soka minden megcsináltam segítséggel csak azt kellene összeilleszteni....

0
0
pp képe

Bizony a Drupalban nincs mindenre kész megoldás ;) ilyenkor a "klikk-klikk és kész" nem működik.
Te most jelenleg egy tanuló fázisban vagy, ez sok energiát, zsákutcát, kísérletezést jelent. Sose fogod látni a végét az alagútnak és mindig kétségbe leszel esve. Ezzel az érzéssel együtt kel élni, de hidd el lesz megoldás.

pp

0
0
pp képe

De bizony arra valók és a valaki aki ajánlotta az én voltam. ;)
http://api.drupal.org/api/file/developer/examples/nodeapi_example.module/6

Nincs egyetlen egy jó megoldás sem. A kérdező megye/város összekapcsolást szeretne, ami így konkrétan nincs megvalósítva. Ezt vagy a fent jelzett módon oldja meg, vagy fejleszt egy cck widget-et, vannak ugyan cck megvalósítások a problémára, de elég gyerekcipőben járnak.
http://drupal.org/project/hierarchical_select
http://drupal.org/project/cck_taxonomy_ssu

A form submittal meg nem tud mit kezdeni, mert nem tudja, hogy melyik node-hoz kell kapcsolnia az adatokat, az szerintem egy totál zsákutca.

pp

0
0
gyuxton képe

Köszönöm szépen.
Ismertem a probamodult, csak nem jutottam előrébb vele. Megjelennek a SELECT-ek, bemásolom az adatbázisba a tartalmukat, de hogy jelenítem meg?
Látom, hogy a CCK modul szöveges legördülő listáján van olyan rész, hogy PHP-val lehet feltölteni a lista elemeit. Ha ide bemásolom a kódot, ami visszaad egy tömböt, akkor ezzel megtudom csinálni? (+ AJAX)
Valaki leírná, hogy hogyan működik az fent említett fét függvény? Megjeleníteni megtudom, de mit kell elmenten az adatbázisba? A SELECT boxok értékét vagy az egész formot? Köszönöm.

0
0
gyuxton képe

Most már megy a javascript is. Ott álltam meg, hogy a SELECT BOX tartalmát be kell írni az adatbázisba. Ennek kellene valami Drupal függvény, ami a kiválasztott elemeket kiírja egy strinbe. A másik dolog mag az lenne, hogy hogyan lehet szöveget beküldeni a formra? Mert akkor amikor a „load” ág fut le, akkor itt a kiirt szöveget be tudok küldeni a forma. Köszönöm

0
0