답변:
에 액세스하여 hook_form_alter 내에서 뷰 객체에 액세스 할 수 $form_state['view']
있습니다. 이를 통해 특정 뷰를 식별 할 수 있습니다.
function mymodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'views_exposed_form') {
$view = $form_state['view'];
if ($view->name == 'my_view_machine_name' && $view->current_display == 'display_name') {
// alter your exposed form here
}
}
}
mymodule_form_views_exposed_form_alter()
대신에 사용하는 것이 좋습니다 . mymodule_form_alter
확인을 건너 뛸 수 있습니다 $form_id
.
내가 할 일은 한 걸음 물러서서이 후크를 등록하고 있는지 확인하는 것입니다. 종종 $form_id
변화.
디버깅 과정 :
drupal.org의 예제 코드 (내부 mymodule.module
또는 template.php
파일) :
<?php
/**
* Implements hook_form_alter().
*/
function mymodule_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'form_views_exposed_form') {
drupal_set_message("Form ID is : " . $form_id);
}
}
?>
당신은 많은 양식 ID가 인쇄 된 것을 볼 수 있습니다.보기 양식 노출 후크를 선택하고 거기서부터 작업하십시오.
또한 drupal 7을 사용하면 ID 별로 특정 양식을 직접 타겟팅 할 수 있습니다 .
예:
<?php
/**
* Implements hook_form_alter().
*/
function mymodule_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
drupal_set_message("Form ID is : " . $form_id);
}
?>
노출 된 양식을 여러 개 사용하는 경우 form alter 함수에서 $ form [ '# id']를 검사하여 특정보기를 확인할 수 있습니다.
마지막으로, 그래도 작동하지 않으면이 문제 큐를 검토하는 것이 좋습니다. 노출 된 필터에서 필터를 변경하는 방법
최근 에이 문제에 부딪 쳤지 만 사용자 지정 기능 대신 기능 모듈을 사용하고 있습니다. 이 문제를 해결하는 데 도움이되었습니다.
/**
* Implements hook_views_api_alter()
*/
function MY_FEATURE_views_api_alter(&$vars) {
if (isset($vars['MY_FEATURE'])) {
$vars['MY_FEATURE']['path'] = drupal_get_path('module', 'MY_FEATURE');
}
}
그리고 당신은 당신의 hook_form_views_exposed_form_alter () 사용할 수 있습니다
/**
* Implements hook_form_views_exposed_form_alter().
*/
function MY_FEATURE_form_views_exposed_form_alter(&$form, &$form_state) {
if($form['#id'] == 'views-exposed-form-search-products-page') {
$form['price'] = array(
'#type' => 'select',
'#size' => NULL,
'#options' => _getPriceOptions(),
);
}
}