动态下拉通过#ajax DRUPAL 7 [英] dynamic dropdown by #ajax DRUPAL 7

查看:96
本文介绍了动态下拉通过#ajax DRUPAL 7的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想用的Drupal 7 #ajax财产进行动态3下拉(DD).. 第一个DD包含的国家列表(从数据库未来) 第二DD包含状态列表(从数据库未来) 3RE DD包含城市名单(从数据库未来)

问题是因为我选择的国家..my州DD显示状态accordingly..by如何触发我的状态DD,使我市的DD也得到了在同一时间更新了我的状态updated..I必须点击状态表只有我的城市DD变化。

---我的code在FORM_ALTER是这样的---

  $ options_first = iripple_classifieds_country_list();


   $选定=使用isset($ form_state [价值] [country_by_alter'])? $ form_state [价值] [country_by_alter']:键($ options_first);
   $ options_first = iripple_classifieds_country_list();
    $形式['country_by_alter'] =阵列(
      #TYPE'=> '选择',
      #title'=> T(国家),
        #validated'=>真正,
      #options'=> $ options_first,
      #weight'=> 5,
        //'#禁用'=> TRUE,
      #ajax'=>阵列(
          '回调'=> iripple_classifieds_country_callback,
          '包装'=> statereplace,
          '效果'=> '褪色',
         //'事件'=> 的onload
      ),
        #attributes'=>阵列(
          //的onload => jQuery的('#编辑国逐ALTER')。触发(点击)
        )

  );
    $ options_second = iripple_classifieds_state_list();
    $ selected_state =使用isset($ form_state [价值] [state_by_alter'])? $ form_state [价值] [state_by_alter']:键($ options_second);
    $形式['state_by_alter'] =阵列(
      #TYPE'=> '选择',
        #title'=> T(国家),
        #options'=> iripple_classifieds_selected_states($选择)
        #default_value'=>使用isset($ form_state [价值] [state_by_alter'])? $ form_state [价值] [state_by_alter']:'',
        #weight'=> 7,
        #validated'=>真正,
        #preFIX'=> '&所述;股利的id =statereplace>',
        #suffix'=> '< / DIV>',
        #ajax'=>阵列(
            '回调'=> iripple_classifieds_state_callback,
            '包装'=> cityreplace,
            事件=> '更改'
        )
    );

    $形式['city_by_alter'] =阵列(
        #TYPE'=> '选择',
        #title'=> T(城市),
        #options'=> iripple_classifieds_selected_cities($ selected_state)
        #default_value'=>使用isset($ form_state [价值] [city_by_alter'])? $ form_state [价值] [city_by_alter']:'',
         #weight'=> 8,
        #validated'=>真正,
        #preFIX'=> '&所述;股利的id =cityreplace>',
        #suffix'=> '< / DIV>',
    );
 

解决方案

 函数ajax_pra_menu(){$项目['ajax_pra'] =阵列(在此输入code
    '标题'=> 阿贾克斯实践,
    页面回调'=> drupal_get_form,
    页面参数'=>阵列('ajax_pra_dependent_dropdown'),
    进入回调'=> TRUE,输入code here`);

返回$项目;
}

功能ajax_pra_dependent_dropdown($形式,和放大器; $ form_state){$ options_first = _ajax_pra_get_first_dropdown_options();

$ options_two = _ajax_pra_get_second_dropdown_options();

$选定=使用isset($ form_state [价值] [dropdown_first'])? $ form_state [价值] [dropdown_first']:键($ options_first);

$ select_two =使用isset($ form_state [价值] [dropdown_second'])? $ form_state [价值] [dropdown_second']:键($ options_two);

$形式['dropdown_first'] =阵列(
   #title'=> '项目',
   #TYPE'=> '选择',
   #options'=> $ options_first,
   #default_value'=> $选择,
   #ajax'=>阵列(
     '回调'=> ajax_pra_dependent_dropdown_callback,
     '包装'=> 下拉秒替换
    ),
 );

 $形式['dropdown_second'] =阵列(
   #title'=> $ options_first [$选择。 ''。 T(类型),
   #TYPE'=> '选择',
   #preFIX'=> '< D​​IV ID =下拉秒替换>',
   #suffix'=> '< / DIV>',
   #options'=> _ajax_pra_get_second_dropdown_options($选择)
   #default_value'=>使用isset($ form_state [价值] [dropdown_second'])? $ form_state [价值] [dropdown_second']:'',
   #ajax'=>阵列(
      '回调'=> ajax_pra_two_dependent_dropdown_callback,
      '包装'=> 下拉列表中三分替换',
    ),
  );

  $形式['dropdown_third'] =阵列(
     #title'=> $ options_two [$ select_two。 ''。 T('三'),
     #TYPE'=> '选择',
     #preFIX'=> '< D​​IV ID =下拉列表中三分替换>',
     #suffix'=> '< / DIV>',
     #options'=> _ajax_pra_get_third_dropdown_options($ select_two)
     #default_value'=>使用isset($ form_state [价值] [dropdown_third'])? $ form_state [价值] [dropdown_third']:'',
    );

  $形式['提交'] =阵列(
     #TYPE'=> '提交',
      #VALUE => T(保存),
  );
}

 功能ajax_pra_dependent_dropdown_callback($形式,$ form_state)
{
    返回$形式['dropdown_second'];
}

功能ajax_pra_two_dependent_dropdown_callback($形式,$ form_state)
{
   返回$形式['dropdown_third'];
}

功能_ajax_pra_get_first_dropdown_options()
{
 返回drupal_map_assoc(
    阵列(
        T(汽车),
        T('自行车'),
        T移动'),
    )
 );
}
 功能_ajax_pra_get_second_dropdown_options($关键='')
    {
        $选项=阵列(
            T('车')=> drupal_map_assoc(
               阵列(
                    T('宝马'),
                    T('奥迪'),
                )
            ),
            T('自行车')=> drupal_map_assoc(
              阵列(
                    T('本田'),
                    T(铃木),
                )
            ),
            T('移动')=> drupal_map_assoc(
                阵列(
                    T(诺基亚),
                    T('微'),
                )
            ),
        );


        如果(使用isset($选项[$关键]))
        {
            返回$选项[$关键]
        }
        其他{
            返回阵列();
        }
    }

    功能_ajax_pra_get_third_dropdown_options($关键='')
    {
        $选项=阵列(
            T('宝马')=> drupal_map_assoc(
                阵列(
                    T(宝马X3),
                    T(BMW X6),
                )
            ),
            T('本田')=> drupal_map_assoc(
                阵列(
                    T(城市),
                    T(协议),
                )
            ),
        );

        如果(使用isset($选项[$关键]))
        {
            返回$选项[$关键]
        }
        其他
        {
            返回阵列();
        }
    }
 

I am trying to make dynamic 3 dropdown(DD) by #ajax property of drupal 7.. 1st DD contains country list(coming from db) 2nd DD contains states list(coming from db) 3re DD contains city list(coming from db)

problem is as i choose country ..my states DD show states accordingly..by how to trigger my states DD so that my city DD also got updated at the same time my state updated..I have to click on states table only then my cities DD changes..

---MY CODE IN FORM_ALTER IS THIS---

$options_first = iripple_classifieds_country_list();


   $selected = isset($form_state['values']['country_by_alter']) ? $form_state['values']['country_by_alter']: key($options_first);
   $options_first = iripple_classifieds_country_list();
    $form['country_by_alter'] = array(
      '#type' => 'select',
      '#title' => t('Country'),
        '#validated' => TRUE,
      '#options' => $options_first,
      '#weight' => 5,
        //'#disabled' =>TRUE,
      '#ajax' => array(
          'callback' => 'iripple_classifieds_country_callback',
          'wrapper' => 'statereplace',
          'effect' => 'fade',
         // 'event' => 'onload'
      ),
        '#attributes' => array(
          //  'onload' => "jQuery('#edit-country-by-alter').trigger('click')"
        )

  );
    $options_second = iripple_classifieds_state_list();
    $selected_state = isset($form_state['values']['state_by_alter']) ? $form_state['values']['state_by_alter']: key($options_second);
    $form['state_by_alter'] = array (
      '#type' => 'select',
        '#title' => t('State'),
        '#options' => iripple_classifieds_selected_states($selected),
        '#default_value' => isset($form_state['values']['state_by_alter']) ? $form_state['values']['state_by_alter']:'',
        '#weight' => 7,
        '#validated' => TRUE,
        '#prefix' => '<div id="statereplace">',
        '#suffix' => '</div>',
        '#ajax' => array(
            'callback' => 'iripple_classifieds_state_callback',
            'wrapper' => 'cityreplace',
            'event' => 'change'
        )
    );

    $form['city_by_alter'] = array(
        '#type' => 'select',
        '#title' => t('City'),
        '#options' => iripple_classifieds_selected_cities($selected_state),
        '#default_value' => isset($form_state['values']['city_by_alter']) ? $form_state['values']['city_by_alter']:'',
         '#weight' => 8,
        '#validated' => TRUE,
        '#prefix' => '<div id="cityreplace">',
        '#suffix' => '</div>',
    );

解决方案

function ajax_pra_menu() { $items['ajax_pra'] = array(enter code here
    'title' => 'ajax Practice',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('ajax_pra_dependent_dropdown'),
    'access callback' => TRUE,enter code here` );

return $items;
}

function ajax_pra_dependent_dropdown($form, &$form_state) { $options_first = _ajax_pra_get_first_dropdown_options();

$options_two = _ajax_pra_get_second_dropdown_options();

$selected = isset($form_state['values']['dropdown_first']) ? $form_state['values']['dropdown_first'] : key($options_first);

$select_two = isset($form_state['values']['dropdown_second']) ? $form_state['values']['dropdown_second'] : key($options_two);

$form['dropdown_first'] = array(   
   '#title' => 'Item',
   '#type' => 'select',
   '#options' => $options_first,
   '#default_value' => $selected,
   '#ajax' => array(
     'callback' => 'ajax_pra_dependent_dropdown_callback',
     'wrapper' => 'dropdown-second-replace'
    ),
 );

 $form['dropdown_second'] = array(
   '#title' => $options_first[$selected] . ' ' . t('type'),
   '#type' => 'select',
   '#prefix' => '<div id="dropdown-second-replace">',
   '#suffix' => '</div>',
   '#options' => _ajax_pra_get_second_dropdown_options($selected),
   '#default_value' => isset($form_state['values']['dropdown_second']) ?   $form_state['values']['dropdown_second'] : '',
   '#ajax' => array(
      'callback' => 'ajax_pra_two_dependent_dropdown_callback',
      'wrapper' => 'dropdown-third-replace',
    ),
  );

  $form['dropdown_third'] = array(
     '#title' => $options_two[$select_two] . ' ' . t('third'),
     '#type' => 'select',
     '#prefix' => '<div id="dropdown-third-replace">',
     '#suffix' => '</div>',
     '#options' => _ajax_pra_get_third_dropdown_options($select_two),
     '#default_value' => isset($form_state['values']['dropdown_third']) ? $form_state['values']['dropdown_third'] : '',
    );

  $form['submit'] = array(
     '#type' => 'submit',
      '#value' => t('save'),
  );
}

 function ajax_pra_dependent_dropdown_callback($form,$form_state)
{
    return $form['dropdown_second'];
}

function ajax_pra_two_dependent_dropdown_callback($form,$form_state)
{
   return $form['dropdown_third'];
}

function _ajax_pra_get_first_dropdown_options()
{
 return drupal_map_assoc(
    array(
        t('Car'),
        t('Bike'),
        t('Mobile'),
    )
 );
}
 function _ajax_pra_get_second_dropdown_options($key = ' ')
    {
        $options = array(
            t('Car') => drupal_map_assoc(
               array(
                    t('bmw'),
                    t('audi'),
                )
            ),
            t('Bike') => drupal_map_assoc(
              array(
                    t('honda'),
                    t('suzuki'),            
                )
            ),
            t('Mobile') => drupal_map_assoc(
                array(
                    t('nokia'),
                    t('micro'),
                )
            ),
        );


        if (isset($options[$key]))
        {
            return $options[$key];
        }
        else{
            return array();
        }
    }

    function _ajax_pra_get_third_dropdown_options($key = '')
    {
        $options = array(
            t('bmw') => drupal_map_assoc(
                array(
                    t('bmw x3'),
                    t('bmw x6'),
                )
            ),
            t('honda') => drupal_map_assoc(
                array(          
                    t('city'),
                    t('accord'),
                )
            ),
        );

        if(isset($options[$key]))
        {
            return $options[$key];
        }
        else
        {
            return array();
        }
    }

这篇关于动态下拉通过#ajax DRUPAL 7的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆