Фильтр без использования Views

Пример простого фильтра по заголовкам нод. Ссылка на демо.

В hook_menu() регистрируем адрес, по которому будет выводится форма фильтра и таблица с отфильтрованными данными:

function nodefilter_menu() {
  $items['nodefilter'] = array(
    'title' => 'Node filter',
    'description' => 'Node filter',
    'page callback' => 'nodefilter_page_callback',
    'access arguments' => array('access content'),
  );
  return $items;
}

Кэлбак ф-я, которая соберёт на одной странице форму и таблицу с данными:

function nodefilter_page_callback() {
  $output = drupal_get_form('nodefilter_filter_form');
  $output .= nodefilter_table();
  return $output;
}

Описание формы фильтра:

function nodefilter_filter_form() {
  $form['filter'] = array(
    '#title' => 'Часть заголовка',
    '#type' => 'textfield',
    '#required' => true,
  );
 
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Фильтр',
  );
 
  $form['#redirect'] = false;
 
  return $form;
}

Таблица с данными:

function nodefilter_table() {
  $filter = (string)$_REQUEST['filter'];
 
  if ($filter == '') return '';
 
  $nodes = db_query("SELECT nid, title, created FROM {node} WHERE title LIKE '%%%s%%' ORDER BY nid", $filter);
  $table_header = array('Заголовок', 'Дата создания');
  $table_data = array();
 
  while ($node = db_fetch_object($nodes)) {
    $table_data[] = array(
       l($node->title, 'node/' . $node->nid),
       format_date($node->created)
    );
  }
 
  if (count($table_data) == 0) {
    return 'Ничего не найдено.';
  }
 
  return theme('table', $table_header, $table_data);
}


Написанное актуально для
Drupal 6.x
Теги:
работа с формами, создание модуля
Добавлено: 26 Июля 2018 07:33:08 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...