사용자 지정 검색을 만들려고하지만 막히는 중입니다. 내가 원하는 것은 사용자가 검색 할 위치를 선택할 수 있도록 dropdownbox를 갖는 것입니다. 이 옵션은 하나 이상의 콘텐츠 유형을 의미 할 수 있습니다.드루팔 (Drupal : 사용자 지정 검색 만들기
그래서 옵션 A를 선택하면 노드 유형 P, Q, R이 검색됩니다. 하지만 그는 그 결과를 제공하지 않을 수도 있지만 그 사용자에 대한 특정 데이터를 모으기 위해 테마로 사용되는 uid 만 제공 할 수 있습니다.
좀 더 명확하게하기 위해 사람들을 위해 llok을하고 싶다고 가정 해보십시오. 내가 검색하는 내용은 2 개의 콘텐츠 프로필 유형입니다. 그러나 당연히 그 결과로 표시하고 싶지는 않지만 사용자와 일부 데이터에 대한 좋은 그림이 필요합니다.
텍스트 필드와 드롭 다운 상자가있는 양식을 만드는 것으로 시작했습니다. 그런 다음 제출 핸들러에서 키를 생성하고 키와 함께 다른 페이지로 리디렉션했습니다. 이 페이지는 검색 기능과 마찬가지로 메뉴 후크에 정의되어 있습니다.
그 후 hook_view
으로 전화하여 node_search
을 호출하여 실제 검색을 수행하고 결과를 제공하고 싶습니다.
불행히도, 그것은 잘못되었습니다. 검색 버튼을 클릭하면 404가 표시됩니다.
하지만 올바른 방향으로 가고 있습니까? 이 방법으로 맞춤 검색을 만들 수 있습니까?
당신의 도움을 위해 Thx.
<?php
// $Id$
/*
* @file
* Searches on Project, Person, Portfolio or Group.
*/
/**
* returns an array of menu items
* @return array of menu items
*/
function vm_search_menu() {
$subjects = _vm_search_get_subjects();
foreach ($subjects as $name => $description) {
$items['zoek/'. $name .'/%menu_tail'] = array(
'page callback' => 'vm_search_view',
'page arguments' => array($name),
'type' => MENU_LOCAL_TASK,
);
}
return $items;
}
/**
* create a block to put the form into.
* @param $op
* @param $delta
* @param $edit
* @return mixed
*/
function vm_search_block($op = 'list', $delta = 0, $edit = array()) {
switch ($op) {
case 'list':
$blocks[0]['info'] = t('Algemene zoek');
return $blocks;
case 'view':
if (0 == $delta) {
$block['subject'] = t('');
$block['content'] = drupal_get_form('vm_search_general_form');
}
return $block;
}
}
/**
* Define the form.
*/
function vm_search_general_form() {
$subjects = _vm_search_get_subjects();
foreach ($subjects as $key => $subject) {
$options[$key] = $subject['desc'];
}
$form['subjects'] = array(
'#type' => 'select',
'#options' => $options,
'#required' => TRUE,
);
$form['keys'] = array(
'#type' => 'textfield',
'#required' => TRUE,
);
$form['submit'] = array(
'#type' => 'submit',
'#value' => t('Zoek'),
);
return $form;
}
function vm_search_general_form_submit($form, &$form_state) {
$subjects = _vm_search_get_subjects();
$keys = $form_state['values']['keys']; //the search keys
//the content types to search in
$keys .= ' type:' . implode(',', $subjects[$form_state['values']['subjects']]['types']);
//redirect to the page, where vm_search_view will handle the actual search
$form_state['redirect'] = 'zoek/'. $form_state['values']['subjects'] .'/'. $keys;
}
/**
* Menu callback; presents the search results.
*/
function vm_search_view($type = 'node') {
// Search form submits with POST but redirects to GET. This way we can keep
// the search query URL clean as a whistle:
// search/type/keyword+keyword
if (!isset($_POST['form_id'])) {
if ($type == '') {
// Note: search/node can not be a default tab because it would take on the
// path of its parent (search). It would prevent remembering keywords when
// switching tabs. This is why we drupal_goto to it from the parent instead.
drupal_goto($front_page);
}
$keys = search_get_keys();
// Only perform search if there is non-whitespace search term:
$results = '';
if (trim($keys)) {
// Log the search keys:
watchdog('vm_search', '%keys (@type).', array('%keys' => $keys, '@type' => $type));
// Collect the search results:
$results = node_search('search', $type);
if ($results) {
$results = theme('box', t('Zoek resultaten'), $results);
}
else {
$results = theme('box', t('Je zoek heeft geen resultaten opgeleverd.'));
}
}
}
return $results;
}
/**
* returns array where to look for
* @return array
*/
function _vm_search_get_subjects() {
$subjects['opdracht'] =
array('desc' => t('Opdracht'),
'types' => array('project')
);
$subjects['persoon'] =
array('desc' => t('Persoon'),
'types' => array('types_specialisatie', 'smaak_en_interesses')
);
$subjects['groep'] =
array('desc' => t('Groep'),
'types' => array('Villamedia_groep')
);
$subjects['portfolio'] =
array('desc' => t('Portfolio'),
'types' => array('artikel')
);
return $subjects;
}
내가 한 것처럼 다른 맞춤 검색에 대한보기를 사용하지만 실적이 좋지 않습니다. 면 맞춤 검색 아직 발견하지 못했습니다. – eddy147
그것은 꽤 멋지다 - 전체 패싯으로 된 검색 개념이 그렇듯이. 실적이 걱정된다면 Search Lucene 또는 Apache Solr를 살펴볼 수도 있습니다. –
Btw, 패싯 검색은 뷰에 연결되기 때문에 뷰를 사용하여 검색 결과를 표시 할 수 있습니다. –