С пользовательским модулем, отображать результат, - PullRequest
0 голосов
/ 03 ноября 2010
function searchsong_block($op='list',$delta=0){
 $block = array();
 switch($op){

  case "list":
   $block[0][info] = t('Search song');
   return $block;
  case "view":
   $block['subject']='THIS IS SONG SEARCH MODULE';
   $block['content']=drupal_get_form('custom1_default_form');
   return $block;

 }




} 

function custom1_default_form () {
 $form = array();
  $form['txt_name']  =
    array('#type' => 'textfield',
          '#title' => t('Please enter your name'),
          '#default_value' => variable_get('webservice_user_url',''),
          '#maxlength' => '40',
          '#size' => '20',
          );

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

  return $form;   

  }

  function custom1_default_form_validate (&$form, &$form_state) {

    if(($form_state['values']['txt_name']) == '') {
        form_set_error('user_webservice', t('Enter a name'));
    }
  }

  function custom1_default_form_submit ($form_id, $form_values) {
  $GET_TXT_VAL = $_POST['txt_name'];
  $result = db_query('SELECT title FROM {node} WHERE type = "%s" AND title LIKE "%%%s%%"', 'song', $GET_TXT_VAL);
  $output='';
  while ($row = db_fetch_object($result)) {
   // drupal_set_message($row->title);----IF I ENABLE THIS LINE THEN MY SEARCH RESULT DISPLAYING IN THE GREEN BLOCK, YES I KNOW THIS FUNCTION SOMETHING LIKE ECHO JUST FOR TESTING PURPOSE WE SHOULD USE
    $output .=$row->title;
  }
  $block['content'] = $output;
 }

Как напечатать мой вывод,

Над модулем ничего не отображается, даже ошибка также,

Мне кажется, я должен что-то использовать в теме ('itemlist'), но я не уверен, как это использовать и где я должен это использовать,

Итак, что я хочу, я хочу отобразить результаты поиска в области контента,

Пожалуйста, найдите мой вопрос изображение ниже .. alt text

1 Ответ

1 голос
/ 03 ноября 2010

Подтвердить и отправить не для вывода данных.Вы должны показать свои результаты в custom1_default_form:Добавьте в submit $ _SESSION ['search_text'] или используйте многошаговый " storage " (для этого изучите api-форму друпал).Но давайте посмотрим, как работать через сессии:Добавьте в custom1_default_form:

// Here is your form code, so form will appear on the top
// ...
if (isset($_SESSION['search_text'])) {
  //add here your code from submit that output searching result
  $form['result'] = array(
    '#type' => 'item',
    '#value' => $output,
  );
  unset($_SESSION['search_text']); // don't forget clear session
}

Ваша функция отправки должна быть такой:

function custom1_default_form_submit($form, &$form_state) {
  $_SESSION['search_text'] = $form_state['values']['txt_name']; 
  // this will store text field into session, then reload page, 
  // so you drupal_get_form will see entered values.
}

Это все.

Советы:

if(($form_state['values']['txt_name']) == '') {
    form_set_error('user_webservice', t('Enter a name'));
}

Этот код не нужен, если вы делаете:

  $form['txt_name'] = array(
   ... // other properties
   '#required' => true,
  );

Прочитайте, пожалуйста, об API формы здесь: http://api.drupal.org

Другой способ использовать блок, просто вызвать функцию, которая выдает результати создайте через drupal_get_form, так:

...
$block['content']='custom1_default_result';
...
function custom1_default_result () {
  $output .= drupal_get_form('custom1_default_form');
  ...
  $output .= //search result if session filled/
} 
...