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ó:
Kellene egy kis segítség :
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?
Addig eljutottam,
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: (
view op-ot használd
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
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Nemigazán arra valók ezek a
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.
...mit tudok: http://web.termuves.hu
Nagyok köszönöm, hogy
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!
Nem igazán jó az út. Amit te
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...
...mit tudok: http://web.termuves.hu
Tudnál valami konkrét dolgot
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....
Ne add fel
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
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Nézd meg a példát
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
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Köszönöm szépen. Ismertem a
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.
Most már megy a javascript
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