व्यू-जनरेटेड ब्लॉक में CSS कक्षाएं कैसे जोड़ें? (इसकी उत्पन्न सामग्री के लिए नहीं, स्वयं ब्लॉक!)


8

मैं पता नहीं क्यों, लेकिन दृश्य "मानव पठनीय" CSS वर्ग नाम ब्लॉकों यह बनाता है (देखने के मशीन नाम उदा) की तरह नहीं जोड़ता है ( यह केवल करने के लिए अपनी कक्षाओं कहते हैं उत्पन्न "सामग्री" भाग जब दृश्य संपादक में " सीएसएस वर्ग " भाग में कक्षाएं जोड़ना (नीचे स्क्रीनशॉट देखें!)।
यह केवल सामान्य block block-views, और संभवतः contextual-links-regionCSS कक्षाओं को ब्लॉक (ओं) में जोड़ता है , और इस तरह एक अद्वितीय आईडी (वर्ग नहीं) block-views-3d8f7966168beeec655c8ead69336789उत्पन्न करता है : (क्योंकि इसका डेल्टा यह उत्पन्न हैश कोड है)।
इन वर्गों और आईडी (जैसे .block-views-3d8f7966168beeec655c8ead69336789 { /* ... */ }) के लिए सीएसएस नियमों को लिखने का कोई मतलब नहीं है , क्योंकि व्यू ब्लॉक को बदलने पर ये वर्ग / आईडी बदल सकते हैं।

मैं कुछ कस्टम सीएसएस वर्गों को कैसे लागू hook_block_view_alter()कर सकता हूं, अगर मैं इन ब्लॉकों को उनके उत्पन्न हैश डेल्टा की पहचान नहीं कर सकता हूं?


मैं ब्लॉक क्लास का उपयोग नहीं करना चाहता , क्योंकि मुझे लगता है कि यह एक या दो दृश्य-उत्पन्न ब्लॉकों में कुछ कक्षाएं जोड़ने के लिए एक ओवरकिल की तरह है (बीटीडब्ल्यू मैंने मॉड्यूल की जांच की, और मुझे ओवरकिल की तरह SELECT css_class, module, delta FROM {block_class}क्वेरी लगता block_class_preprocess_block()है, क्योंकि यह सभी की जांच करता है अतिरिक्त कक्षाएं, भले ही ब्लॉक छिपा हो ...)।

इसलिए मैं इसे अपने मॉड्यूल से हल करना चाहूंगा।


संपादित करें

एक उदाहरण:

मशीन के नाम और जोड़े गए सीएसएस वर्गों के साथ मेरा विचार: देखें - मशीन का नाम और वर्ग

निरीक्षक में उत्पन्न ब्लॉक का HTML कोड: इंस्पेक्टर में देखें - उत्पन्न ब्लॉक का HTML कोड

जवाबों:


7

प्रथम। आपके पास "हैश" है - क्योंकि आप देखते हैं कि मशीन का नाम बहुत लंबा है।

दूसरा - आप देखने के लिए अपनी खुद की कक्षाएं जोड़ सकते हैं

यहां छवि विवरण दर्ज करें


उस स्क्रीनशॉट का आपके पास व्यू ब्लॉक है, है ना?
चेरोविम

कोई - यह दृश्य संपादन पृष्ठ पर है - व्यवस्थापक / संरचना / विचारों / देखें / [youviewname]
Gaydabura

1
"आपके पास" हैश "है - क्योंकि आप मशीन का नाम बहुत लंबा है।" - और क्यों इससे फर्क पड़ता है? मैं सीएसएस स्टाइलशीट में नियम जोड़ सकता हूं, बिना किसी समस्या के लंबे वर्ग के नाम भी सच में ... आपके द्वारा चिह्नित "सीएसएस वर्ग" भाग सही नहीं है, क्योंकि ये कक्षाएं केवल "सामग्री" भाग में उत्पन्न होती हैं - यह वही है जो मैंने शुरू किया है के साथ सवाल! इसलिए मुझे सामग्री के आवरण में कक्षाएं जोड़ना होगा । उन स्क्रीनशॉटों को देखें जिन्हें मैंने अभी मूल प्रश्न में चिपकाया था।
Sk8erPeter

ठीक। इस मामले में सबसे सरल तरीका ब्लॉक के लिए कस्टम टेम्पलेट बनाना है - आप बदलाव चाहते हैं। इस लिंक उपयोगी हो सकता है drupal.org/node/1089656 - यह खाका नाम सुझाव बताते हैं
Gaydabura

लेकिन इस तरह मुझे एक block--views--3d8f7966168beeec655c8ead69336789.tpl.phpफ़ाइल का उपयोग करना पड़ा , और इस मामले में, मैं उसी बिंदु पर हूं जैसे कि मैंने किसी if($variables['block']->delta == '3d8f7966168beeec655c8ead69336789')शर्त का उपयोग किया हो hook_preprocess_block()। यह वही है जो मैं बचना चाहता था, क्योंकि मुझे लगा कि मैं अपने हुक में अधिक मानव-पठनीय नाम का उपयोग कर सकता हूं। उदाहरण के लिए, क्या होगा यदि मैं समान मापदंडों के साथ दूसरे में दृश्य को स्थानांतरित करना चाहता हूं, मैं पिछले एक को हटा देता हूं, लेकिन एक ही मशीन का नाम और सीएसएस वर्गों का उपयोग करता हूं, लेकिन उत्पन्न अद्वितीय हैश परिवर्तन? इस मामले में, मैं अपने संशोधनों को खो देता हूं।
Sk8erPeter

2

यह एक पुराना प्रश्न है, लेकिन इसका कोई उचित उत्तर नहीं है। मैं उसी समस्या को लेकर आया था। मैं जो समाधान सोच सकता था वह सीएसएस अभिभावक चयनकर्ता (जो अभी तक मौजूद नहीं है) या कुछ ड्रुपल हेरफेर।

मैंने एक सीएसएस वर्ग को परिभाषित करने वाले सभी दृश्य ब्लॉकों में एक आवरण सीएसएस वर्ग जोड़ने के लिए एक हुक_परप्रोसेसर_ब्लॉक जोड़ा। यह तुच्छ नहीं है इसलिए मैं यहां अपना कोड डालूंगा। यह सभी दृश्य ब्लॉकों के साथ काम नहीं कर सकता है, यदि आपके पास इस कोड के साथ कोई समस्या है, तो इसे अपडेट करने और अपना स्वयं का संस्करण पोस्ट करने के लिए स्वतंत्र महसूस करें।

उदाहरण: सीएसएस वर्ग "परीक्षण" के साथ देखें सीएसएस वर्ग "परीक्षण-आवरण" के साथ एक ब्लॉक में निहित होगा।

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.