Обработка произвольных форм с помощью Drupal - PullRequest
0 голосов
/ 20 апреля 2010

Я пишу модуль для своей организации для кэширования потоков XML в статические файлы в произвольном месте на нашем веб-сервере. Я новичок в разработке Drupal и хотел бы знать, правильно ли я подхожу к этому.

В основном я:

  1. Предоставьте URL через хук меню, где пользователь может войти в выходной каталог на веб-сервере и нажать кнопку «сбросить», а затем заставить PHP перейти к drupal и получить xml-канал. Мне не нужна помощь с этой функциональностью, потому что на самом деле у меня есть прототип, работающий на Python (за пределами Drupal) ..
  2. Предоставьте обратный вызов для формы, где я могу выполнять свою логику, используя параметры формы.

Вот хук меню:

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;
}

Я создаю форму в:

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 );
}

Тогда функциональность в обратном вызове:

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 );

}

Вопрос: это достойный способ обработки произвольной формы в Drupal? На самом деле мне не нужно прислушиваться к каким-либо друпским хукам, потому что я просто занимаюсь обработкой URL и файлов.

Что это за аргументы, которые я получаю в обратном вызове ($ q)? Я думаю, это массив форм со значениями записей? Это лучший способ заставить работать параметры формы?

Спасибо за любой совет.

Ответы [ 2 ]

0 голосов
/ 20 апреля 2010

Я думаю, вам нужны 2 отдельные формы:

  1. для установки каталога (тот, который у вас есть сейчас);
  2. для создания дампа (другая форма, которая будет использовать настроенный путь).

Также представляется логичным опубликовать ранее сохраненный путь в качестве значения по умолчанию в форме настроек (вместо жестко заданного пути).

И вообще вы должны проверить входные данные формы из второго параметра обратного вызова submit:

function ncbi_cache_files_dump(&$form, &$form_state) {
    $outdir = $form_state['values']['ncbi_cache_files'];
    // ...
}
0 голосов
/ 20 апреля 2010

Вы можете обрабатывать формы в два этапа, проверять и отправлять.

Validate - для случаев, когда вы хотите проверить предоставленного пользователя и вызвать ошибки формы, если какой-либо пользовательский ввод был недействительным (например, неверный URL или адрес электронной почты)

Submit, который вы используете, вызывается, если форма проходит все свои проверки, поэтому в тот момент, если вы сделали правильную проверку, вы будете знать, что данные, предоставленные пользователем, в порядке.

Ваша функция отправки должна выглядеть следующим образом:

function ncbi_cache_files_dump(&$form, &$form_state) {
    // $form: an array containing the form data
    // $form_state: data about the form, like the data inputted in the form etc.
    // code...
}
...