Drupal 6 передает переменные из форм в контент, как? - PullRequest
0 голосов
/ 02 октября 2009

Я создал БЛОК (слева) с этой простой формой. Теперь я хочу обрабатывать и отображать результаты на странице (в центре) Как я могу это сделать?

Входы:

name = James
surname = Bond

вывод, который я хочу:

<div style="color:red">Welcome, James Bond</div>

вот БЛОК, который я написал и работает.

<?php

echo drupal_get_form('myForm');

function myForm($form_state) {
 $form['name'] = array(
  '#type' => 'textfield',
  '#title' => t('Name'),
  '#size' => 20,
  '#maxlength' => 10
 );
 $form['surname'] = array(
  '#type' => 'textfield',
  '#title' => t('Surname'),
  '#size' => 20,
  '#maxlength' => 10
 );
 $form['submit'] = array(
  '#type' => 'submit',
  '#value' => t('Save')
 );
return $form;
}

function myForm_submit($form,&$form_state)
{
 //??
};

Теперь мне нужно отобразить вывод :).

Пожалуйста, не предлагайте использовать VIEWS или любое другое дополнение.

Я хочу изучать Drupal изнутри. Не наоборот;)

Ответы [ 4 ]

4 голосов
/ 02 октября 2009

Ну, это немного зависит от того, как вы хотите что-то делать. Поскольку вы изучаете, как создать модуль drupal, вы можете начать с реализации hook_menu () . Этот хук используется для определения пунктов меню, что в основном означает, что вы можете зарегистрировать URL с помощью этой функции. По этому маршруту вы можете:

  1. Реализация hook_menu ()
  2. Общий способ обработки перенаправлений - drupal_goto () . Однако в этом случае гораздо удобнее использовать $form_state['redirect'], как объяснил Хенрик в своем комментарии.
  3. Для URL, на который вы перенаправляете, у вас должна быть функция обратного вызова, в которую вы помещаете свою логику, способ настройки hook_menu и функция обратного вызова будут определять, как вы получите ваши переменные. Возможно, вы захотите взглянуть на функцию arg () , которая обычно используется для получения значений из URL.
  4. Запустите пользовательский ввод через фильтр, чтобы убедиться, что он не разместил неприятные вещи, такие как теги сценария и т. Д., Используйте check_plain
  5. вернуть функцию темы, или сделать свою собственную, посмотрите theme () и hook_theme ()

Есть более быстрые способы сделать это, но, делая это таким образом, вы будете генерировать URL для каждого результата поиска, который может кэшировать drupal, что приятно. Также не зависимо от параметров записи, люди могут добавлять в закладки результаты поиска

Другое дело, что вы можете захотеть добавить некоторую базовую проверку в вашу форму. Это было бы хорошей практикой для изучения. Это будет выглядеть примерно так:

/**
 * Validation handler for myForm.
 */
function myForm_validate($form, &$form_state) {
    $name = $form_state['values']['name'];
    // do some checks to $name.
    if ($error) {
        form_set_error('name', t('error message to be displayed, showing the value of the field: @name', array('@name' => $name);
    }
};
0 голосов
/ 04 января 2011

, если функция отправки создает страницу, полную вывода html; Каков наилучший способ передать это обратному вызову страницы? я сомневаюсь, что передача в качестве аргумента в URL будет работать.

Я вставил в сессионную переменную, но может быть, лучше?

0 голосов
/ 08 сентября 2010

Как насчет использования drupal_set_html_head () для записи строки сценария в раздел заголовка страницы? Я делаю это на определенных страницах (получая широту и долготу пользователя и передавая их в мою функцию gMap), но меня интересует то же самое непосредственно из hook_form_submit (). Я сделал несколько попыток, и, очевидно, я вывожу строку скрипта, но вызов функции submit не работает.

0 голосов
/ 08 октября 2009

Вы можете реализовать AHAH в своей форме и указать элемент внутри области содержимого вашей страницы как «обертку» (элемент, в который будут помещены результаты функции обратного вызова). Но вам нужно понять прекрасный совет мистера Опеля, прежде чем вы даже попробуете его.

...