web-dev-qa-db-ja.com

drupal 7で1つのコンテンツタイプに制限された複数のフィールドで検索を実装する方法

私はいくつかのフィールドを持つ新しいコンテンツタイプを作成しました(それらのいくつかは私が自分で作成したカスタムフィールドです)。次に、これらの各フィールドに検索機能を実装する必要があります。

つまり、これらのフィールドがある場合:

  • VideoCV(ビデオフィールド)
  • 職業(テキストフィールド)
  • 運転免許証(選択リスト)
  • 出生地域(分類用語)

これら4つのフィールドを持つ検索モジュールが必要なので、職業「エンジニア」を検索すると、その特定のフィールドに挿入されたデータのみが検索されます。

何をする必要がありますか?どの追加モジュールをインストールする必要がありますか?カスタムフィールドをどうすればよいですか?

5

コードでノードにアクセスする必要がある場合は、delmiのソリューションが機能するはずです。

既存のモジュールを使用する場合は、ビューが役立ちます。 NodeOneのビューに関するビデオチュートリアルが非常に役立つことがわかりました: http://dev.nodeone.se/node/781

2
Sam King

私はD7のエキスパートではありませんが、次のようなEntityFieldQueryを試すことができます。

$query = new EntityFieldQuery();
$entities = $query->entityCondition('entity_type', 'node')
                ->entityCondition('bundle', 'YOUR_CONTENT_TYPE_NAME')
                ->propertyCondition('status', 1)
                ->fieldCondition('YOUR_FIELD_NAME', 'value', $searchterm)
                // other conditions...
                ->propertyOrderBy('title')
                ->execute();
$nodes = entity_load('node', array_keys($entities['node']));
2
delmi

Views および Better Exposed Filters があなたにとってトリックになるのだろうか?ページビューを作成し、フィールドフィルターを公開します。次に、[詳細]列で、公開されたフィルターを構造>ブロックで表示するオプションを選択します。

1
davidgmar

ソリューション1

ビュー3は、ボックスからの質問に対するソリューションを提供します。 Global: Combine fieldsフィルター。

  1. フィールドを追加する

  2. 追加 Global: Combine fields filterで基準をフィルタリング

  3. フィルターの設定で組み合わせるフィールドをチェックします

表示スイートまたはティーザーモードを使用する場合-表示設定のフィールドを強制的に使用します。

ソリューション2

ビューフィルターが読み込まれます -良いモジュールです。しかし、「STRING個の公開されたフィルターのみにデータが入力される」という1つの問題があります。

詳細については、 ビュー1つの公開フィルターを複数のフィールドに適用する に関する問題を参照してください。

0
milkovsky

Finder モジュールを使用して、フィールド固有の検索を作成します(Drupalのコア検索はフィールド固有ではなく全文検索です)。以下は、モジュールのプロジェクトページからの抜粋です。

... Drupalサイト管理者は、フィールドやデータベース属性の値に基づいてノードやユーザーなどのエンティティを検索するための柔軟なファセット検索フォームを作成できます。

通常、Finderは次の目的で使用されます。

  • ノードまたはユーザーのグループを見つけるための検索ツールとして。
  • 基準に一致する特定のノードまたはユーザーページに移動する方法として。
  • Viewsモジュール表示用の公開フィルターの代替として。
0
rogerhoward

コンテンツタイプのビューを作成し、検索するすべてのフィールドを公開フィルターとして追加します。これにより、すべてのフィルターされたフィールド(またはこれが必要な場合は1つ)の入力要素を含む検索フォームが作成されます。入力された入力フィールドのみをフィルタリングし、他のフィールドは無視するように設定できます。

検索フォームをビューの上部に配置するか、別のブロックに移動するかを選択できます。

0
BetaRide