ভিউ-উত্পন্ন ব্লকে সিএসএস ক্লাস কীভাবে যুক্ত করবেন? (এর উত্পন্ন সামগ্রীতে নয়, এটি ব্লক করুন!)


8

আমি জানি না, তবে ভিউগুলি তার দ্বারা নির্মিত ব্লকগুলিতে "মানব-পঠনযোগ্য" সিএসএস শ্রেণীর নামগুলি (যেমন দর্শনটির মেশিনের নাম) যুক্ত করে না ( এটি কেবল উত্পন্ন "সামগ্রী" অংশে তার ক্লাস যুক্ত করে যখন ভিউ এডিটরটিতে " সিএসএস ক্লাস " অংশে ক্লাস যুক্ত করা (নীচের স্ক্রিনশটগুলি দেখুন!)।
এটি কেবলমাত্র সাধারণ block block-viewsএবং সম্ভবত contextual-links-regionসিএসএস ক্লাসগুলি ব্লকগুলিতে যুক্ত করে এবং এর মতো একটি অনন্য আইডি তৈরি করে (শ্রেণি নয়): block-views-3d8f7966168beeec655c8ead69336789(কারণ এটির ব-দ্বীপটি হ্যাশ কোডটি উত্পন্ন করে)।
এই ক্লাস এবং আইডির জন্য সিএসএস বিধিগুলি লেখার অর্থ নেই (যেমন .block-views-3d8f7966168beeec655c8ead69336789 { /* ... */ }), কারণ ভিউ ব্লক পরিবর্তন করার সময় এই শ্রেণিগুলি / আইডিগুলি পরিবর্তিত হতে পারে।

hook_block_view_alter()যদি আমি এই ব্লকগুলি তাদের উত্পন্ন হ্যাশ ব-দ্বীপটির কারণে সনাক্ত করতে না পারি তবে একটি বাস্তবায়নের ক্ষেত্রে আমি কীভাবে কিছু কাস্টম সিএসএস ক্লাস যুক্ত করতে পারি ?


আমি ব্লক ক্লাসটি ব্যবহার করতে চাই না , কারণ আমি মনে করি এটি কেবল একটি বা দুটি ভিউ-উত্পন্ন ব্লকগুলিতে কিছু ক্লাস যুক্ত করার জন্য একটি ওভারকিলের মতো লাগে (বিটিডাব্লু আমি মডিউলটি পরীক্ষা করে দেখেছি এবং ওভারকিলের মতো SELECT css_class, module, delta FROM {block_class}কোয়েরি অনুভব করি block_class_preprocess_block(), কারণ এটি সমস্ত পরীক্ষা করে ক্লাস যুক্ত করা, এমনকি ব্লকটি গোপন থাকলেও ...)।

সুতরাং আমি এটি আমার নিজস্ব মডিউল থেকে সমাধান করতে চাই।


সম্পাদনা

একটি উদাহরণ:

মেশিনের নাম এবং যুক্ত সিএসএস ক্লাস সহ আমার ভিউ: দেখুন - মেশিনের নাম এবং শ্রেণি

পরিদর্শকটিতে উত্পন্ন ব্লকের এইচটিএমএল কোড: পরিদর্শকটিতে - উত্পন্ন ব্লকের এইচটিএমএল কোড দেখুন

উত্তর:


7

প্রথম। আপনার কাছে "হ্যাশ" রয়েছে - কারণ আপনি দেখেন মেশিনের নামটি অনেক দীর্ঘ।

দ্বিতীয় - আপনি দেখতে নিজের ক্লাস যোগ করতে পারেন

এখানে চিত্র বর্ণনা লিখুন


আপনার এই স্ক্রিনশটটি ব্লক দেখার জন্য সম্মান করেছে, তাই না?
চেরুভিম

না - এটি সম্পাদনা পৃষ্ঠাতে রয়েছে - অ্যাডমিন / কাঠামো / মতামত / ভিউ / [ইউভিউনাম]
গায়দাবুরা

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

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.