Views tarafından oluşturulan bir bloğa CSS sınıfları nasıl eklenir? (Üretilen içeriğe DEĞİL, bloğun kendisi!)


8

Ben neden bilmiyorum ama Görüntüleme oluşturduğu bloklarına (görünümün makine adını örneğin gibi) "insan tarafından okunabilir" CSS sınıf adlarını eklemez ( yalnızca kendi sınıflarını ekler oluşturulan "içerik" kısmı ne zaman görünüm düzenleyicideki " CSS sınıfı " kısmına sınıf ekleme (aşağıdaki ekran görüntülerine bakın!)).
Bloklara yalnızca olağan block block-viewsve muhtemelen contextual-links-regionCSS sınıflarını ekler ve bunun gibi benzersiz bir kimlik (sınıf değil) block-views-3d8f7966168beeec655c8ead69336789oluşturur : (deltası bu oluşturulan karma kodudur). Görünümler bloğunu değiştirirken bu sınıflar / kimlikler değişebileceğinden,
bu sınıflar ve kimlikler için CSS kuralları yazmak mantıklı değildir .block-views-3d8f7966168beeec655c8ead69336789 { /* ... */ }.

hook_block_view_alter()Oluşturulan karma deltası nedeniyle bu blokları bile tanımlayamıyorsam, bir uygulamaya bazı özel CSS sınıflarını nasıl ekleyebilirim ?


Block Class kullanmak istemiyorum , çünkü sadece bir veya iki Views tarafından oluşturulan bloğa bazı sınıflar eklemek için bir overkill gibi hissediyorum (BTW modülü kontrol ettim ve TÜM kontrol eder çünkü SELECT css_class, module, delta FROM {block_class}sorgu hissediyorum block_class_preprocess_block()blok gizli olsa bile sınıflar ekledi ...).

Bu yüzden kendi modülümden çözmek istiyorum.


DÜZENLE

Bir örnek:

Makine adı ve eklenen CSS sınıflarıyla ilgili görüşüm: Görünüm - makine adı ve sınıfı

Denetçide oluşturulan bloğun HTML kodu: Görünüm - denetleyicide oluşturulan bloğun HTML kodu

Yanıtlar:


7

İlk. "Kare" ye sahipsiniz - çünkü makine adını çok uzun görüntülüyorsunuz.

İkincisi - görüntülemek için kendi sınıflarınızı ekleyebilirsiniz

resim açıklamasını buraya girin


Görünüm bloklarıyla ilgili ekran görüntüsü, değil mi?
cherouvim

hayır - görünüm düzenleme sayfasında - admin / structure / views / view / [youviewname]
Gaydabura

1
"Karma" var - çünkü makine adını çok uzun görüntülüyorsunuz. " - ve neden önemli? CSS stil sayfalarında GERÇEKTEN uzun sınıf adlarına da herhangi bir sorun yaşamadan kurallar ekleyebilirim ... İşaretlediğiniz "CSS sınıfı" bölümü doğru DEĞİL, çünkü bu sınıflar yalnızca "içerik" bölümüne oluşturulur - bu benim başlattığım şey bu ile soru! Bu yüzden içeriği sarmalayıcı sınıfları eklemek zorunda . Orijinal soruya yeni yapıştırdığım ekran görüntülerine bakın.
Sk8erPeter

tamam. bu durumda en basit yol, blok için özel şablonlar oluşturmaktır. Bu bağlantı yararlı olabilir drupal.org/node/1089656 - Şablon adı önerilerini açıklıyor
Gaydabura

Ama bu şekilde bir block--views--3d8f7966168beeec655c8ead69336789.tpl.phpdosya kullanmak zorunda kaldım ve bu durumda, bir if($variables['block']->delta == '3d8f7966168beeec655c8ead69336789')koşul kullandım gibi aynı noktadayım hook_preprocess_block(). Bundan kaçınmak istediğim şey bu, çünkü kancamda daha insan tarafından okunabilir bir isim kullanabileceğimi düşündüm. Örneğin, görünümü aynı parametrelerle başka birine taşımak istersem, öncekini silerim, ancak aynı makine adını ve CSS sınıflarını kullanırım, ancak oluşturulan benzersiz karma değişir mi? Bu durumda, değişikliklerimi kaybediyorum.
Sk8erPeter

2

Bu eski bir soru, ama uygun bir cevap yok. Ben de aynı problemle karşılaştım. Düşünebildiğim çözümler CSS ana seçici (henüz mevcut değil) VEYA bazı Drupal manipülasyonuydu.

Bir CSS sınıfı tanımlayan tüm görünüm bloklarına bir sarıcı CSS sınıfı eklemek için hook_preprocess_block ekledim. Bu önemsiz değil, bu yüzden kodumu buraya koyacağım. Bu kodla ilgili bir sorununuz varsa, tüm görünüm bloklarıyla çalışmayabilir, güncelleyin ve kendi sürümünüzü yayınlayın.

Örnek: CSS sınıfı "test" ile görünüm, CSS sınıfı "test sarıcısı" olan bir blokta yer alacaktır.

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

Benim hook_preprocess_block()için işe yaramadı. (Belki de bloğu doğrudan bir şablon dosyasından eklemem gerektiğinden views_embed_view().)

Ancak, iş hook_preprocess_views_view()için basit bir kontrol ile $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';
  }
}

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.