Làm cách nào để thêm các lớp CSS vào khối được tạo bởi Lượt xem? (KHÔNG với nội dung được tạo, chính khối đó!)


8

Tôi không biết tại sao, nhưng Chế độ xem không thêm tên lớp CSS "có thể đọc được" (ví dụ như tên máy của chế độ xem) vào các khối mà nó tạo ( nó chỉ thêm các lớp của nó vào phần "nội dung" được tạo khi thêm các lớp vào phần " lớp CSS " trong trình chỉnh sửa chế độ xem (xem ảnh chụp màn hình bên dưới!)).
Nó chỉ thêm các lớp CSS thông thường block block-viewsvà có thể contextual-links-regionvào các khối và tạo một id duy nhất (không phải lớp) như thế này: block-views-3d8f7966168beeec655c8ead69336789(vì delta của nó là mã băm được tạo này).
Không có nghĩa gì khi viết các quy tắc CSS cho các lớp và id này (như .block-views-3d8f7966168beeec655c8ead69336789 { /* ... */ }), bởi vì các lớp / id này có thể thay đổi khi thay đổi khối Lượt xem.

Làm cách nào tôi có thể thêm một số lớp CSS tùy chỉnh khi triển khai hook_block_view_alter(), nếu tôi thậm chí không thể xác định các khối này do hàm băm được tạo?


Tôi không muốn sử dụng Lớp khối , vì tôi cảm thấy nó quá mức khi chỉ thêm một số lớp vào một hoặc hai khối do Lượt xem (BTW Tôi đã kiểm tra mô-đun và tôi cảm thấy SELECT css_class, module, delta FROM {block_class}truy vấn block_class_preprocess_block()giống như quá mức, vì nó kiểm tra TẤT CẢ đã thêm các lớp, ngay cả khi khối bị ẩn ...).

Vì vậy, tôi muốn giải quyết nó từ mô-đun của riêng tôi.


BIÊN TẬP

Một ví dụ:

Quan điểm của tôi với tên máy và các lớp CSS được thêm vào: Xem - tên máy và lớp

Mã HTML của khối được tạo trong trình kiểm tra: Xem - mã HTML của khối được tạo trong trình kiểm tra

Câu trả lời:


7

Đầu tiên. Bạn có "băm" - vì bạn xem tên máy quá dài.

Thứ hai - bạn có thể thêm các lớp của riêng mình để xem

nhập mô tả hình ảnh ở đây


Đó là ảnh chụp màn hình bạn có liên quan đến khối xem, phải không?
cherouvim

không - đó là trên trang chỉnh sửa chế độ xem - quản trị viên / cấu trúc / lượt xem / lượt xem / [youviewname]
Gaydabura

1
"Bạn có" băm "- vì bạn xem tên máy quá dài." - Và tại sao nó lại là vấn đề? Tôi có thể thêm các quy tắc trong biểu định kiểu CSS vào THỰC SỰ tên lớp dài mà không gặp vấn đề gì ... Phần "lớp CSS" bạn đánh dấu là KHÔNG chính xác, vì các lớp này chỉ được tạo vào phần "nội dung" - đây là những gì tôi đã bắt đầu câu hỏi với! Vì vậy, tôi phải thêm các lớp vào trình bao bọc của nội dung. Xem ảnh chụp màn hình tôi vừa dán trong câu hỏi ban đầu.
Sk8erPeter

đồng ý. trong trường hợp này, cách đơn giản nhất là tạo các mẫu tùy chỉnh cho khối - bạn muốn thay đổi. liên kết này có thể hữu ích drupal.org/node/1089656 - nó giải thích các đề xuất tên Mẫu
Gaydabura

Nhưng theo cách này tôi đã phải sử dụng một block--views--3d8f7966168beeec655c8ead69336789.tpl.phptập tin, và trong trường hợp này, tôi ở cùng một điểm như thể tôi đã sử dụng một if($variables['block']->delta == '3d8f7966168beeec655c8ead69336789')điều kiện trong hook_preprocess_block(). Đây là những gì tôi muốn tránh, bởi vì tôi nghĩ rằng tôi có thể sử dụng một tên dễ đọc hơn cho con người của mình. Ví dụ, nếu tôi muốn di chuyển khung nhìn sang một khung nhìn khác có cùng tham số, tôi sẽ xóa khung nhìn trước đó, nhưng sử dụng cùng tên máy và các lớp CSS, nhưng hàm băm duy nhất được tạo thay đổi? Trong trường hợp này, tôi mất các sửa đổi của tôi.
Sk8erPeter

2

Đó là một câu hỏi cũ, nhưng không có câu trả lời thích hợp. Tôi đã gặp vấn đề tương tự. Các giải pháp tôi có thể nghĩ đến là bộ chọn cha mẹ CSS (chưa tồn tại) HOẶC một số thao tác Drupal.

Tôi đã thêm một hook_pre process_block để thêm một lớp CSS bao bọc cho tất cả các khối xem xác định một lớp CSS. Điều đó không tầm thường nên tôi sẽ đặt mã của mình ở đây. Nó có thể không hoạt động với tất cả các khối xem, nếu bạn gặp vấn đề với mã này, vui lòng cập nhật nó và đăng phiên bản của riêng bạn.

Ví dụ: Xem với "CSS" lớp CSS sẽ được chứa trong một khối với lớp "test-Wrapper" của lớp CSS.

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

Đối với tôi hook_preprocess_block()đã không làm việc. (Có lẽ vì tôi phải thêm khối trực tiếp từ tệp mẫu qua views_embed_view().)

Tuy nhiên, hook_preprocess_views_view()với một kiểm tra đơn giản cho $vars['view']->current_displaycông việc đã làm:

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';
  }
}

0

Cách dễ nhất đối với tôi là sao chép tệp block.tpl.php, đổi tên thành block--myregion.tpl.phpvà sau đó thêm các lớp của tôi vào trong đó.

Xem: Trang khối chủ đề .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.