보기 노출 양식을 테마로하는 방법?


12

여러 개의 노출 된 필터로 뷰를 만들었지 만보기에는보기 흉한 모양입니다.

여기에 이미지 설명을 입력하십시오

필드 셋에 전체를 래핑하고 게시 및 업데이트 된 입력 쌍과 같은 다른 요소를 그룹화하는 등 테마를 개선하고 싶지만 어떻게 해야하는지 잘 모르겠습니다.

var_dump 양식을 시도했지만 영원히 계속되는 것처럼 보이고 브라우저가 잠기므로 양식에 대해 쉽게 배울 수 없습니다.

또한 양식을 다른 양식의 필드 세트 하위로 배치하려고 시도했지만 모든 양식 ID 정보 등을 얻는 데 문제가있는 것으로 판명되었습니다 (필드 스타일링을 얻었음에도 불구하고).

누구든지 포인터가 있습니까?

최신 정보:

모듈에서 템플릿을 내 사이트의 테마 디렉토리로 복사하고 시작했습니다.

<fieldset>
    <legend>Filters</legend>

    <div class="views-exposed-form">
        <div class="views-exposed-widgets clear-block">
            <?php foreach($widgets as $id => $widget): ?>
                <div class="views-exposed-widget">
                    <?php if (!empty($widget->label)): ?>
                        <label for="<?php print $widget->id; ?>">
                            <?php print $widget->label; ?>
                        </label>
                    <?php endif; ?>
                    <?php if (!empty($widget->operator)): ?>
                        <div class="views-operator">
                            <?php print $widget->operator; ?>
                        </div>
                    <?php endif; ?>
                    <div class="views-widget">
                        <?php print $widget->widget; ?>
                    </div>
                </div>
            <?php endforeach; ?>
            <div class="views-exposed-widget">
                <?php print $button ?>
            </div>
        </div>
    </div>
</fieldset>

나는 날짜 필드를 페어링 방법을 알아낼 수없는 것 - 나는 hook_form_alter를 사용 (HTML에서 그들을 포장 할 수 있도록 내가 #prefix와 #suffix가없는 일 추가 않기 때문에 어떻게 든 위젯 속성을 수정해야 $widget->widget그들이 그렇게 출력을 차단)

답변:


22

테마 뷰의 노출 양식은 대부분의 양식처럼 작동하지 않고 자체 레이블 메커니즘을 사용하기 때문에 어렵습니다. 따라서 단순히 요소 form_alter를 추가 #prefix하고 후크에 후크를 사용할 수 없습니다 #suffix. 그러나을 사용 THEME_preprocess_views_exposed_form하면 고유 한 접미사 / 접두사 메커니즘을 만들 수 있습니다.

function THEME_preprocess_views_exposed_form(&$variables) {
  if ($variables['form']['#id'] == 'views-exposed-form-VIEWNAME-DISPLAYID') {
    foreach ($variables['widgets'] as $id => &$widget) {
      switch ($id) {
        case 'first_date_id':
          $widget->prefix = '<div class="date-widgets-wrapper">';
          break;
        case 'last_date_id':
          $widget->suffix = '</div>';
          break;
      }
    }
  }
}

템플릿 파일에서

<fieldset>
    <legend>Filters</legend>

    <div class="views-exposed-form">
        <div class="views-exposed-widgets clear-block">
            <?php foreach($widgets as $id => $widget): ?>
                <?php if (!empty($widget->prefix)) print $widget->prefix; ?>
                <div class="views-exposed-widget">
                    <?php if (!empty($widget->label)): ?>
                        <label for="<?php print $widget->id; ?>">
                            <?php print $widget->label; ?>
                        </label>
                    <?php endif; ?>
                    <?php if (!empty($widget->operator)): ?>
                        <div class="views-operator">
                            <?php print $widget->operator; ?>
                        </div>
                    <?php endif; ?>
                    <div class="views-widget">
                        <?php print $widget->widget; ?>
                    </div>
                </div>
                <?php if (!empty($widget->suffix)) print $widget->suffix; ?>
            <?php endforeach; ?>
            <div class="views-exposed-widget">
                <?php print $button ?>
            </div>
        </div>
    </div>
</fieldset>

7

sites / all / modules / views / theme에서 views-exposed-form.tpl.php를 테마 경로로 복사하여 템플릿을 무시할 수 있습니다.


또한 단지와 같은 패턴 특정 뷰를 오버라이드 (override) 할 수 있습니다 views-exposed-form--view_id.tpl.php또는 views-exposed-form--view_id--display_id.tpl.php, 더 많은 정보
user56reinstatemonica8


3

form['#theme']항목 에 무엇이 있는지 조사해야합니다 . 이 작업을 수행하는 더 좋은 방법 (보다 낫다 var_dump())이 사용 dsm($form)하거나 심지어하는 경우 kpr($form), devel 모듈 ( http://drupal.org/project/devel ) 을 설치하면이 기능을 사용할 수 있습니다 . form['#theme']약 7 개의 요소로 구성된 배열이어야합니다. 이러한 요소는이 양식이 렌더링 될 때 호출되는 테마 후크의 이름입니다. 그것들을 사용하여 폼을 테마로하는 자신 만의 방식을 구현할 수 있습니다.

항목 중 하나가 호출 views_exposed_form__VIEW_NAME__DISPLAY_ID됩니다.

모듈에 (있는 경우) hook_theme () 구현이 있어야합니다

function MYMODULE_theme($existing, $type, $theme, $path) {
  return array(
    'views_exposed_form__VIEW_NAME__DISPLAY_ID' => array(
      'function' => 'my_exposed_form_theme_function',
      'render element' => 'form',
    )
  );
}

// somwhere later in code

function my_exposed_form_theme_function($vaiables) {
  //$vaiables['form'] contains a form array
  //to display a form element call drupal_render($vaiables['form']['some element'])
  //don't forget to call drupal_render($form) 
  //after you are done with rendering individual elements
  //
  //you can use template_preprocess_views_exposed_form() from 
  // views/theme/theme.inc as an example

  return "concatenated results of multiple drupal_render() calls";
}

2

이전 상황에서 Hook_form_alter ()를 사용하여 접두사와 접미사를 추가하여 요소를 양식으로 묶어 스타일을 지정할 수 있습니다. 그래도 필드 세트를 래핑하는 것에 대해 확실하지 않습니다.

예.

$form['submitted']['full_name']['#prefix'] = '<div class="background">';        
$form['submitted']['message']['#suffix'] = '</div>';

1

Drupal의 hook_form_FORM_ID_alter를 사용하여 양식을 수정하십시오. 이것은 내 가격 필드에 £ 문자를 접두어로 붙이는 문제를 해결했습니다 (사용자 정의 모듈에 입력하십시오).

function THEME_form_views_exposed_form_alter(&$form, &$form_state, $form_id) {
   // check this is the right form
   if ($form['#theme'][0] == 'REPLACE_THIS') {
      // add the prefix
      $form['price']['min']['#prefix'] = "£";
   }
}


0

뷰의 편집 페이지에서 테마 정보를 확인할 수 있습니다 (오른쪽 하단). Drupal에서 화면의 다른 부분을 렌더링하기 위해 사용하는 템플릿 파일에 관한 정보를 제공합니다. 기본적으로 views 폴더에서 제공하는 템플릿 파일 (테마 폴더 내)이 사용되지만, 뷰가 표시되는 방식을 수정하려는 경우 해당 템플릿 파일을 사용자 정의 템플릿 파일로 덮어 쓸 수 있습니다. 자체 사용자 정의 테마 폴더 (또는이보기를 표시하는 데 사용될 테마)

이 테마 정보는 계층 구조에 따라 파일 이름을 지정하는 방법 (또는 뷰 자체 템플리트를 대체 할 템플리트 파일의 영향 범위)을 보여줍니다.

이제이 테마 정보는보기가이 특정보기를 렌더링하는 데 사용하는 모든 템플리트 파일을 표시하지 않을 수 있습니다.

따라서 sites / all / modules / views / theme로 이동하여 views-exposed-form.tpl.php를 복사하십시오 (이 경우 필터 렌더링을 위해 기본값을 무시하고 싶습니다!), 자신의 테마 폴더에 붙여 넣으십시오. 이제 동일한 방법을 따라 자신의 테마 폴더에 넣은이 재정의 템플릿 파일의 효과를 적절하게 변경하여 제어해야합니다. 예를 들어 views-exposed-form--보기 이름 창 name.tpl.php (보기의 편집 페이지에서 theme : information을 보면 명명법을 이해할 수 있습니다)

이제이 템플릿 파일의 개별 위젯 (필터 처리기에서 생성)에 CSS를 추가하면 해당 설정이 필터에 적용됩니다.

http://eureka.ykyuen.info/2011/07/25/drupal-theme-the-exposed-filter-in-views/를 방문하십시오 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.