Drupal 6.x modul fejlesztése - Autosubmit

Szeretnénk saját Drupal 6 modul fejlesztésekor ha a formunkon működne az autosubmit, azaz például egy legördülő lista elemének kiválasztásakor automatikusan elmentődne a form anélkül, hogy külön kelljen a "Mentés" gombra kattintani.
Ehhez a JQuery modul lehetőségét használjuk ki, így az telepítve kell legyen.

A példában a modulunk neve: 'mymodule', a legördülő lista elem neve pedig: 'selector'
Két fájl fontos: a modult leíró mymodule.module PHP állomány és a java scriptet tartalmazó mymodule.js fájl. A példában mindkettő a modul mappájában található: sites/all/modules/mymodule


A mymodule.js fájl:
Az autosubmit-tal működtetni kívánt elem azonosítóját (ID) ha máshogy nem megy ki lehet olvasni a form futtatásakor az oldal HTML forrásából. Ha minden igaz, akkor ez - mint alább is látható - nem más mint az elem neve, jelen esetben selector, a #edit- előtaggal, azaz  #edit-selector

if (Drupal.jsEnabled) {
  $(document).ready(function() {
    $("#edit-selector").change(function() {
      $("form").submit();
      });
    });
};

 


A mymodule.module fájl:

<?php
/** -----------------------------------------------------------------------
* Implementation of hook_menu
**/
function mymodule_menu() {
  $items = array();
  // My Form
  $items['mymodule/myform'] = array(
    'title' => 'My Form',
    'page callback' => 'mymodule_myform',
    'access arguments' => array('view myform'),
    'type' => MENU_NORMAL_ITEM,
  );
  return $items;
} // function mymodule_menu()
/** -----------------------------------------------------------------------
* My Form - a formot megvalósító függvény
**/
function mymodule_myform() {
  // Betöltjük a Java Script állományt
  drupal_add_js(drupal_get_path('module', 'mymodule'). '/mymodule.js', 'module', 'footer');
  // Betöltjük a form elemeket
  $ret = drupal_get_form('mymodule_formitems');
  return  $ret;
} // function _mymodule_myform()
/** -----------------------------------------------------------------------
** A form elemeit leíró függvény
**/
function mymodule_formitems() {
  // Létrehozunk egy legördülő listát 'selector' névvel
  $options = array("1"=>"Egy", "2"=>"Kettő", "3"=>"Három");
  $form['selector'] = array(
    '#type' => 'select',
    '#title' => t('Selector'),
    '#default_value' => variable_get('selector', 2),
    '#options' => $options,
    '#description' => t("Ez a 'Selector'"),
  );
  return  $form;
} // function mymodule_formitems()
/** -----------------------------------------------------------------------
** A form mentésekor (submit) meghívásra kerülő függvény - hook_submit
**/
function mymodule_formitems_submit($form, &$form_state) {
  variable_set('selector', $form_state['values']['selector']);
  drupal_set_message("A 'Selector' értékét elmentettük: ".$form_state['values']['selector']);
} // function mymodule_formitems_submit()