我正在使用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值。
答案 0 :(得分:3)
有趣的模块/功能 - 以及明显缺失的功能;)
我在本地测试实例中使用了它,并且能够使用以下方法获得工作结果:
添加预填充“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'就会像以前一样。
调整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'));
}
这将检查是否已更换默认搜索框文本 - 如果是,它将提交搜索,否则它将像以前一样运行并根据默认选项卡配置进行搜索。
通过这些更改,所需的只是一个类似于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搜索表单”块,您可以根据需要放置。
这就是全部;)
注意:通常我会通过构建一个单独的模块来实现“从外部”这样的更改,但由于这已经是a feature request on the module itself,我直接编辑了模块代码。 我会尝试将其转换为补丁并在那里提交。补丁为available here,感谢theunraveler。
编辑:这种方法存在一个小缺陷,因为该模块还为管理表单中使用的javascript回调注册路径'juitter / ahah'。因此,如果用户在新搜索框中输入“ahah”,他将得到一个无用的json编码表单元素作为结果。对此明显的解决方案是将ahah回调路径更改为其他内容。作为一种变通方法,您可以在从表单重定向时添加转义机制,在将文本放入主搜索框时撤消转义。
答案 1 :(得分:2)
我将Henrik的解决方案转换为补丁,可用here。