Пример простого фильтра по заголовкам нод. Ссылка на демо.
В 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