Dinamikus AHAH form taxonomy-ból

halgez képe

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' => '&nbsp;',
  );
 
  // 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.)

Drupal verzió: 
Lavjaman képe

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

0
0

*----*----*

$node ? 'alma' : 'bor'

*----*----*

pp képe

formproba.module fájlban gondolom formproba_menu kéne és nem helper_menu

pp

0
0
halgez képe

Köszönöm mindkettőtöknek a gyors segítséget, így már működik rendesen.

0
0