Varsayılan Apache Solr URL yolunu "arama / apachesolr_search / term" den başka bir şeye nasıl değiştirebilirim?
Varsayılan Apache Solr URL yolunu "arama / apachesolr_search / term" den başka bir şeye nasıl değiştirebilirim?
Yanıtlar:
Genellikle bunu yaptığım şekilde hook_menu_alter () uygulamaktır. Daha sonra URL'yi tam olarak seçtiğiniz şekilde özelleştirebilirsiniz:
/**
* 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']);
}
}
Yalnızca apachesolr arama modülünü kullanıyorsanız arama yolunu değiştirmek önemsizdir. Çekirdek arama modülüne bağlı olduğu için yol neredeyse sabit olarak kodlanmıştır. Bu, arama / {module} /% menu_tail öğesine bağlıdır. Eğer bakarsanız search_view () , arama modülü için geri arama, bunu çağırır olduğunu göreceksiniz ) (search_get_keys arama tuşları yolunun belli bir kısmında olmasını bekler, hangi. Apachesolr arama modülü de anahtarları almak için bu işlevi kullanır, bu nedenle basit bir hook_menu_alter () uygulamak kendi başına çalışmaz.
Burada başka bir cevapta belirtildiği gibi, Views 3.x'i çalıştırabiliyorsanız, en iyi bahsiniz apachesolr views modülünü kullanmaktır . Bu modülle, arama sonuçları için istediğiniz sayıda özel yolu kolayca tanımlayabilirsiniz.
3.x çalıştıramazsanız, varsayılan arama yolunu başarılı bir şekilde değiştirmek için form değiştirme (özellikle arama_formu) ve özel menü geri çağrılarının bir birleşimini kullanmanız gerekir.
Settings.php dosyasına yerleştirirseniz bu işe yarayacaktır.
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;
}
}
}
}
Sonra bir menü girişi oluşturduğunuzda, apache solr: search / apachesolr_search /? Filters = tid: 13 bağlantısını koyarsınız.
Ve arama / apachesolr_search /? Filters = tid: 13 benzeri ürün / tv.html için bir URL takma adı oluşturun
Yoluyla bulundu: http://drupal.org/node/783836#comment-4136475
Site aramanız için solr görünümlerini kullanabilirsiniz .
Check out hook_menu ile özel arama yolları ekleme Gelişen Web de çocuklar tarafından. Solr aramalarında kolay URL'ler oluşturmak için nasıl özel bir modül yazdıklarından bahsediyor. Muhtemelen biraz ayarlamanız gerekecek, ancak bu iyi bir başlangıç noktası.
Bu yolda apachesolr sonuçları döndürmek için aşağıdaki gibi yeni bir menü geri araması oluşturmaya ne dersiniz?
$menu['search']['page callback'] = 'apachesolr_search_view';
Ya da yalnızca bunu yapan katkıda bulunan bir modülü değiştirebilirsiniz: Apache Solr Özel Yolu .
Search / apachesolr_search / öğesini başka bir şeye (örneğin 'envanter') değiştirmek istiyorsanız, Global yönlendirme modülünü deneyebilirsiniz .
İşin püf noktası, biri arama / apachesolr_search / (yönlü öğeler için) ve diğeri sondaki eğik çizgi olmadan (ana arama sayfası için) olmak üzere 2 takma ad oluşturmaktır. Genel yönlendirme, aynı hedef için 2 takma ad oluşturmayı reddedebilir, ancak doğrudan db'ye ekleyebilirsiniz.