Apache solr検索URLを変更するにはどうすればよいですか?

drupal.stackexchange https://drupal.stackexchange.com/questions/1

  •  16-10-2019
  •  | 
  •  

質問

デフォルトのapache solr urlパスを「search/apachesolr_search/term」から他の何かに変更するにはどうすればよいですか?

役に立ちましたか?

解決

私が通常これをした方法は、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']);
  }
}

他のヒント

Apachesolr検索モジュールのみを使用している場合、検索パスを変更することは自明ではありません。コア検索モジュールに依存するため、パスはほぼハードコーディングされています。 Search/{module}/%menu_tailに依存します。あなたが見たら search_view(), 、検索モジュールのコールバック、あなたはそれが呼び出すことがわかります search_get_keys(), 、検索キーがパスの特定の部分にあることを期待しています。 Apachesolr検索モジュールは、この関数を使用してキーを取得するため、単純なhook_menu_alter()を実装することで単独で動作しません。

ここで別の答えで述べたように、あなたがビュー3.xを実行できる場合、あなたの最善の策は Apachesolrビューモジュール. 。このモジュールを使用すると、検索結果の数のカスタムパスを簡単に定義できます。

3.xを実行できない場合は、フォームAlter(具体的にはSearch_Form)とカスタムメニューコールバックの組み合わせを使用して、デフォルトの検索パスを正常に変更する必要があります。

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

Search/apachesolr_search/?filters = tid:13 like dike dults products/tv.htmlのURLエイリアスを作成する

経由で見つかりました: http://drupal.org/node/783836#comment-4136475

使用できます solrビュー サイト検索用。

  1. solrビューを作成します。
  2. 必要なパスでページ表示を追加します
  3. 検索テキストをフィルターとして追加します。
  4. ブロック内の露出フォーム
  5. 検索ボックスを使用したい場所にブロックを置きます。

チェックアウト fook_menuを使用してカスタム検索パスを追加します Evolving Webの人たちによって。 SolR検索のフレンドリーなURLを作成するカスタムモジュールをどのように作成したかについて説明しています。おそらく少し微調整する必要がありますが、それは良い出発点です。

次のような新しいメニューコールバックを作成して、そのパスでApachesolrを返す結果を作成するのはどうですか?

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

または、これを行う貢献したモジュールを変更するだけです。 Apache solrカスタムパス.

検索/ apachesolr_search/を変更したい場合は、たとえば「在庫」など、他の何かに変更したい場合は、試すことができます。 グローバルリダイレクト モジュール。

トリックは、2つのエイリアスを作成することです。1つは検索/ apachesolr_search/(ファセットアイテム用)、もう1つはトレーニングスラッシュ(メイン検索ページ用)のないものです。 Global Redirectは、同じ宛先の2つのエイリアスの作成を拒否する場合がありますが、DBに直接挿入できます。

ライセンス: CC-BY-SA帰属
所属していません drupal.stackexchange
scroll top