é uma pena que o post de q0rban tenha sido votado tantas vezes, porque não vai funcionar - jhedstrom fornece uma descrição completa de por que simplesmente substituir o caminho com hook_menu_alter irá falhar e queimar.
aaronbauman
Respostas:
3
A maneira como normalmente faço isso é implementar hook_menu_alter (). Você pode personalizar o URL da maneira exata que escolher:
/**
* 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']);}}
Não é trivial alterar o caminho de pesquisa se você estiver usando apenas o módulo de pesquisa apachesolr. Como depende do módulo de pesquisa principal, o caminho é quase codificado. Depende da pesquisa / {module} /% menu_tail. Se você olhar em search_view () , o retorno de chamada para o módulo de pesquisa, verá que ele chama search_get_keys () , que espera que as chaves de pesquisa estejam em uma parte específica do caminho. O módulo de pesquisa apachesolr também usa essa função para obter chaves, portanto, implementar um simples hook_menu_alter () não funcionará por si só.
Como mencionado em outra resposta aqui, se você é capaz de executar o Views 3.x, sua melhor aposta é usar o módulo apachesolr views . Com este módulo, você pode definir facilmente qualquer número de caminhos personalizados para os resultados da pesquisa.
Se você não pode executar o 3.x, precisará usar uma combinação de retorno de chamada de alteração de formulário (especificamente, search_form) e menu personalizado para alterar com êxito o caminho de pesquisa padrão.
Isso deve funcionar se você o colocar em 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 websiteif($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 queryif($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 resultif($result[strlen($result)-1]=='/'){
$result = substr($result,0, strlen($result)-1);}// Create the $_GET with the filterforeach($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;}}}}
E então, quando você cria uma entrada de menu, coloca o link para apache solr: search / apachesolr_search /? Filters = tid: 13
E crie um alias de URL para search / apachesolr_search /? Filters = tid: 13 como products / tv.html
Confira Adicionando caminhos de pesquisa personalizados com hook_menu pelos caras da Evolving Web. Ele fala sobre como eles escreveram um módulo personalizado para criar URLs amigáveis para suas pesquisas no Solr. Você provavelmente precisará ajustá-lo um pouco, mas é um bom ponto de partida.
Se você quiser apenas alterar search / apachesolr_search / para outra coisa, por exemplo 'inventário', tente o módulo de redirecionamento global .
O truque é criar dois aliases - um para search / apachesolr_search / (para itens facetados) e outro sem barra (à página principal de pesquisa). O redirecionamento global pode se recusar a criar 2 aliases para o mesmo destino, mas você pode inseri-lo no db diretamente.
Respostas:
A maneira como normalmente faço isso é implementar hook_menu_alter (). Você pode personalizar o URL da maneira exata que escolher:
fonte
Não é trivial alterar o caminho de pesquisa se você estiver usando apenas o módulo de pesquisa apachesolr. Como depende do módulo de pesquisa principal, o caminho é quase codificado. Depende da pesquisa / {module} /% menu_tail. Se você olhar em search_view () , o retorno de chamada para o módulo de pesquisa, verá que ele chama search_get_keys () , que espera que as chaves de pesquisa estejam em uma parte específica do caminho. O módulo de pesquisa apachesolr também usa essa função para obter chaves, portanto, implementar um simples hook_menu_alter () não funcionará por si só.
Como mencionado em outra resposta aqui, se você é capaz de executar o Views 3.x, sua melhor aposta é usar o módulo apachesolr views . Com este módulo, você pode definir facilmente qualquer número de caminhos personalizados para os resultados da pesquisa.
Se você não pode executar o 3.x, precisará usar uma combinação de retorno de chamada de alteração de formulário (especificamente, search_form) e menu personalizado para alterar com êxito o caminho de pesquisa padrão.
fonte
Isso deve funcionar se você o colocar em settings.php:
E então, quando você cria uma entrada de menu, coloca o link para apache solr: search / apachesolr_search /? Filters = tid: 13
E crie um alias de URL para search / apachesolr_search /? Filters = tid: 13 como products / tv.html
Encontrado em: http://drupal.org/node/783836#comment-4136475
fonte
Você pode usar visualizações simples para a pesquisa no site.
fonte
Confira Adicionando caminhos de pesquisa personalizados com hook_menu pelos caras da Evolving Web. Ele fala sobre como eles escreveram um módulo personalizado para criar URLs amigáveis para suas pesquisas no Solr. Você provavelmente precisará ajustá-lo um pouco, mas é um bom ponto de partida.
fonte
Que tal criar um novo retorno de chamada de menu como o seguinte para fazer com que o apachesolr retorne resultados nesse caminho?
fonte
Ou você pode apenas modificar um módulo contribuído que faça isso: Caminho personalizado do Apache Solr .
fonte
Se você quiser apenas alterar search / apachesolr_search / para outra coisa, por exemplo 'inventário', tente o módulo de redirecionamento global .
O truque é criar dois aliases - um para search / apachesolr_search / (para itens facetados) e outro sem barra (à página principal de pesquisa). O redirecionamento global pode se recusar a criar 2 aliases para o mesmo destino, mas você pode inseri-lo no db diretamente.
fonte