Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php t在会话中存储所选的筛选器选项 清除会话的重置功能_Php_Drupal_Drupal 6_Drupal Fapi - Fatal编程技术网

Php t在会话中存储所选的筛选器选项 清除会话的重置功能

Php t在会话中存储所选的筛选器选项 清除会话的重置功能,php,drupal,drupal-6,drupal-fapi,Php,Drupal,Drupal 6,Drupal Fapi,使用hook_menu()调用tic_fetch_results() 获取、筛选、输出结果 此示例使用了,因为它很容易随条件扩展 /** * Filters, fetches and outputs results */ function tic_fetch_results() { // Adds filter form to the build array. $form = drupal_get_form('tic_term_filter_form'); $output

使用hook_menu()调用tic_fetch_results()

获取、筛选、输出结果 此示例使用了,因为它很容易随条件扩展

/**
 * Filters, fetches and outputs results
 */

function tic_fetch_results() {

  // Adds filter form to the build array.
  $form = drupal_get_form('tic_term_filter_form');

  $output = drupal_render($form);

  $node_types = array('article', 'page', 'blog_post');

  // Sets up dynamic query
  $query = db_select('node', 'n')
      ->extend('PagerDefault')
      ->limit(33)
      ->fields('n', array('nid', 'title'))
      ->condition('n.type', $node_types, 'IN')
      ->condition('n.status', 1);

  // Fetches selected values from session and applies them to the query.
  if (isset($_SESSION['form_values']['terms']) && count($_SESSION['form_values']['terms']) > 0) {
    $query->join('field_data_field_tags', 'tags', 'n.nid = tags.entity_id');
    $query->condition('tags.field_tags_tid', $_SESSION['form_values']['terms'], 'IN');
    $query->condition('tags.bundle', $node_types, 'IN');
  }
  $result = $query->execute();

  $items = array();
  foreach ($result as $row) {
    $items[] = array('data' => $row->nid . ' - ' . $row->title);
    // do something interesting with the results
  }
  $output .= theme('item_list', array('items' => $items, 'title' => '', 'type' => 'ul', 'attributes' => array()));
  $output .= theme('pager');
  return $output;
}
构建表单 分类术语选项列表由词汇表标签填充

/**
 * Implements hook_form().
 */
function tic_term_filter_form($form, &$form_state) {

  // Loads terms from the Tags vocabulary and use as select options.
  $vocab = taxonomy_vocabulary_machine_name_load('tags');
  $terms = taxonomy_get_tree($vocab->vid);
  $term_options = array();
  foreach ($terms as $term) {
    $term_options[$term->tid] = $term->name;
  }

  // Sets the values that are stored in session as default.
  $storage = (isset($_SESSION['form_values']) ? $_SESSION['form_values'] : 0);
  $selected_terms = isset($storage['tags']) ? $storage['tags'] : NULL;

  $form['terms'] = array(
    '#title' => 'Filter by terms',
    '#type' => 'select',
    '#options' => $term_options,
    '#multiple' => TRUE,
    '#default_value' => $selected_terms,
  );

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

  $form['reset'] = array(
    '#type' => 'submit',
    '#value' => t('Reset'),
    '#weight' => 30,
    '#submit' => array('tic_tools_reset'),
  );

  return $form;
}
在会话中存储选定的值 重置过滤器
要扩展Asimov的答案,这里有一个代码示例(用于Drupal 7),它显示了用于选择节点的分类术语过滤器。所选术语存储在会话中,并在查询中用于筛选结果

您可以将其放在自定义模块中。它不需要视图或任何其他贡献的模块。 在下面的示例代码中,自定义模块的名称为tic。将tic重命名为自定义模块的名称

需要四个要素:

  • 一个函数,用于输出过滤器、获取和输出结果
  • 过滤形式
  • 在会话中存储所选筛选器选项的自定义提交函数
  • 清除会话的重置功能
  • 使用hook_menu()调用tic_fetch_results()

    获取、筛选、输出结果 此示例使用了,因为它很容易随条件扩展

    /**
     * Filters, fetches and outputs results
     */
    
    function tic_fetch_results() {
    
      // Adds filter form to the build array.
      $form = drupal_get_form('tic_term_filter_form');
    
      $output = drupal_render($form);
    
      $node_types = array('article', 'page', 'blog_post');
    
      // Sets up dynamic query
      $query = db_select('node', 'n')
          ->extend('PagerDefault')
          ->limit(33)
          ->fields('n', array('nid', 'title'))
          ->condition('n.type', $node_types, 'IN')
          ->condition('n.status', 1);
    
      // Fetches selected values from session and applies them to the query.
      if (isset($_SESSION['form_values']['terms']) && count($_SESSION['form_values']['terms']) > 0) {
        $query->join('field_data_field_tags', 'tags', 'n.nid = tags.entity_id');
        $query->condition('tags.field_tags_tid', $_SESSION['form_values']['terms'], 'IN');
        $query->condition('tags.bundle', $node_types, 'IN');
      }
      $result = $query->execute();
    
      $items = array();
      foreach ($result as $row) {
        $items[] = array('data' => $row->nid . ' - ' . $row->title);
        // do something interesting with the results
      }
      $output .= theme('item_list', array('items' => $items, 'title' => '', 'type' => 'ul', 'attributes' => array()));
      $output .= theme('pager');
      return $output;
    }
    
    构建表单 分类术语选项列表由词汇表标签填充

    /**
     * Implements hook_form().
     */
    function tic_term_filter_form($form, &$form_state) {
    
      // Loads terms from the Tags vocabulary and use as select options.
      $vocab = taxonomy_vocabulary_machine_name_load('tags');
      $terms = taxonomy_get_tree($vocab->vid);
      $term_options = array();
      foreach ($terms as $term) {
        $term_options[$term->tid] = $term->name;
      }
    
      // Sets the values that are stored in session as default.
      $storage = (isset($_SESSION['form_values']) ? $_SESSION['form_values'] : 0);
      $selected_terms = isset($storage['tags']) ? $storage['tags'] : NULL;
    
      $form['terms'] = array(
        '#title' => 'Filter by terms',
        '#type' => 'select',
        '#options' => $term_options,
        '#multiple' => TRUE,
        '#default_value' => $selected_terms,
      );
    
      $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Filter'),
      );
    
      $form['reset'] = array(
        '#type' => 'submit',
        '#value' => t('Reset'),
        '#weight' => 30,
        '#submit' => array('tic_tools_reset'),
      );
    
      return $form;
    }
    
    在会话中存储选定的值 重置过滤器
    忘了说了,但我正在开发我们自己的模块,所以我不想使用另一个模块并将链接放到另一个地方。我想把它和其他模块的功能,我自己的访问权限和其他东西放在一起。忘了说了,但我正在开发我们自己的模块,所以我不想使用其他模块,把链接放在不同的地方。我想把它与其他模块的功能,与我自己的访问权限和其他东西。
    /**
     * Implements hook_form_submit().
     */
    function tic_term_filter_form_submit(&$form, &$form_state) {
    
      // Stores form values in session.
      $_SESSION['form_values'] = $form_state['values'];
    }
    
    /*
     * Clears set filters.
     */
    
    function tic_tools_reset() {
      if (isset($_SESSION['form_values'])) {
        unset($_SESSION['form_values']);
      }
      drupal_goto(current_path());
      drupal_set_message('Filters were reset');
    }