it-swarm-ko.tech

Drupal 7의 노출 된 뷰 필터에서 hook_form_alter 사용

Views 3 및 Drupal 7에서 hook_form_alter()을 사용하는 데 문제가 있습니다.

뷰를 고유하게 식별하기 위해 if 문을 추가 할 수 없습니다. 내가 무엇을 넣든 if 문은 결코 사실이 아닙니다. 그러나 다음을 사용하여 form_id를 쉽게 사용할 수 있으므로 어디에서 잘못 가고 있는지 확실하지 않습니다!

if ($form_id == 'views_exposed_form') {
}

hook_form_alter()을 사용하여 내 단일 뷰를 고유하게 변경하려면 어떻게합니까?

12
SimonK

$form_state['view']에 액세스하여 hook_form_alter 내에서 뷰 객체에 액세스 할 수 있습니다. 이를 통해 특정 뷰를 식별 할 수 있습니다.

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
        }
    }
}
25
Mirroar

내가 할 일은 한 걸음 물러서서이 후크를 등록하고 있는지 확인하는 것입니다. 종종 $form_id의 변경 사항입니다.

디버깅 프로세스 :

  • 개발을 켭니다
  • D6과 같이 dsm ($ 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']를 검사하여 특정보기를 확인할 수 있습니다.

마지막으로, 그래도 작동하지 않으면이 문제 큐를 검토하는 것이 좋습니다. 노출 된 필터에서 필터를 변경하는 방법 여물통 form_alter 후크

18
chrisjlee

최근 에이 문제에 부딪 쳤지 만 사용자 지정 기능 대신 기능 모듈을 사용하고 있습니다. 이 문제를 해결하는 데 도움이되었습니다.

/**
 * 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(),
    );
  }
}
2
Vlad Moyseenko