Add/Edit Views form módosítása

MrPrise képe

Sziasztok!
Szeretnék egy egyszerűsített felületet új nézet létrehozásához ill. a meglévők módosításához. Ehhez a gyári form bizonyos részeit el szeretném rejteni. Az elrejtett elemekhez tartozó beállításokat kódból adnám meg.
Első próbálkozásom a hook_form_alter() volt. Ezzel szépen el tudtam rejteni a basic-info, block-info és page-info fieldseteket, viszont az argument és az exposed filters fieldseteket nem.
Teljesen úgy néz ki mintha az én form_alter-em hívása után kerülnének a formra. Ezért elkezdtem játszani a module-ok weight értékeivel is (system tábla), de nem változott semmi.
Közben nézelődtem a views module-ban és úgy láttam a views_edit_view() generálja a formot.
Próbaként módosítottam, kikommenteztem pár dolgot, de az Arguments fieldset-et itt sem tudtam eltüntetni, csak a nyomógombot.
Amit szeretnék azt szerintem több módon is meg lehetne oldani. Egyik mód az lenne ha saját formomra rá tudnám pakolni az add/edit views form azon részeit amelyek kellenek, aztán az erről a formról érkező adatokat kiegészíteném a saját default-jaimmal, így rendelkezésre állna az az adathalmaz amit a gyári add/edit views form gyűjt össze és ezt már a hagyományos módon tudnám tárolni, használni.
Lényegében azt szeretném tudni, hogy hogyan tudom felhasználni saját céljaimra a gyári views formot? Köszi!

Illyés Edit képe

A Views modul formjai a Views modulhoz tartoznak. Ha te egy saját modulhoz fel akarod használni a Views szolgáltatásait, akkor az API-n keresztül csatlakozz rá.

0
0
MrPrise képe

Ok, de erről hol olvashatok bővebben? A Views API-ról csak ennyit találtam. Itt viszont nem írnak arról amire nekem szükségem lenne. Saját mezőim és szűrőim látszódnak (amelyeket a modulomban definiáltam) amikor létrehozok egy új views-t, de én szeretném módosítani a létrehozáshoz használt form-ot.

0
0
pp képe

Nem lehet, hogy neked nem is a views modul formja kell?

Mivel egy views nem más, mint egy nagy asszociatív tömb, lehet importálni exportálni, Lehet neked inkább azt kéne csinálni, hogy létrehozod a saját formodat, és a view-t közvetlenül módosítod. Tehát nem kell bűvészkedned a views formjával.

A másik megoldás, pedig talán az, hogy a form-ot sminkeled, és ott nyírod ki ezeket az elemeket.

A leggagyibb, pedig az, hgoy css-ben elrejted ;))

pp

0
0
MrPrise képe

Igen, pont ez lenne a lényeg, hogy tudjam úgy módosítani a views tömböt ahogy kedvem tartja.
Azt gondoltam, hogy a legegyszerűbb a gyári formból kiindulni, de mint kiderült ebben tévedtem ;-)
A sminkelés és a css-es elrejtés nem igazán szimpatikus. Már a gyökerénél akarom a dolgokat gyökeresen módosítani :-)
Köszi!

0
0
Illyés Edit képe

Lényegében ugyanazt akarod, amit most egy csomó modulnál csinálnak, hogy újraírják az egészet a Views-ra építve. Nem nagyon marad a contrib modulok kódjában listázó lekérdezés, hanem telepíteni kell alá a Views-t (függőség), és a modul lényegében egy egyszerűsített felületet kínál a Views-hoz (meg a CCK-hoz). Ezt akarod te is, vagy nem jól értem?

0
0
MrPrise képe

Igen, azt hiszem ez megoldás lenne nekem is. Ha jól sejtem ez csak a D6 és a Views 2 megjelenése után lesz elérhető.

0
0
Sweetchuck képe

A saját formodról kapott adatokat ezzel véglegesíted
http://api.drupal.org/api/function/drupal_execute/5

0
0
Sweetchuck képe

Első próbálkozásom a hook_form_alter() volt. Ezzel szépen el tudtam rejteni a basic-info, block-info és page-info fieldseteket, viszont az argument és az exposed filters fieldseteket nem.
Teljesen úgy néz ki mintha az én form_alter-em hívása után kerülnének a formra.

Próbáld meg azt, hogy a hook_form_alter() -ben hozzáadsz egy #pre_render függvényt

<?php
function my_form_alter(x,y) {
  ...
  $form['#pre_render'][] = 'my_function_pre_render';
  ...
}
 
function my_function_pre_reder($form_id, &$form, $next_page = TRUE) {
   //és itt megbabrálod a $form-ot
}
?>

http://api.drupal.org/api/function/multipage_form_example_pre_render/5

0
0
MrPrise képe

Köszi! Eddig ezt még nem próbáltam. Azóta egyébként rájöttem miért nem tudtam eltünteni az arguments fieldset-et a form módosításával. Ezen ok miatt a pre-render sem működik. Azért nem, mert pár dolog csak később kerül rá, a theme_views_edit_view() meghívásakor. Ez nekem nem tűnik túl elegáns megoldásnak.
Na, de a lényeg, hogy lemásoltam a saját sminkembe a theme_views_edit_view()-t és ott már úgy módosítom ahogy akarom.
Köszönöm a tanácsokat!

0
0
aboros képe

a lényeg, hogy lemásoltam a saját sminkembe a theme_views_edit_view()-t és ott már úgy módosítom ahogy akarom

nem gondolod? (költői)

0
0

-
clear: both;

MrPrise képe

Eddig úgy gondoltam, hogy azért van a hook_form_alter() hogy mindenféle form-mal kapcsolatos módosítást ott el lehessen végezni és a theme fv-k pedig azért vannak, hogy ott a megjelenéssel kapcsolatos dolgokat intézze az ember. Viszont ha a theme fv-ben bővítjük a form-ot, akkor a hook_form_alter() már nem tudja ellátni a feladatát, mivel annak hívásakor még nem teljes a form, nem tudjuk a form minden elemét elérni vele. Ezért gondolom, hogy nem elegáns a megoldás. Az elegáns szerintem az lenne, ha a theme fv miután megkapja a $form-ot, az abban található elemek alapján (és csak azok alapján!) generálja a HTML kódot. Igen, tudom, hogy ez így is történik, de jelenleg pl. akkor is generálja az argument fieldsetet ha történetesen hiányzik az az elem a $form tömbből (ill. megpróbálja generálni). Nyílván a views fejlesztői nem gondolhattak arra, hogy valaki egyszer majd le akarja tiltani az egyes részeket a formról és annak ez gondot fog okozni.

0
0