Views 생성 블록에 CSS 클래스를 추가하는 방법은 무엇입니까? (생성 된 컨텐츠가 아니라 블록 자체!)


8

내가 왜 모르겠지만, 조회수가 생성 블록 (뷰의 컴퓨터 이름을 예처럼) "사람이 읽을 수있는"CSS 클래스 이름을 추가하지 않습니다 ( 그것은 단지 그것의 클래스를 추가 생성 "내용"일부 경우 보기 편집기에서 " CSS 클래스 "부분에 클래스 추가 (아래 스크린 샷 참조).
평범 block block-views하고 가능한 contextual-links-regionCSS 클래스 만 블록에 추가하고 다음과 같이 고유 ID (클래스가 아님)를 block-views-3d8f7966168beeec655c8ead69336789생성합니다 (델타가 생성 된 해시 코드이기 때문에). Views 클래스를 변경할 때 이러한 클래스 / ID가 변경 될 수 있으므로
이러한 클래스 및 ID (예 :)에 CSS 규칙을 작성하는 것은 의미가 없습니다 .block-views-3d8f7966168beeec655c8ead69336789 { /* ... */ }.

hook_block_view_alter()생성 된 해시 델타로 인해 이러한 블록을 식별 할 수없는 경우 의 구현에 일부 사용자 정의 CSS 클래스를 추가하려면 어떻게 해야합니까?


내가 사용하지 않는 블록 클래스를 내가 그냥 BTW 내가 모듈을 확인 (하나 또는 두 개의 뷰가 생성 한 블록에 몇 가지 클래스를 추가하기위한 잔인한처럼 느끼기 때문에, 그리고 느낌 SELECT css_class, module, delta FROM {block_class}에 쿼리를 block_class_preprocess_block()그것을 모두를 확인하기 때문에, 잔인한처럼 블록이 숨겨져 있어도 클래스를 추가했습니다 ...).

그래서 내 모듈에서 해결하고 싶습니다.


편집하다

예를 들면 :

컴퓨터 이름과 추가 CSS 클래스가있는 내 견해 : 보기-기계 이름 및 클래스

인스펙터에서 생성 된 블록의 HTML 코드 : 보기-인스펙터에서 생성 된 블록의 HTML 코드

답변:


7

먼저. 컴퓨터 이름이 너무 길어서 "해시"가 있습니다.

둘째-자신의 수업을 추가하여 볼 수 있습니다

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


그 스크린 샷은 뷰 블록과 관련이 있습니다.
cherouvim

아니오-보기 편집 페이지에 있습니다-admin / structure / views / view / [youviewname]
Gaydabura

1
"컴퓨터 이름이 너무 길어서"해시 "가 있습니다." -왜 중요한가요? CSS 스타일 시트에 규칙을 추가해도 아무 문제없이 긴 클래스 이름에 규칙을 추가 할 수 있습니다. 표시 한 "CSS 클래스" 부분은 올바르지 않습니다. 이러한 클래스는 "컨텐츠"부분으로 만 생성되기 때문입니다. 질문! 따라서 내용 의 래퍼 에 클래스를 추가해야합니다 . 원래 질문에 방금 붙여 넣은 스크린 샷을 참조하십시오.
Sk8erPeter

확인. 이 경우 가장 간단한 방법은 블록에 대한 사용자 정의 템플릿을 작성하는 것입니다. 이 링크는 유용 할 수 있습니다 drupal.org/node/1089656- 그것은 템플릿 이름 제안을 설명합니다
Gaydabura

그러나이 방법으로 block--views--3d8f7966168beeec655c8ead69336789.tpl.php파일 을 사용해야 했고이 경우에는에서 if($variables['block']->delta == '3d8f7966168beeec655c8ead69336789')조건을 사용하는 것과 같은 시점 에 hook_preprocess_block()있습니다. 이것은 내가 인간이 읽을 수있는 이름을 내 후크에 사용할 수 있다고 생각했기 때문에 피하고 싶었습니다. 예를 들어, 동일한 매개 변수를 사용하여 뷰를 다른 뷰로 이동하려면 이전 뷰를 삭제하지만 동일한 컴퓨터 이름과 CSS 클래스를 사용하지만 생성 된 고유 해시 변경은 어떻게됩니까? 이 경우 수정 사항이 손실됩니다.
Sk8erPeter

2

그것은 오래된 질문이지만, 정답은 없습니다. 나는 같은 문제를 겪었다. 내가 생각할 수있는 솔루션은 CSS 부모 선택기 (아직 존재하지 않음) 또는 일부 Drupal 조작이었습니다.

CSS 클래스를 정의하는 모든 뷰 블록에 래퍼 CSS 클래스를 추가하기 위해 hook_preprocess_block을 추가했습니다. 그것은 사소한 것이 아니므로 여기에 코드를 넣을 것입니다. 이 코드에 문제가있는 경우 모든 뷰 블록에서 작동하지 않을 수 있습니다.이 코드를 업데이트하고 자신의 버전을 게시하십시오.

예 : CSS 클래스가 "test"인 뷰는 CSS 클래스가 "test-wrapper"인 블록에 포함됩니다.

function <MY_THEME>_preprocess_block(&$variables) {
    $default_display_id = 'default';
    // Trying to access the field:
    //     $display_id =      $variables['elements']['#views_contextual_links_info']['views_ui']['view_display_id']
    //     $default_display = $variables['elements']['#views_contextual_links_info']['views_ui']['view']->display['default']->display_options['css_class']
    //     $display =         $variables['elements']['#views_contextual_links_info']['views_ui']['view']->display[$display_id]->display_options['css_class']
    if (isset($variables['elements']['#views_contextual_links_info']['views_ui'])) {
        $view_ui = $variables['elements']['#views_contextual_links_info']['views_ui'];
        if (isset($view_ui['view_display_id'])) {
            $display_id = $view_ui['view_display_id'];
            if (isset($view_ui['view']) && property_exists($view_ui['view'], 'display') && isset($view_ui['view']->display[$display_id])) {

                $default_css_class = NULL;
                if (isset($view_ui['view']->display[$default_display_id])) {
                    $default_display = $view_ui['view']->display[$default_display_id];
                    if (property_exists($default_display, 'display_options') && isset($default_display->display_options['css_class'])) {
                        $default_css_class = $default_display->display_options['css_class'];
                    }
                }

                $view_css_class = NULL;
                $display = $view_ui['view']->display[$display_id];
                if (property_exists($display, 'display_options') && isset($display->display_options['css_class'])) {
                    $view_css_class = $display->display_options['css_class'];
                }

                $css_class = $view_css_class ? $view_css_class : $default_css_class;
                if ($css_class) {
                    $variables['classes_array'][] = "$css_class-wrapper";
                }
            }
        }
    }
}


1

나를 위해 hook_preprocess_block()작동하지 않았다. (아마도을 통해 템플릿 파일에서 직접 블록을 추가해야했기 때문에 views_embed_view())

그러나 hook_preprocess_views_view()간단한 검사로 $vars['view']->current_display작동했습니다.

function MYMODULE_preprocess_views_view(&$vars) {
  // 'MYBLOCK' usually comes as 'block' if this view only has one
  if ($vars['view']->name == 'MYVIEW' && $vars['view']->current_display == 'MYBLOCK') {
    // here I add a class that contains the current theme's name
    global $theme;
    $theme_name = array_pop(explode('/', (drupal_get_path('theme', $theme))));
    $vars['classes_array'][] = $theme_name.'-theme';
    // but you can simply do the following as well
    $vars['classes_array'][] = 'MYSTRING';
  }
}

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