Sziasztok!
Szeretnék egy kis segítséget kérni ha lehet (csak pár hete kezdtem el foglalkozni drupal-val és php-val ezért elnézést ha badarságot kérek vagy kérdezek). Szeretnék egy dinamikus AHAH formot taxonomy-ból, úgy hogy ha egy (A)mezőből kiválasztom a (szülő)term-et akkor egy másik (B)mezőből a kiválasztott (szülő)term (gyerek)term-eiből lehessen választani. Találtam is egy megfelelő leírást ami alapján pont ezt lehet megvalósítani: (http://thedrupalblog.com/using-ahah-dynamically-generate-form-elements-a...)
A linken található leírás alapján összehoztam egy modult:
formproba.info
; $Id$ name = Form próba description = Form próba module core = 6.x
formproba.module
<?php function helper_menu() { $items = array(); $items['ahah-form'] = array( 'title' => 'AHAH Form', 'page callback' => 'drupal_get_form', 'page arguments' => array('_helper_callback_ahah_form'), 'type' => MENU_CALLBACK, 'access callback' => 'user_access', 'access arguments' => array('access content'), ); $items['ahah-form-callback'] = array( 'title' => 'AHAH Form Callback', 'page callback' => '_helper_callback_ahah_form_callback', 'type' => MENU_CALLBACK, 'access callback' => 'user_access', 'access arguments' => array('access content'), ); return $items; } function _helper_callback_ahah_form() { // define an array to contain form elements $form = array(); // define the top level vid $vid = 2; // fetch a tree of taxonomy elements $tree = taxonomy_get_tree($vid, 0, -1, 1); // loop though taxonomy and collect elements $options = array(); foreach ($tree as $key => $value) { $options[$value->tid] = $value->name; } // create the first select dropdown input $form['select_1'] = array( '#type' => 'select', '#options' => $options, '#title' => t('Select 1'), '#size' => 5, '#multiple' => false, '#ahah' => array( 'event' => 'change', 'path' => 'ahah-form-callback', 'wrapper' => 'wrapper-1', 'method' => 'replace', ), ); // pass the top level vid in the form $form['ahah_vid'] = array( '#type' => 'hidden', '#value' => $vid, ); // create an empty form element to contain the second taxonomy dropdown $form['wrapper_1'] = array( '#prefix' => '<div id="wrapper-1">', '#suffix' => '</div>', '#value' => ' ', ); // add a form submit button $form['submit'] = array( '#value' => 'Submit', '#type' => 'submit' ); return $form; } // and, here's the AHAH callback used to create the new form elements: function _helper_callback_ahah_form_callback() { // define a string variable to contain callback output $output = ""; // pull the top level vid from the $_POST data $vid = $_POST['ahah_vid']; // pull the selected dropdown from the $_PODT data $parentVid = $_POST['select_1']; // loop through the taxonomy tree and fetch child taxonomies $options = array(); $tree = taxonomy_get_tree($vid, $parentVid, -1, 1); foreach ($tree as $key => $value) { $options[$value->tid] = $value->name; } // define the second tier select dropdown element $form['select_2'] = array( '#type' => 'select', '#options' => $options, '#title' => t('Select 2'), '#size' => 5, '#multiple' => false, ); // rebuild form object and output new form elements $output .= ahah_render($form, 'select_2'); // render form output as JSON print drupal_to_js(array('data' => $output, 'status' => true)); // exit to avoid rendering the theme layer exit(); } // Lastly, here's a help function pulled from Nick Lewis's blog to alter the form // see: http://www.nicklewis.org/node/967 // NOTE: based on poll module, see: poll_choice_js() function in poll.module function ahah_render($fields, $name) { $form_state = array('submitted' => FALSE); $form_build_id = $_POST['form_build_id']; // Add the new element to the stored form. Without adding the element to the // form, Drupal is not aware of this new elements existence and will not // process it. We retreive the cached form, add the element, and resave. $form = form_get_cache($form_build_id, $form_state); $form[$name] = $fields; form_set_cache($form_build_id, $form, $form_state); $form += array( '#post' => $_POST, '#programmed' => FALSE, ); // Rebuild the form. $form = form_builder($_POST['form_id'], $form, $form_state); // Render the new output. $new_form = $form[$name]; return drupal_render($new_form); }
Ha jól gondolom akkor látnom kellene egye 'AHAH Form' és egy 'AHAH Form Callback' menüpontot (6.19 drupalt használok) ahol megjelennek a formok de sajnos nem működik mivel nem látom a menüket sehol és nem tudom mit csináltam rosszul. Illetve nem tudom hogy tudnám egy adott tartalomtipushoz(urlap) kapcsolni illetve az adott tartalom létrehozásakor megjeleníteni. Előre is köszönöm a segítséget. (Tudom hogy van rá kész modul "Hierarchical Select" de ez nem jó mert iszonyatosan lassítja az oldalt, rengeteg memóriát zabál és ráadásul a cache tábláját sem üríti.)
Nem egészen
MENU_CALLBACK: Callbacks simply register a path so that the correct information is generated when the path is accessed.
Mind a két menu item-ed MENU_CALLBACK. Az elsőt állítsd MENU_NORMAL_ITEM-re
kis olvasnivaló a menükről : hook_menu
*----*----*
$node ? 'alma' : 'bor'
*----*----*
Rossz a hook
formproba.module fájlban gondolom formproba_menu kéne és nem helper_menu
pp
Palócz István
https://palocz.hu | https://tanarurkerem.hu
Köszönet
Köszönöm mindkettőtöknek a gyors segítséget, így már működik rendesen.