電話番号、住所などの特定のcckフィールドを検索結果ページに表示する必要があります。
私が見るようにsearch-result.tpl.php
、ありません$node->...
では、ノードフィールドを検索結果ページに取り込むにはどうすればよいですか?
[並べ替え]
うわー、その単純な:)
search-result.tpl.php
<?php if ($result['node']->field_name[0]['value']): ?>
<h4><?php print($result['node']->field_name[0]['value']); ?></h4>
<?php endif; ?>
あなたのテーマでは、 template_preprocess_search_result()
を使用できます
_function YOURTHEME_preprocess_search_result(&$variables) {
if ($variables['type'] == 'node') {
$node =& $variables['result']['node'];
//Do something here
}
}
_
または、_$op = 'search result'
_のカスタムモジュールに hook_nodeapi()
を実装することもできます。 hook_nodeapi($node, 'search result')
の結果は、_$info_split
_テンプレートの_search-result.tpl.php
_で利用できます。
一度カスタム検索を作成する必要がありました。カスタムクエリをデータベースに書き込むだけでなく、表示する金額の種類も選択できるカスタムモジュールを作成しました。モジュールで hook_search
にフックしました。あなたにアイデアを与えるために:
function yourmodule_search($op = 'search', $keys = NULL) {
switch ($op) {
//some code, basically a stripped version from what the API shows us
case 'search':
$find = do_event_search($keys); //the actual search
// Load results.
$results = array();
foreach ($find as $item) {
//iteration and adding certain elements to $resuls needned by Drupal
}
return $results;
}
}
あなたにとって興味深い部分は、do_event_search
が行う検索結果の取得です。
//all data comes from a queries to the database
$search_result[] = array ('link' => trim($link),
'snippet' => trim_text(i18n_get_lang() == "en" ? $row->description_en : $row->description_de),
'head' => trim_text(i18n_get_lang() == "en" ? $row->title_en : $row->title_de),
'type' => $type
);
ご覧のとおり、snippet
には検索ページに表示するテキストが含まれており、カスタムデータベースから特定の$row
を選択します。 APIの例は、結果を正しく表示するために必要なすべてのフィールドを示しています。
別の可能性は Display Suite を使用することです。これにより、ノードのインデックス付けと検索結果の表示をオーバーライドできます。
template_preprocess_search_result(&$ variables)関数(検索モジュールからコピーしてテーマのtemplate.phpファイルに配置)を使用し、$ variables変数(var_dump it)を使用してノード情報を取得して印刷できます