Arbitrary Form Processing with Drupal

Posted by Aaron on Stack Overflow See other posts from Stack Overflow or by Aaron
Published on 2010-04-19T20:02:26Z Indexed on 2010/04/19 20:03 UTC
Read the original article Hit count: 273

Filed under:
|
|
|

I am writing a module for my organization to cache XML feeds to static files to an arbitrary place on our webserver. I am new at Drupal development, and would like to know if I am approaching this the right way.

Basically I:

  1. Expose a url via the menu hook, where a user can enter in a an output directory on the webserver and press the "dump" button and then have PHP go to drupal and get the feed xml. I don't need help with that functionality, because I actually have a prototype working in Python (outside of Drupal)..
  2. Provide a callback for the form where I can do my logic, using the form parameters.

Here's the menu hook:

function ncbi_cache_files_menu() {
    $items = array();


    $items['admin/content/ncbi_cache_files'] = array(
        'title' => 'NCBI Cache File Module',
        'description' => 'Cache Guide static content to files',
        'page callback' => 'drupal_get_form',
        'page arguments' => array( 'ncbi_cache_files_show_submit'),
        'access arguments' => array( 'administer site configuration' ),
        'type' => MENU_NORMAL_ITEM,
    );

    return $items;
}

I generate the form in:

function ncbi_cache_files_show_submit() {

    $DEFAULT_OUT = 'http://myorg/foo';
    $form[ 'ncbi_cache_files' ] = array(
        '#type' => 'textfield',
        '#title' => t('Output Directory'),
        '#description' => t('Where you want the static files to be dumped.
            This should be a directory that www has write access to, and
            should be accessible from the foo server'),
        '#default_value' => t( $DEFAULT_OUT ),
        '#size' => strlen( $DEFAULT_OUT ) + 5,
    );

    $form['dump'] = array( 
        '#type' => 'submit',
        '#value' => 'Dump',
        '#submit' => array( 'ncbi_cache_files_dump'),
    );

    return system_settings_form( $form );
}

Then the functionality is in the callback:

function ncbi_cache_files_dump( $p, $q) {
    //dpm( get_defined_vars() );
    $outdir = $p['ncbi_cache_files']['#post']['ncbi_cache_files'];
    drupal_set_message('outdir: ' . $outdir );

}

The question: Is this a decent way of processing an arbitrary form in Drupal? I not really need to listen for any drupal hooks, because I am basically just doing some URL and file processing.

What are those arguments that I'm getting in the callback ($q)? That's the form array I guess, with the post values? Is this the best way to get the form parameters to work on?

Thanks for any advice.

© Stack Overflow or respective owner

Related posts about drupal

Related posts about forms