如何更改Apache Solr搜索URL? -- 7 领域 和 search 领域 drupal 相关 的问题

How can I change the Apache Solr search URL?


12
vote

问题

中文

如何将默认的Apache Solr URL路径从"搜索/ apachesolr_search / term" 更改为eactors?

英文原文

How can I change the default Apache Solr URL path from "search/apachesolr_search/term" to something else?

     
 
 

回答列表

3
 
vote
vote
最佳答案
 

我通常这样做的方式是实现hook_menu_alter()。然后,您可以根据您选择的确切方式自定义URL:

  /**  * Implements hook_menu_alter().  */ function example_menu_alter(&$menu) {   // Ensure Apache Solr is the default and that the menu item exists.   if (variable_get('apachesolr_search_make_default', 0) && isset($menu['search/apachesolr/%menu_tail'])) {     $menu['search/%menu_tail'] = $menu['search/apachesolr/%menu_tail'];     unset($menu['search/apachesolr/%menu_tail']);   } }   
 

The way I've typically done this is to implement hook_menu_alter(). You can then customize the url in the exact way you choose:

/**  * Implements hook_menu_alter().  */ function example_menu_alter(&$menu) {   // Ensure Apache Solr is the default and that the menu item exists.   if (variable_get('apachesolr_search_make_default', 0) && isset($menu['search/apachesolr/%menu_tail'])) {     $menu['search/%menu_tail'] = $menu['search/apachesolr/%menu_tail'];     unset($menu['search/apachesolr/%menu_tail']);   } } 
 
 
4
 
vote

如果您仅使用APACHESOLR搜索模块,则更改搜索路径是非琐碎的。由于它取决于核心搜索模块,因此该路径几乎是硬编码的。它取决于搜索/ {module} /%menu_tail。如果您查看 search_view() ,搜索模块的回调,您会发现它调用 search_get_keys(),它期望搜索键位于路径的特定部分。 Apachesolr搜索模块还使用此函数来获取键,因此实现简单的Hook_Menu_Alter()无法自行工作。

如此在此处的另一个答案中提到,如果您能够运行浏览视图3.x,那么您最好的选择就是使用 apachesolr视图模块。使用此模块,您可以轻松定义任何数量的搜索结果的自定义路径。

如果您无法运行3.x,那么您需要使用形式的组合(特别是,search_form)和自定义菜单回调来成功更改默认搜索路径。

 

It is non-trivial to change the search path if you are only using the apachesolr search module. Since it depends on the core search module, the path is nearly hard-coded. It depends on search/{module}/%menu_tail. If you look at search_view(), the callback for the search module, you'll find that it calls search_get_keys(), which expects the search keys to be in a particular part of the path. The apachesolr search module also uses this function to get keys, so implementing a simple hook_menu_alter() won't work on its own.

As mentioned in another answer here, if you are able to run Views 3.x, then your best bet is to use the apachesolr views module. With this module, you can easily define any number of custom paths for search results.

If you can't run 3.x, then you'll need to use a combination of form alter (specifically, search_form) and custom menu callbacks to successfully change the default search path.

 
 
4
 
vote

如果将其放在settings.php:

中,这应该有效
  function custom_url_rewrite_outbound(&$path, &$options, $original_path) {   // Filter to get only the apache solr links with filters so it doesn't launch it for every link of our website   if ($path == 'search/apachesolr_search/' && strpos($options['query'], 'filters') !== FALSE) {     $new_path = $path.'?'.urldecode($options['query']);     // See if we have a url_alias for our new path     $sql = 'SELECT dst FROM {url_alias} WHERE src="%s"';     $row = db_result(db_query($sql, $new_path));     // If there is a dst url_alia, we change the path to it and erase the query     if ($row) {       $path = $row;       $options['query'] = '';     }   } }  function custom_url_rewrite_inbound(&$result, $path, $path_language) {   // See if we have a url_alias for our new path   $sql = 'SELECT src FROM {url_alias} WHERE dst="%s"';   $row = db_result(db_query($sql, $path));   if ($row) {     // We found a source path     $parts = preg_split('/[?&]/', $row);     if (count($parts) > 1) {       $result = array_shift($parts);       // That's important because on my website, it doesn't work with the / at the end of result       if ($result[strlen($result) - 1] == '/') {         $result = substr($result, 0, strlen($result) - 1);       }       // Create the $_GET with the filter       foreach ($parts as $part) {         list($key, $value) = explode('=', $part);         $_GET[$key] = $value;         // Add this because the pager use the $_REQUEST variable to be set         $_REQUEST[$key] = $value;       }     }   } }   

然后在创建菜单条目时,将链接放到Apache Solr:Search / Apachesolr_search /?filters = tid:13

并为搜索/ apachesolr_search / tid创建一个URL别名/?filters = tid:13如产品/电视.html

通过: http://drupal.org/node/7838366mment-4136475 a>

 

This should work if you place it in settings.php:

function custom_url_rewrite_outbound(&$path, &$options, $original_path) {   // Filter to get only the apache solr links with filters so it doesn't launch it for every link of our website   if ($path == 'search/apachesolr_search/' && strpos($options['query'], 'filters') !== FALSE) {     $new_path = $path.'?'.urldecode($options['query']);     // See if we have a url_alias for our new path     $sql = 'SELECT dst FROM {url_alias} WHERE src="%s"';     $row = db_result(db_query($sql, $new_path));     // If there is a dst url_alia, we change the path to it and erase the query     if ($row) {       $path = $row;       $options['query'] = '';     }   } }  function custom_url_rewrite_inbound(&$result, $path, $path_language) {   // See if we have a url_alias for our new path   $sql = 'SELECT src FROM {url_alias} WHERE dst="%s"';   $row = db_result(db_query($sql, $path));   if ($row) {     // We found a source path     $parts = preg_split('/[\?\&]/', $row);     if (count($parts) > 1) {       $result = array_shift($parts);       // That's important because on my website, it doesn't work with the / at the end of result       if ($result[strlen($result) - 1] == '/') {         $result = substr($result, 0, strlen($result) - 1);       }       // Create the $_GET with the filter       foreach ($parts as $part) {         list($key, $value) = explode('=', $part);         $_GET[$key] = $value;         // Add this because the pager use the $_REQUEST variable to be set         $_REQUEST[$key] = $value;       }     }   } } 

And then when you create a menu entry, you put the link to apache solr : search/apachesolr_search/?filters=tid:13

And create a url alias for search/apachesolr_search/?filters=tid:13 like products/tv.html

Found via: http://drupal.org/node/783836#comment-4136475

 
 
 
 
3
 
vote

您可以使用 solr视图为您的网站搜索。

  1. 创建一个solr视图。
  2. 使用所需的路径添加页面显示
  3. 将搜索文本添加为​​过滤器。
  4. 块中的暴露形式
  5. 将块放在您希望搜索框中的位置。
 

You could use solr views for your site search.

  1. Create a solr view.
  2. Add a page display with the path you want
  3. Add search text as a filter.
  4. Exposed form in block
  5. Put the block where you want your search box to go.
 
 
 
 
2
 
vote

签出添加与hook_menu的自定义搜索路径在不断发展的网站上。它谈到他们如何编写自定义模块,为他们的solr搜索创建友好的URL。你可能需要稍微调整它,但这是一个很好的起点。

 

Check out Adding custom search paths with hook_menu by the guys at Evolving Web. It talks about how they wrote a custom module to create friendly URLs for their Solr searches. You'll probably need to tweak it a bit, but it's a good starting point.

 
 
1
 
vote

创建一个新的菜单回调如何,如下行道,以使Apachesolr返回结果在该路径?

  $menu['search']['page callback'] = 'apachesolr_search_view';   
 

What about creating a new menu callback like the following to make apachesolr return results at that path?

$menu['search']['page callback'] = 'apachesolr_search_view'; 
 
 
1
 
vote

或者您可以只修改其中的贡献模块: apache solr自定义路径。

 

Or you can just modify a contributed module that does this: Apache Solr Custom Path.

 
 
 
 
0
 
vote

如果您只想将搜索/ apachesolr_search /更改为其他东西,例如'库存',您可以尝试全局重定向模块。

诀窍是创建2个别名 - 一个用于搜索/ apachesolr_search /(对于刻面项目),另一个没有追踪斜杠(用于主搜索页面)。全局重定向可能拒绝为同一目的地创建2个别名,但您可以直接插入DB。

 

If you just want to change search/apachesolr_search/ to something else, for example 'inventory', you can try Global redirect module.

The trick is to create 2 aliases - one for search/apachesolr_search/ (for faceted items) and another one without trailing slash (for the main search page). Global redirect might refuse to create 2 aliases for the same destination, but you can insert it into the db directly.

 
 

相关问题

37  什么是正确使用EntityFieldQuery?  ( Whats the proper use of entityfieldquery ) 
在drupal 7中, node_load_multiple() 使用 $conditions 参数指定的API文档已被弃用,支持使用 EntityFieldQuery 。如何使用该类来生成节点ID列表,以便与 node_load_multiple() 一起使用?是否有其他用例? ...

90  是否会影响未启用的模块会影响性能?  ( Do non enabled modules affect performance ) 
具有垂直模块,但未使能对Drupal站点的性能有任何影响? 要换句话说,将删除Drupal站点上的禁用模块对性能有正影响? ...

9  如何加载WYSIWYG API插件所需的额外JavaScript文件,在节点/编辑页面上?  ( How do you load extra javascript files required for wysiwyg api plugin on node e ) 
我正在使用WYSIWYG API模块为Drupal 7构建插件,该模块将为支持的编辑器的工具栏添加一个按钮。 我正在使用 hook_wysiwyg_plugin() 挂钩在编辑器工具栏上创建一个新的按钮,但我需要加载其他一些JavaScript文件。 hook_wysiwyg_plugin() 钩子似乎允许您指定...

6  如何确定当前页面是否是搜索结果页面?  ( How to determine if the current page is a search results page ) 
如果当前页面是Apache Solr搜索结果页面,我如何在模块或主题中确定? ...

5  重建ImageCache  ( Rebuild imagecache ) 
我每个节点有一个图像域,它通过ImageCache运行。由于ImageCache缓存按需,因此在首次请求之前不会创建缓存文件/变体。因此,如果我更新一堆图像,重新部署或以其他方式吹整个缓存,这取决于第一个访问该文件的访问者。 如何才能备用用户加载时间并手动重建整个缓存? 最后一次提出来,我以编程方式加载了与jQu...

3  视图2条件过滤器  ( Views 2 conditional filter ) 
如何将条件安装程序应用于视图(使用视图2)? 例如: 我有一个视图,它使用节点上的过滤器显示多个不同节点类型的预告:[博客条目,论坛主题,用户配置文件] 这适用于显示这些类型的所有节点,但假设我只想显示用户的个人资料,如果它也有图片(以及所有其他类型)。 ...

3  是否有一个可以处理MIDI文件的媒体处理模块?  ( Is there a media handling module that can handle midi files ) 
我一直在使用 mp3播放器提供一个页面mp3播放器,但我也需要能够处理MIDI文件。现在我可以做的最好的就是允许它们上传到"MP3文件" 字段中,但是当它呈现节点时,它只是给出了文件的链接,这意味着您必须导航到文件(或打开它在一个新标签中,浏览器播放它。 ...

5  删除用户时会导致站点挂起的内容?  ( What can cause a site to hang when deleting a user ) 
当我尝试删除用户时,整个站点挂起,即drupal不再响应了。什么会导致它? 该站点没有安装任何特殊的用户配置文件模块。 编辑: 只有一个自定义(自制)模块,带有Hook_User,它打开 $op 。 "删除" 案例外观未验证: case 'delete': $sql = "DELETE FROM {m...

16  如何在Drupal 7的一页上获得超过10个搜索结果?  ( How can i get more than 10 search results on one page in drupal 7 ) 
默认搜索页面仅显示10个结果。如何更改它以显示无限数量的结果? ...

6  从视图中重复分类分类术语  ( Duplicate taxonomy terms from view ) 
所以我尚未能够找到解决方案,而无需使用预处理函数来检查重复或仅使用"标签" 模块。很好,可以封闭。 如何配置(块)视图以显示词汇表的术语列表,每个术语显示一次(也许是指示它使用的次数的数字) - 即使术语可以由多个节点? "截然不同" 没有工作..字段'分类:所有术语'和'分类:术语'都会产生类似的重复项目,当该术...

80  任何方法为单页/节点添加CSS?  ( Any way to add css for a single page node ) 
我正在清理我的大疯狂风格的表格(可能与未来的问题有关),我想知道将自定义CSS添加到特定节点或页面的最佳方法。 特别是,我的工作网站的主页是面板页面,它有一堆不同的造型。现在,CSS刚刚包含在主题样式表中。 有没有办法说,"如果这是节点foo,则添加foo.css" ?是 css注射器我正在寻找什么? i 可能对其...

12  如何管理Drupal网站上的协作发展?  ( How do i manage collaborative development on a drupal site ) 
我在Drupal网站上使用另一个开发人员。我们一直在努力在没有彼此的情况下同时找到在网站的不同部分工作的好方法。我们已经尝试过在网站的同一开发实例上工作,但我们经常踩到其他人脚趾,或者用一些不好的代码延续网站,使其无法继续工作,直到它得到解决。所以我们搬到了分开的开发实例。但现在将我们的工作合并到网站的单一实例中是一...

4  如何使用子主题覆盖主题的Template.php的单一函数?  ( How to override single function of themes template php using sub theme ) 
目标: drupal 7子主题开发 我不想覆盖整个template.php文件。我只是想覆盖template.php文件的单一函数。 ...

5  使用数据库的良好做法  ( Good practices working with databases ) 
我正在学习drupal,我想开发一个网站,主要是它的数据库。 我已经拥有数据库的扩展实体关系模型(类型的复杂)。 在创建要由drupal使用的数据库时,采取的正确方向是什么,创建它手动,并使用php在drupal中进行查询,因为它是从头开始的php + mysql站点? Drupal是否提供了更容易的方法来做这件事?...

17  如何在有多个功能有多个功能时选择要使用的模块?  ( How do i choose which module to use when there are several options for the same ) 
它并不罕见,找到提供基本相同的功能的多个模块。例如,有许多垃圾邮件控制模块提供极为相似的功能(例如, spamicide 和)。并且有很多不同的分类模块可以做类似的事情。因此,当多个模块满足我的要求时,我应该如何选择使用哪一个? ...

5  如何每次查看节点时执行操作?  ( How to perform an operation every time a node is viewed ) 
在编写模块时,我如何每次用户查看节点时执行一次操作? ...

0  如何生成一个列表,其中包含哪些空格?  ( How to generate a list of which features are enabled in which spaces ) 
我正在使用有机组,特征和空格运行一个Drupal 6.x站点,我对生成一个空格启用的空格的列表有兴趣。优选地,具有沿Y轴的空间的表,以及沿X轴的特征。 关于如何生成此的任何想法?我可以使用视图生成组空间列表,但无法找到已启用功能的字段。 ...

5  批量保存节点与文件字段  ( Bulk saving nodes with a file field ) 
我正在为笨拙网站创建批量上载函数的进度。使用Flash我能够将文件上传到应该能够处理文件的特定URL。 我想做什么,不仅仅是上传文件,而是使用保存到已使用CCK设置的文件字段的文件创建特定类型的节点。由于这些是音频文件,因此文件字段处理文件是重要的,因此可以使用GetID3模块提供其他元数据。 我看了代码/ doc,...

3  如何处理博客标签在贡献主题中?  ( How to handle blog tags in a contrib theme ) 
在博客或博客的网站中,分类通常用于标签和类别。 在Drupal 6中,Node.TPL.php文件可以使用$分类系统,如果它们需要访问与当前节点相关联的UnRended分类链接数组。该变量通常是通过Control主题假设来包含帖子标记和或类别,并且相应地呈现。 在Drupal 7中,$分类学不再可用。 是什么选择...

11  hook_preprocess_page():如何讲述视图页面?  ( Hook preprocess page how to tell a views page ) 
im写一个需要在视图页面中插入一些javascript和css文件的自定义模块。 im使用hook_preprocess_page,但我无法判断当前页面是否来自视图: function mymodule_preprocess_page(&vars) { var_dump($vars); //outpu...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.