দ্রুপাল 7 এ উন্নত মেনু থেরিং


15

আমি ওয়েবে ঘুরেছি এবং কাস্টম মেনুগুলি কীভাবে থিম করা যায় তা মোটেই সুস্পষ্ট নয়। আমি কয়েক ঘন্টা তাকিয়েছি এবং একটি মেনু তৈরি এবং এর আউটপুট কাস্টমাইজ করার প্রক্রিয়াটি শুরু থেকে শেষ হওয়া পর্যন্ত চিত্রিত করে এমন একটি পোস্টও পাইনি। দেখে মনে হচ্ছে এটি একটি বহু-পর্যায়ের প্রক্রিয়া:

  1. ড্রুপাল ইন্টারফেসের মাধ্যমে মেনু তৈরি করুন।
  2. template.phpআউটপুট থিম করতে আপনার ফাইলে একটি থিম ফাংশন তৈরি করুন ।
  3. এই মেনুটিকে কোনও ভেরিয়েবল হিসাবে যুক্ত করে কোনও টেমপ্লেট ফাইলে (কোনওভাবে) অনাবৃত করুন।
  4. themeটেম্পলেট ফাইলের মেনুতে ফাংশনটি কল করুন।

1 কাজ করা সহজ যথেষ্ট, সমস্যা আমি মধ্যে চালানো 2, 3, এবং 4 ডিফল্ট পৃষ্ঠা টেমপ্লেট এ খুঁজছি সঙ্গে, আমি দেখতে এটি পরিবর্তনশীল প্রধান মেনু অনাবৃত হয় $main_menu। পরে পৃষ্ঠার নীচে আপনি ফাংশনটি দেখতে পাবেন theme('links__system_main_menu', array('links' => $main_menu..., যার অর্থ এটি কোথাও উপযুক্ত নামযুক্ত থিম ফাংশনটি সন্ধান করছে এবং আউটপুট উত্পন্ন করতে এটি ব্যবহার করছে।

আমি জানি যদি আমি function theme_links__system_main_menu(&$variables) {...}আমার টেমপ্লেট.পিএফপি ফাইলটিতে রাখি তবে দ্রুপাল সেই ফাংশনটির বিপরীতে ব্যবহার করবে function theme_menu_links(&$variables) {...}

আমি যা জানি না তা হল ড্রুপাল কীভাবে সেই ফাংশনটির সাথে আমার তৈরি কাস্টম মেনুটিকে সংযুক্ত করে। উদাহরণস্বরূপ বলা যাক যে আমি একটি মেনু নামে পরিচিত My Menu। আমি কি আমার template.phpফাইল এবং থিমটিতে নিম্নলিখিত মেনুটির জন্য আউটপুট তৈরি করতে পারি?function theme_links__system_my_menu(&$variables) {...}

এছাড়াও, কোনও কীভাবে কোনও টেম্পলেট ফাইলের জন্য সেই কাস্টম মেনু উপলব্ধ করে? কীভাবে দ্রুপাল $main_menuপেজ.tpl.php এ পরিবর্তনশীলটি প্রকাশ করে ?

আমি মনে করি যে কীটি আমি এখানে অনুপস্থিত তা হ'ল কীভাবে আমার কাস্টম মেনুটিকে একটি টেমপ্লেট পৃষ্ঠায় উপস্থাপন করে এমন চলকটি এম্বেড করা যায়। যদিও বেশিরভাগ ক্ষেত্রে আমি মেনু তৈরির পরে কী করব তা সম্পূর্ণ হারিয়ে ফেলেছি।

সাহায্যের জন্য ধন্যবাদ.

সম্পাদনা: সম্ভবত আমি যা করছি তা পোস্ট করা উচিত। নীচে বিটা রাইডে আমার মন্তব্য অনুসারে, আমাকে <li>মেনু আইটেমগুলির উপাদানগুলিতে কাস্টমাইজড এইচটিএমএল ইনজেক্ট করতে হবে । বিশেষত, আমি টুইটার বুটস্ট্র্যাপ আইকন যুক্ত করছি।

উত্তর:


13

ড্রুপালের মেনুগুলির বাস্তবায়ন কিছুটা বিশেষ, এটি সর্বদা যেভাবে করা উচিত মনে হয় সেভাবে কাজ করে না।

প্রধান মেনু লিঙ্কগুলি কীভাবে পৃষ্ঠার টেমপ্লেটে পরিবর্তনশীল হিসাবে যুক্ত করা হয় সে সম্পর্কে আপনি টেমপ্লেট_প্রেসপ্রসেস_পেজ () এর মূল বাস্তবায়নটি একবার দেখে নিতে পারেন । আপনাকে এপিআই ডক্সে কিছুটা ড্রিল করতে হবে, তবে থিম_প্রসেস_পৃষ্ঠা () প্রয়োগের ক্ষেত্রে আপনি যে ফাংশনটি কল করতে চান সেটি হ'ল মেনু_নভিগেশন_লিঙ্কস () , যা মেনুতে লিঙ্কগুলির একটি অ্যারে ফিরিয়ে দেবে।

ড্রুপাল কোর এর পেজ. tpl.php ফাইলের 106 লাইনটি দেখে আপনি দেখতে পারবেন যে কীভাবে 'লিঙ্কস__সিস্টেম_মেনেন_মেনু' এর হুক দিয়ে থিম ( ) ফাংশনটিতে কল করে মূল মেনু লিঙ্কগুলি টেমপ্লেটে থিমযুক্ত হয় ।

তাত্ত্বিকভাবে, এই বাস্তবায়নটি স্ট্যান্ডার্ড নামকরণ কনভেনশন অনুসরণ করে একটি কাস্টম মেনুতে নকল করতে সক্ষম হওয়া উচিত। সুতরাং, টেম্পলেট.এফপি-তে আপনি থাকতে পারেন:

function THEMENAME_preprocess_page(&$variables){
  $variables['custom_menu'] = menu_navigation_links('menu-custom-menu');
}

function THEMENAME_links__menu_custom_menu(&$variables){
 //custom theme function here
}

এবং page.tpl.php এ আপনি এই জাতীয় কিছু যুক্ত করবেন:

<?php print theme('links__menu_custom_menu', array('links' => $custom_menu, 'attributes' => array('id' => 'custom-menu', 'class' => array('links', 'inline', 'clearfix')), 'heading' => t('Custom menu'))); ?>

তবে আপনার পৃষ্ঠার টেমপ্লেটে পরিবর্তনশীল হিসাবে কাস্টম মেনু যুক্ত করা প্রয়োজন। আপনি সহজেই ড্রুপাল অ্যাডমিন ইন্টারফেসের মাধ্যমে কাস্টম মেনুর ব্লককে পছন্দসই অঞ্চলে স্থাপন করতে পারেন। এছাড়াও, আপনি মেইন মেনু উত্সের জন্য সাইটের সেটিংস পরিবর্তন করতে পারেন , কার্যকরভাবে আপনার কাস্টম মেনুতে page.tpl.php- এ ডিফল্ট $ main_menu পরিবর্তনশীলকে প্রতিস্থাপন করে।

সম্পাদনা: আমি আপনার শেষ লক্ষ্যটি আইকনগুলির জন্য মেনু আইটেমগুলিতে কিছু কাস্টম এইচটিএমএল যুক্ত করার বিষয়ে আপনার সংযোজনটি কেবল দেখছি। আপনি কীভাবে এই আইকনগুলি যুক্ত করছেন তার উপর নির্ভর করে কয়েকটি পৃথক দ্রুপাল মডিউল বিকল্প রয়েছে।

মেনু আইকনস - আপনাকে মেনু আইটেমের সেটিংসের মাধ্যমে একটি চিত্র আপলোড করতে দেয় এবং স্বয়ংক্রিয়ভাবে সিএসএস তৈরি করে (কোনও টেমপ্লেটের মাধ্যমে কাস্টমাইজযোগ্য) যা মেনু আইটেমটির পটভূমি হিসাবে চিত্রটি যুক্ত করে।

মেনু বৈশিষ্ট্য - অ্যাডমিনের সেটিংসের মাধ্যমে আপনাকে প্রতিটি মেনু আইটেমে একটি কাস্টম ক্লাস যুক্ত করতে দেয়। প্রতিটি মেনু আইটেমে একবার একটি অনন্য ক্লাস যুক্ত হয়ে গেলে আপনি মেনু আইটেমটিতে আইকন যুক্ত করতে CSS ব্যবহার করতে পারেন বা মেনু আইটেমটিতে অতিরিক্ত এইচটিএমএল ইনজেক্ট করতে জাভাস্ক্রিপ্ট ব্যবহার করতে পারেন।


এটি আমার সমস্ত প্রশ্নের সঠিক উত্তর দেবে বলে মনে হচ্ছে। এটি একটি দুর্দান্ত উত্তর। আমি সঙ্গে সঙ্গে এটি চেষ্টা করব।
লেস্টার পিবডি

1
এটি কার্যকর হয়েছিল, তবে আমি প্রত্যেকের সর্বসম্মত মতামতকে হৃদয়ে নিয়েছি এবং আমি এই পদ্ধতিটি ব্যবহার করি না। আমি মেনু বৈশিষ্ট্য মডিউলটি ব্যবহার করেছি যা আপনি প্রস্তাবিত এবং নির্দিষ্ট মেনু আইটেমগুলিতে স্বতন্ত্র আইডি অর্পণ করেছিলেন এবং তারপরে আমার যেখানে প্রয়োজন হবে সেখানে সরাসরি এইচটিএমএল ইনজেক্ট করতে jQuery ব্যবহার করেছিলেন। টিপস জন্য ধন্যবাদ। +1
লেস্টার পিবডি

"আপনি সহজেই ড্রুপাল অ্যাডমিন ইন্টারফেসের মাধ্যমে কাস্টম মেনুটির ব্লককে পছন্দসই অঞ্চলে স্থাপন করতে পারেন" ++। আমি এই সমাধানটি সহজ সরল বলে মনে করি।
সিডিএমও

1

আপনি নিস মেনু মডিউলটি সন্ধান করতে পারেন । এটি সম্পর্কে একটি উদ্ধৃতি এখানে দেওয়া হয়েছে (মডিউলটির প্রকল্প পৃষ্ঠা থেকে):

... ড্রপ ডাউন / ডান / বাম প্রসারিত মেনু সক্ষম করে। এটি আইআই for এর জন্য সর্বনিম্ন জাভাস্ক্রিপ্ট সহ, বেশিরভাগ ব্রাউজারগুলির জন্য কেবল সিএসএস ব্যবহার করে। (সংস্করণ 2 জেএস অক্ষম করার বিকল্পের সাথে সমস্ত ব্রাউজারের জন্য সুপারফিশ jQuery প্লাগইন ব্যবহার করে এবং কেবল এটি ব্রাউজারগুলির জন্য সিএসএস-এ ফিরে যায় যা এটি পরিচালনা করতে পারে))

তিনটি শৈলী / প্রকার মেনু বর্তমানে সম্ভব: অনুভূমিক, মেনু ড্রপ ডাউন; উল্লম্ব, মেনু বাম দিকে উড়ে; উল্লম্ব, মেনু ডানদিকে উড়ে। একটি হ্যান্ডবুক পৃষ্ঠা রয়েছে যা সাইটগুলির একটি তালিকা সরবরাহ করে যা নিস মেনুগুলি ব্যবহার করে

ভাল মেনুগুলি এমন কোনও ব্লক তৈরি করে যা কোনও বিদ্যমান সাইট মেনুর সাথে সম্পর্কিত হতে পারে যা থিমের যেখানে সাধারণ ব্লকগুলি রাখা যেতে পারে সেখানেই স্থাপন করা যেতে পারে। থিমারদের জন্য, সরবরাহিত থিম ফাংশনগুলি ব্যবহার করে সরাসরি একটি মেনু হিসাবে নিস মেনু হিসাবে থিম করা সম্ভব হয় যাতে ব্লক প্রয়োজন হয় না। প্রাথমিক লিংক মেনুর জন্য একটি নির্দিষ্ট থিম ফাংশন উপলব্ধ। থিম ফাংশনগুলি কোনও বিকাশকারীকে তাদের তৈরির একটি কাস্টম মেনু ট্রিতে পাস করার অনুমতি দেয় (যেমন একটি দ্রুপাল মেনু ব্যবহার করে না)) ডকুমেন্টেশনে থিম ফাংশন কীভাবে ব্যবহার করতে হয় সে সম্পর্কে আরও তথ্য রয়েছে ।

মডিউলটি একটি সাধারণ, জেনেরিক রঙের স্কিম নিয়ে আসে যা থিমের সাধারণ স্টাইলশিটে ওভাররাইড সিএসএস যুক্ত করে বা একটি ভাল মেনুএস সিএসএস ফাইল তৈরি করে এবং নাইস মেনুকে তার নিজস্ব ডিফল্টের পরিবর্তে বিশ্বব্যাপী ব্যবহার করার জন্য পুরোপুরি ওভাররাইড করা যায় either থিম কনফিগারেশন অন্তর্ভুক্ত README.txt ফাইল এবং হ্যান্ডবুকে বেশ কয়েকটি সিএসএস ওভাররাইড উদাহরণ সরবরাহ করা হয়েছে ।


কেন কেউ এই উত্তরটি নিচে ভোট দিয়েছিল তা আমি দেখছি না। নিস মেনুসের সাহায্যে আপনি একটি পৃথক মেনু আইটেমটিকে লক্ষ্য করতে পারেন যেহেতু এটির নিজস্ব বর্গ রয়েছে। তারপরে আপনি সেই স্বতন্ত্র শ্রেণীর পটভূমি হিসাবে গ্রাফিক ব্যবহার করতে পারেন। আমি এটি বেশ কয়েকটি বড় প্রকল্পের আগেও করেছি।
স্ট্যান এসচার

2
আমি এটিকে ভোট দিয়েছি না, তবে আমি বলব যে এটি আমার জিজ্ঞাসা করা প্রশ্নের (গুলি) এর হৃদয়কে সম্বোধন করে না, যা মেনু আইটেমগুলির জন্য ড্রুপাল থেরিংয়ের মূলটি কীভাবে খনন করা যায়। এই কারণেই এই প্রশ্নগুলি কখনই সম্পূর্ণরূপে উত্তর পায় না, কারণ সবসময় এমন কিছু মডিউল থাকে যে কারও নাম ড্রপ করে। আমি মডিউলগুলির বিষয়ে চিন্তা করি না, আমি টেমপ্লেট কোডিং করতে চাই।
লেস্টার পিবডি

1
আমি ভোটও কম করি নি, তবে লেস্টার যা বলেছিলেন তাতে যুক্ত করতে চাই। আপনি যখন নিজের উত্তরে একটি মডিউল প্রস্তাব করেন তখন আপনাকে এটিও ব্যাখ্যা করতে হবে যে আপনি এটি কেন পরামর্শ দিচ্ছেন এবং কীভাবে এটি ওপিটির সমস্যা সমাধান করতে ব্যবহার করা যেতে পারে। এই বিবরণ ব্যতীত, আপনার উত্তর খুব সহায়ক না হিসাবে দেখা যেতে পারে এবং সম্ভাব্যভাবে ভোট দেওয়া হয় না। আমি এখানে আমার প্রথম কয়েকটি উত্তরগুলিতেও ভুল করেছি।
sheena_d

0

আপনি কী কাস্টমাইজ করতে চান তার উপর নির্ভর করে আপনার দৃষ্টিভঙ্গি অনেকটাই হিংস্র। সাধারণত আপনি বৃষ্টির সাথে সাথে আমি ড্রুপাল ইন্টারফেসের মাধ্যমে মেনু তৈরি করি। আমি টেমপ্লেট, হুকস এবং সিএসএসের নির্দেশাবলীটি আমার প্রয়োজন অনুসারে তা মুছে ফেলার জন্য ওভাররাইট করতে হবে তা অনুসন্ধান করতে আমি থিম বিকাশকারী মডিউল এবং ফায়ারব্যাগটি নিই।

আপনি টুইচিং শুরু করার কারণে আপনি যে বেস থিমটি ব্যবহার করছেন তা সাব থিম তৈরি করার বিষয়টি বিবেচনাযোগ্য। এটি আপনার বেস থিমটি আপডেট করা আরও সহজ করে তোলে।


আমাকে মেনু আইটেমগুলির <li> উপাদানগুলিতে কাস্টমাইজড এইচটিএমএল ইনজেক্ট করতে হবে। বিশেষত, আমি টুইটার বুটস্ট্র্যাপ আইকন যুক্ত করছি।
লেস্টার পিয়াবডি

0

এখানে একটি স্মার্ট কোড যা 2 বা 3 বা ততোধিক স্তরের সমস্ত মেনু আইটেমগুলিতে অ্যাক্সেস করতে পারে

এই কোডটি আপনার টিপিএল ফাইলের মধ্যে রাখুন বুস্ট্র্যাপ জেএস এবং সিএসএস শেষ সংস্করণগুলি কল করতে ভুলবেন না:

<!-- menu -->  

        <?php 

          # get menu with all levels 
          menu_tree_all_data('main-menu');
          $menu = menu_build_tree('main-menu');


          # help function for listing submenus for each link     
          function sub_menu_links($var){
           $submenu ='<ul class="dropdown-menu">';

              foreach ($var as $sub) {

                $path = str_replace("<front>",'' ,$sub["link"]["link_path"]);

                 if(count($sub["below"]) > 0 ){
                      $submenu .= '<li class="dropdown-submenu" ><a href="javascript:void(0);" >'.$sub["link"]["link_title"].'</a>';
                      $submenu .=  sub_menu_links($sub["below"]);
                      $submenu .= '</li>'; 
                  }else{
                      $submenu .= '<li><a href="'.$path.'">'.$sub["link"]["link_title"].'</a>'; 
                      $submenu .= '</li>'; 
                   }

              }
            $submenu .= ' </ul>';

            return $submenu;

          }


          # help function for more than 2 levels
          function menu_links($menu){

             $links = '<ul class="nav navbar-nav">';
             foreach ($menu as $link) {

              if(count($link["below"]) > 0 ){ 

                $path = str_replace("<front>",'' ,$link["link"]["link_path"]);

                $links .=  '<li class="dropdown ">';
                $links .= '<a href="javascript:void(0);" class="dropdown-toggle" data-toggle="dropdown">'.$link["link"]["link_title"].'</a>';
                      /* print "<pre>";
                      var_dump( $link["below"]);
                       print "</pre>";*/
                $links .= sub_menu_links($link["below"]); 


                $links .= '</li>' ;

              }else{
                  $links .= '<li>';
                  $links .= '<a href="'.$path.'">'.$link["link"]["link_title"].'</a>'; 
                  $links .= '</li>' ;
              }



              } 
              $links .= '</ul>';
              return  $links ;
          } 


          print menu_links($menu);


           ?>

এই কোডটি সিএসএস ক্লাসগুলির জন্য মেনুটি ফিরিয়ে দেবে আপনি নিজের কাস্টম সিএসএসের সাহায্যে বুটস্ট্র্যাপ ব্যবহার করছেন নিজের ব্যবহার করতে পারেন

এই কোডটি একটি কঠোর পরিশ্রমের পরে এটি আপনার সময় সাশ্রয় করতে পারে এবং এটি ড্রুপাল on.x এ পরীক্ষা করা হয়েছে এবং মূল মেনুতে আপনি নিজের পছন্দ মতো মেনু পরিবর্তন করতে পারবেন

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