如何使用Drupal和Juitter模块搜索Twitter但是使用主页中的搜索框

时间:2009-11-01 16:33:46

标签: search drupal twitter drupal-6

我正在使用Drupal 6.x,我已成功安装

Juitter http://drupal.org/project/juitter

正在完成我的用户需要做的事情,即搜索推特。

但要这样做,他们必须导航到调用Juitter模块的特定页面,如下所示:

____ example.com/juitter

然后他们必须输入一个查询并点击搜索以获得一个漂亮的AJAXed实时搜索结果页面。

如果我想在另一个页面中使用简单的文本字段,,请说出主页: _____ example.com /

用户可以在“搜索Twitter”输入字段中输入查询并将其视为

____ example.com/juitter/searched-query-here

和通讯员Juitter页面上有结果?

如果你有比这更好的方法,你会这么善意给我建议吗?

非常感谢。

Q值。

2 个答案:

答案 0 :(得分:3)

有趣的模块/功能 - 以及明显缺失的功能;)

我在本地测试实例中使用了它,并且能够使用以下方法获得工作结果:

  1. 添加预填充“juitter”页面上搜索框的功能,其中包含来自网址的搜索字词(如果有)。在模块juitter_page()函数中(在'juitter.module'中),替换此行(137):

    $search_phrase = t(variable_get('juitter_search_text', 'Search twitter:'));
    

    使用此代码:

    $preset = func_get_args();
    if (!empty($preset)) {
      $search_phrase = implode(' ', $preset);
    }
    else {
      $search_phrase = t(variable_get('juitter_search_text', 'Search twitter:'));
    }
    

    通过此更改,对“juitter / foo”的调用将显示标准的juitter页面,但在搜索框中使用“foo”而不是默认搜索文本。调用'juitter / foo / bar'会在搜索框中显示'foo bar',而单独调用'juitter'就会像以前一样。

  2. 调整javascript以自动提交搜索,如果它已通过上述更改预先填充。在模块'juitter.js'文件中,删除以下行(22):

    juitter.get_tweets($('#juitterTabsWrapper a:first').attr('id'));
    

    并在Drupal.behaviors.Juitter功能的末尾(在搜索框评论的末尾 - /* /Search box */,第53行)添加此代码,而不是:

    /* Trigger default. Use search term, if not default, otherwise use first tab */
    if (juitter.search && $(".juitterSearch").val()!=Drupal.t(juitter.search.text)) {
      $("#juitterSearch").submit();
    }
    else {
      juitter.get_tweets($('#juitterTabsWrapper a:first').attr('id'));
    }
    

    这将检查是否已更换默认搜索框文本 - 如果是,它将提交搜索,否则它将像以前一样运行并根据默认选项卡配置进行搜索。

  3. 通过这些更改,所需的只是一个类似于Drupals搜索块的搜索表单,重定向到juitter URL,搜索词变为路径元素。在juitter.module文件的末尾添加以下内容:

    /**
     * Implementation of hook_block().
     */
    function juitter_block($op = 'list', $delta = 0) {
      if ($op == 'list') {
        $blocks[0]['info'] = t('Juitter search form');
        // Not worth caching.
        $blocks[0]['cache'] = BLOCK_NO_CACHE;
        return $blocks;
      }
      else if ($op == 'view' && user_access('access content')) {
        $block['content'] = drupal_get_form('juitter_search_block_form');
        $block['subject'] = t('Search Twitter');
        return $block;
      }
    }
    
    /**
     * Callback function to generate the juitter search form
     *
     */
    function juitter_search_block_form($form_state) {
      $form['search_terms'] = array(
        '#title' => t('Search Twitter'),
        '#type' => 'textfield',
        '#size' => 15,
        '#default_value' => '',
        '#attributes' => array('title' => t('Enter the terms you wish to search for.')),
      );
      $form['submit'] = array('#type' => 'submit', '#value' => t('Search'));
      $form['#submit'][] = 'juitter_search_block_form_submit';
    
      return $form;
    }
    
    /**
     * Process a juitter search form submission.
     */
    function juitter_search_block_form_submit($form, &$form_state) {
      // The search form relies on control of the redirect destination for its
      // functionality, so we override any static destination set in the request,
      // for example by drupal_access_denied() or drupal_not_found()
      // (see http://drupal.org/node/292565).
      if (isset($_REQUEST['destination'])) {
        unset($_REQUEST['destination']);
      }
      if (isset($_REQUEST['edit']['destination'])) {
        unset($_REQUEST['edit']['destination']);
      }
    
      $form_id = $form['form_id']['#value'];
      $form_state['redirect'] = 'juitter/'. trim($form_state['values']['search_terms']);
    }
    

    这将创建一个“Juitter搜索表单”块,您可以根据需要放置。

  4. 这就是全部;)

    注意:通常我会通过构建一个单独的模块来实现“从外部”这样的更改,但由于这已经是a feature request on the module itself,我直接编辑了模块代码。 我会尝试将其转换为补丁并在那里提交。补丁为available here,感谢theunraveler

    顺便说一下,我通常不会编写这样的完整解决方案来获得答案 - 只是这个模块让我感兴趣。因此,您似乎是SO的新用户,不要指望这是常态;)


    编辑:这种方法存在一个小缺陷,因为该模块还为管理表单中使用的javascript回调注册路径'juitter / ahah'。因此,如果用户在新搜索框中输入“ahah”,他将得到一个无用的json编码表单元素作为结果。对此明显的解决方案是将ahah回调路径更改为其他内容。作为一种变通方法,您可以在从表单重定向时添加转义机制,在将文本放入主搜索框时撤消转义。

答案 1 :(得分:2)

我将Henrik的解决方案转换为补丁,可用here