Beleütköztem a mi nap egy hiányosságba(?)
Vannak olyan oldalak, blogok, áruházak ahol rengeteg kategória van.
Egy node több kategóriába is bele tartozhat, tehát beküldéskor multiple -select -el választjuk ki alapesetben ctrl- nyomvatartásával melyekbe kerüljön bele. De mi van akkor ha a kategóriák száma meghaladja 200-at? Elég lehetetlen lesz a választás, görgetni fel-le... még ha a select form mérete betölti a képernyőt akkor is.
Másik, hogy elég gyengén van éreztetve a kategória gyermekek elválasztása, nem átlátható. (főleg ha görgetni kel)
Ugye, úgy van megoldva hogy a 'kifejezések' gyermekei kiválasztásnál a mélységük arányába a nevük elé kapnak egy ?-? kötőjelet.
PL.:
FőMama
-anya
-apa
--Gyermek01
--Gyermek02
---Gyermek gyermeke
----Sanyika
Főpapa
-anya
-apa
--Gyermek01
--Gyermek02
---Gyermek gyermeke
----Lacika
Képzeljük el egy nagyobb listát.. 5-6-os mélységgel. :)
Próbáltam módosítani a ?-?- számát. Mélységenként kettőre, háromra.. nem volt igazi.
Írtam egy js-t ami figyeli a mélységek ?-?- számát és OPTGROUP-al egészíti a select-et. Így már egész szépen el tudtam választani css-el. Gond az volt ezzel hogy kókány és mivel több ilyen taxonomy csoport select lista van egy oldalon (amiknek nem kéne OPTGROUP-osnak lennie), ezért Tid- class szerint kellett pozicionálnom, de így a későbbi kategória bővítés kód-túrkászásal jár amit az user nem fog tudni.
Keresgéltem drupal.org -on és találtam egy marha jó modult. (nem publikált).
Itt: http://drupal.org/node/84286
és itt: http://www.angrydonuts.com/taxonomy_checkboxes_v2_the_reven
A végleges modul így néz ki:
function test_expand_checkboxes($element) {
$value = is_array($element['#value']) ? $element['#value'] : array();
$element['#tree'] = TRUE;
if (count($element['#options']) > 0) {
if (!isset($element['#default_value']) || $element['#default_value'] == 0) {
$element['#default_value'] = array();
}
foreach ($element['#options'] as $key => $choice) {
if (!isset($element[$key])) {
$tchoice = ltrim($choice, '-');
$depth = strlen($choice) - strlen($tchoice);
$element[$key] = array(
'#type' => 'checkbox',
'#prefix' => '<div style="margin-left: ' . (10 * $depth) . 'px">',
'#suffix' => '</div>',
'#processed' => TRUE,
'#title' => $tchoice,
'#return_value' => $key,
'#default_value' => isset($value[$key]),
'#attributes' => $element['#attributes']);
}
}
}
return $element;
}
function test_expand_radios($element) {
if (count($element['#options']) > 0) {
foreach ($element['#options'] as $key => $choice) {
if (!isset($element[$key])) {
$tchoice = ltrim($choice, '-');
$depth = strlen($choice) - strlen($tchoice);
$element[$key] = array(
'#type' => 'radio',
'#prefix' => '<div style="margin-left: ' . (10 * $depth) . 'px">',
'#suffix' => '</div>',
'#title' => $tchoice,
'#return_value' => $key,
'#default_value' => $element['#default_value'],
'#attributes' => $element['#attributes'],
'#parents' => $element['#parents'],
'#spawned' => TRUE);
}
}
}
return $element;
}
function test_form_alter($form_id, &$form) {
if (isset($form['type']) && $form['type']['#value'] .'_node_form' == $form_id) {
if (is_array($form['taxonomy'])) {
foreach ($form['taxonomy'] as $vid => $taxonomy) {
if (is_numeric($vid)) {
if ($taxonomy['#multiple']) {
$form['taxonomy'][$vid]['#type'] = 'checkboxes';
$form['taxonomy'][$vid]['#process'] = array('test_expand_checkboxes' => array());
}
else {
$form['taxonomy'][$vid]['#type'] = 'radios';
$form['taxonomy'][$vid]['#default_value'] = $form['taxonomy'][$vid]['#default_value'][0];
$form['taxonomy'][$vid]['#process'] = array('test_expand_radios' => array());
}
unset($form['taxonomy'][$vid]['#theme']);
if ($form['taxonomy'][$vid]['#options'][0]) {
unset($form['taxonomy'][$vid]['#options'][0]);
}
else {
$form['taxonomy'][$vid]['#required'] = TRUE;
}
$form['taxonomy'][$vid]['#prefix'] = '<div class="taxonomy-form">';
$form['taxonomy'][$vid]['#suffix'] = '</div>';
}
}
}
}
}
Tehát select form helyett checkboxok lesznek mélységtől függően be marginozva.
Ngyon jó, és egyértelmű, könnyebben is megértik az userek.
De, a gond ezzel az hogy az összes taxonomy csoportra alkalmazza ami nem szerencsés egy simpla selectnél.
Hogy lehetne azt megoldani hogy csak bizonyos vocaobulary-id re alkalmazza?
A legjobb az lenne ha a kategória beállításainál meg lehetne határozni, hogy az radio-s vagy nem, vagy egy filter form, amibe az érintett vid -eket belehetne írogatni.
Szerintem ez alap lehetne a taxonomy.module-ben
Nem rég álltam át drupal-ra és marhára nem értek hozzá, ezért kérném a segítségeteket.
Előre köszi!
Tamás