This CodeLet has a search box with three checkboxes as filters. Depending on the fitler selected, result will be fetched. By default, this CodeLet will dispaly 10 most recent results from groups and users
CodeLet
<?php/** * @file * * Provides a page to search for groups, users and service providers * * @author DrupalD <DrupalD@twitter> *//** * Implemenation of hoook_menu * * @author DrupalD <DrupalD@twitter> */function invest_search_menu($ss__keyword = '') { $items['directory'] = array( 'title' => t('Directory'), 'menu_name' => 'main-menu', 'page callback' => 'invest_search_page', 'page arguments' => array(1), 'access callback' => TRUE, 'weight' => -5, ); return $items;}/** * invest_search_page */function invest_search_page($ss__keyword= '') { if (!empty($ss__keyword)) { list($key, $type) = explode('type:', $ss__keyword); } $build['invest_search_form'] = drupal_get_form('invest_search_form', $ss__keyword); $ss__keyword = ($type == '') ? $key .'type: group users': $key . 'type:'. $type; $build['search_result'] = array('#markup' => _get_invest_search_result($ss__keyword)); return drupal_render($build); }/** * invest_search_form * * Search form for searching the content * * @author DrupalD <DrupalD@twitter> */function invest_search_form($form, &$form_sate, $ss__keyword = '') { $form = array(); if (!empty($ss__keyword)) { list($key, $type) = explode('type:', $ss__keyword); } $form['#action'] = 'directory'; $form['name'] = array( '#type' => 'hidden', '#value' => 'invest_search_page', ); $form['search_type'] = array( '#type' => 'checkboxes', '#title' => t('Search in'), '#multicolumn' => array('width' => 3), '#default_value' => !empty($type) ? explode(' ', $type) : array('group', 'users'), '#options' => array( 'group' => t('Groups'), 'users' => t('Users'), 'provider' => t('Service provider'), ), '#weight' => -9, ); $form['search_keywrod'] = array( '#type' => 'textfield', '#title' => t('Search'), '#default_value' => $key, '#weight' => -10, ); $form['search_submit'] = array( '#type' => 'submit', '#value' => t('Search'), '#weight' => -8, ); $form['#submit'] = array('invest_search_submit'); return $form;}/** * invest_search_submit * * @author DrupalD <DrupalD@twitter> */function invest_search_submit($form, &$form_state) { $ss__keyword = $form_state['values']['search_keywrod']; $ss__type = implode(' ', $form_state['values']['search_type']); $keys = $ss__keyword .'type:'. $ss__type; if ($ss__type == '0 0 0') { form_set_error('search_type', t('Please select a type to search in.')); } $form_state['redirect'] = $form_state['complete form']['#action'] . '/' . $keys;}/** * _get_invest_search_result * * @param unknown_type $ss__keyword * @author DrupalD <DrupalD@twitter> */function _get_invest_search_result($ss__keyword) { $type = ''; $header = array(t('Name'), t('Body'), t('Is service provider?')); if (!empty($ss__keyword)) { unset($type); list($key, $type) = explode('type:', $ss__keyword); $key = trim($key); } if (strstr($type, 'group') != '' || strstr($type, 'provider') != '') { unset($row); $group_query = db_select('node', 'n'); $group_query->leftjoin('field_data_body', 'fdr', 'n.nid = fdr.entity_id'); $group_query->leftjoin('field_data_field_service_provider', 'fsp', 'n.nid = fsp.entity_id'); if (strstr($type, 'provider') != '') { $group_query->condition('field_service_provider_value', '1', '='); } $group_query->fields('n', array('nid', 'title')) ->fields('fdr', array('body_value')) ->fields('fsp', array('service_provider' => 'field_service_provider_value')) ->condition('type', 'group', '=') ->condition('fsp.bundle', 'group', '=') ->condition('n.status', '1', '='); if ($key != '') { $group_query->where("((title LIKE '%". $key ."%') OR (body_value LIKE '%". $key ."%'))"); } $group_query->orderBy('title', 'ASC'); $group_result = $group_query->extend('PagerDefault')->limit(5); $group_result = $group_query->execute(); while($group_record = $group_result->fetchAssoc()) { $row[] = array( l($group_record['title'], 'node/'. $group_record['nid']), $group_record['body_value'], $group_record['field_service_provider_value'] == 1 ? t('Yes') : t('No'), ); } } if (strstr($type, 'users') != '' || strstr($type, 'provider') != '') { $user__query = db_select('users', 'u'); $user__query->leftjoin('field_data_field_notes', 'fdn', 'u.uid = fdn.entity_id'); $user__query->leftjoin('field_data_field_service_provider', 'fsp', 'u.uid = fsp.entity_id'); if (strstr($type, 'provider') != '') { $user__query->condition('field_service_provider_value', '1', '='); } $user__query->fields('u', array('name', 'uid')) ->fields('fdn', array('field_notes_value')) ->fields('fsp', array('field_service_provider_value')) ->condition('fsp.bundle', 'user', '='); if ($key != '') { $user__query->where("((name LIKE '%". $key ."%') OR (field_notes_value LIKE '%". $key ."%'))"); } $user__query->orderBy('name', 'ASC'); $user__query = $user__query->extend('PagerDefault')->limit(5); $user__query = $user__query->execute(); while($user__record = $user__query->fetchAssoc()) { $row[] = array( l($user__record['name'], 'user/'. $user__record['uid']), $user__record['field_notes_value'], $user__record['field_service_provider_value'] == '1' ? t('Yes') : t('No'), ); } } $output .= theme('table', array('header' => $header, 'rows' => $row, 'empty' => t('No records found'), 'caption' => '<h2>'. t('Result') .'</h2>')); $output .= theme('pager', array('tags' => array())); return $output;}?>