ব্রেডক্রাম্ব বিষয়বস্তু পরিবর্তন


13

আমি একটি ব্রেডক্রাম্বিং লিঙ্কটি পরিবর্তন করতে এই হুকটি ব্যবহার করার চেষ্টা করছি:

hook_menu_breadcrumb_alter(&$active_trail, $item)

হুক ডাকেনি বলে মনে হচ্ছে।

আমি চেষ্টা করেছিলাম :

  • কোনও থিমের হুক ব্যবহার করা
  • একটি কাস্টম মডিউলটিতে হুক ব্যবহার করা (ব্রেডক্রম্ব_ফিন্ডার_ফিক্স)
  • ড্রাশ ব্যবহার করে সমস্ত ক্যাশে সাফ করা হচ্ছে

আমি ডেভেল মডিউলটি ইনস্টল এবং সক্রিয় করেছি এবং নিম্নলিখিতগুলি কোনও আউটপুট উত্পাদন করে না।

function breadcrumb_finder_fix_menu_breadcrumb_alter(&$active_trail, $item) {
    drupal_set_message(krumo($active_trail));
}

কোন ধারনা ? দিকনির্দেশ? দয়া করে উপদেশ দাও.

ওবিএস: আমি এই উত্তরটি পড়েছি: /drupal//a/7659/12647


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

উত্তর:


4

আপনি কীভাবে ব্রেডক্রামবস পরিবর্তন করতে পারবেন তা দেখানোর জন্য এখানে একটি স্নিপেট।

নিম্নলিখিত বিষয়গুলি মনে রাখবেন:

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

    function THEME_NAME_breadcrumb($variables) {
      $breadcrumb = $variables['breadcrumb'];
    
      // check to ensure this is the one you want to alter
      // Custom rebuild process of breadcrumb with custom links.
      if ($breadcrumb[1] == 'your_breadcrumb_id') {
        // linking to home page
        $links[0] = l(t('Home'), '<front>');
    
        // Keeping the trail/current page as non linked
        $links[1] = ('your desired breadcrumb');
        drupal_set_breadcrumb($links);
      }
    }
    

@ জ্যান আমি কয়েকটি পরিবর্তন করেছি, এটি একবার দেখুন (স্নিপেটে নয়), তবে অস্বীকৃতিতে
arpitr

13

সম্ভবত প্রতিক্রিয়া জানাতে কিছুটা দেরি হয়েছে, তবে আমি আজ সকালে এই থ্রেডটি পেরিয়ে এসেছি যখন দ্রুপাল in-তে ব্রেডক্র্যাম্বকে ওভাররাইড করার জন্য একটি উপায় খুঁজছিলাম, এটি কিছুটা সহায়তা করেছিল তাই আমি ভেবেছিলাম আমার সমাধানটি যুক্ত করব।

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

function MYMODULE_menu_breadcrumb_alter(&$active_trail, $item) {

    //STORE THE LAST ITEM
    $end = end($active_trail);

    foreach ($active_trail as $key => $crumb){

        //CHECK AGAINST NODE TYPE
        if($crumb['map'][1]->type == 'NODE_MACHINE_NAME'){

            //INSERT THE REPLACEMENT CRUMB
            $active_trail[$key] = array( 
                'title' => t("Title"),
                'href' => 'PATH',
                'link_path' => 'PATH', 
                'localized_options' => array(),
                'type' => 0
            );
            //RECREATE ITEM
            $active_trail[] = $crumb;
        }

    }


    //SHOW CURRENT PAGE IN BREADCRUMB BY DUPLICATING THE LAST ARRAY ITEM IN ACTIVE_TRAIL

    if (!drupal_is_front_page()) {
        if ($item['href'] == $end['href']) {
            $active_trail[] = $end;
        }       
    }

}

2
এটি সঠিক উপায়ে মনে হচ্ছে তবে এটি আমার পক্ষে কার্যকর নয়। হাস্যকরভাবে, এটি অ্যাডমিন পৃষ্ঠাগুলিতে কাজ করে তবে এটি সাধারণ ব্যবহারকারীর সামগ্রীতে কাজ করে না। ডিবাগ করবেন কীভাবে পরামর্শ?
পিটার মারে

আমার @ পিটারমুরের মতো একই সমস্যা আছে। আমি এখনও এটি পুরোপুরি সমাধান করেছি না তবে এখনই আমি যা বলতে পারি তা থেকে কাস্টম_ব্রেডক্রামস মডিউলটি কোনওভাবে লিঙ্কগুলিকে ওভাররাইড করে is আমার 2 সেন্ট, যাইহোক।
প্যাকস

9

hook_menu_breadcrumb_alter () এমন পৃষ্ঠাগুলিতে কাজ করে না যেখানে drupal_set_breadcrumb () এর আগে ডাকা হয়েছিল।

hook_menu_breadcrumb_alter () থেকে বরকত হয় menu_get_active_breadcrumb () । এটিকে ড্রপাল_জেট_ব্রেডক্রাম্ব () থেকে ডাকা হয় , তবে কেবলমাত্র যদি কোনও ব্রডক্রম্ব পূর্বে দ্রুপাল_সেট_ব্রেডক্রম্ব () দিয়ে সেট করা থাকে না ।

এটি ইউরোপ পৃষ্ঠা থেকে ড্রপাল_সেট_ব্রেডক্রাম্ব () ডাকা হয় বলে মনে হচ্ছে না। তবে সম্ভবত একটি অবদান মডিউল আছে যা এটি করে। এটি কেস হয়েছে কিনা তা দেখার জন্য আপনি ডিপিএল () বা ddebug_backtrace () drupal_set_breadcrumb () এ রাখতে পারেন (ডিভেল মডিউলটি সক্ষম করতে হবে, এবং আপনাকে ডেভেল তথ্য দেখার অনুমতি আছে)।

আপনি এর পরিবর্তে হুক_প্রিপ্রসেস_ব্রেডক্রম্ব () ব্যবহার করতে পারেন তবে এর জন্য আপনি যে ব্রেডক্রাম্ব লিঙ্কটি পরিবর্তন করতে চান তা পার্স করা দরকার। কারণ এই হুকটিতে ব্রেডক্রাম্ব লিঙ্কগুলি ইতিমধ্যে এইচটিএমএল হিসাবে রেন্ডার করা হয়েছে, সুতরাং আপনার অবশ্যই ইউআরএল নির্ধারণের জন্য নিয়মিত এক্সপ্রেশন (প্রেগ_ম্যাচ ()) বা অনুরূপ প্রয়োজন।

একটি আরও ভাল সমাধান দ্রুপালের জন্য উপলব্ধ বিভিন্ন ব্রেডক্রাম্ব-কাস্টমাইজিং মডিউলগুলির একটি ব্যবহার করা।


2

এটি সবচেয়ে কার্যকর উপায় নাও হতে পারে তবে চেষ্টা করুন:

function THEME_breadcrumb($variables)

এবং তারপরে ভেরিয়েবলগুলি পড়ুন।

... আমার godশ্বরও আমি ব্রেডক্র্যাম্বগুলি ঘৃণা করি। অনেক.


1
আমি এটা দেখেছিলাম. তবে এটি "দ্রুপাল উপায়" বলে মনে হচ্ছে না। এটি একটি থিম হুক এবং তাই ইনপুটটি পরিবর্তন করতে ব্যবহার করা উচিত নয়
জিন-মিশেল গার্সিয়া

আমি এটির জন্য যাচ্ছি কারণ অন্যভাবে কাজ করছে না। আমি আপনার প্রশ্ন upvoting করছি, কিন্তু গ্রহণ না। আশা করি যে কেউ "সঠিক পথ" খুঁজে পান।
জিন-মিশেল গার্সিয়া

1

আপনার যদি কেবলমাত্র একটি নির্দিষ্ট পৃষ্ঠায় ব্রেডক্রাম্ব পরিবর্তন করতে হয় তবে নীচের সমাধানটি আপনাকে সহায়তা করতে পারে। উদাহরণটি সম্পাদনা ফর্মের জন্য ব্রেডক্রাম্বকে আপডেট করে।

$breadcrumb = array();
$breadcrumb[] = l(t('Home'), '<front>');
$breadcrumb[] = l(t('Nodes listing'), 'nodes/listing');
# Update breadcrumb on the edit form
if (isset($form['nid']) && (is_numeric($form['nid']['#value']))) {
    $breadcrumb[] = l($form['#node']->title, 'node/' . $node->nid);
}

drupal_set_breadcrumb($breadcrumb);

আর একটি দ্রুপাল উপায় ব্যবহারকারীকে hook_menu_breadcrumb_alterতবে নামটি নিশ্চিত YOUR_MODULE_menu_breadcrumb_alterকরে ফাংশন যুক্ত করার পরে ক্যাশে সাফ করার বিষয়টি নিশ্চিত করুন ।

বা theme_breadcrumbব্রেডক্রাম্ব হালনাগাদ করার একটি দ্রুপাল উপায় তবে এই হুকটিতে আপনার কেবল রুটিচক্রের মার্কআপ পরিবর্তন করা উচিত, লিঙ্কগুলি নয়।


0

THEME_NAME_breadcrumbআমার জন্য কাজ করে নি। যাইহোক, আমি এই ফাংশনটি দিয়ে ব্রেডক্রাম্বকে ওভাররাইড করার ব্যবস্থা করেছিলাম:

function MODULE_node_view_alter(&$build) {
  $node = $build['#node'];
  if ($build['#view_mode'] == 'full' && $node->type == 'CONTENT_TYPE') {
    $breadcrumb = array();
    $breadcrumb[] = l('Home', '<front>');
    $breadcrumb[] = l('People', 'group/node/' . arg(2) . '/people');
    $breadcrumb[] = l('Attendance', 'group/node/' . arg(2) . '/people/attendance');
    drupal_set_breadcrumb($breadcrumb);
  }
}

ক্রেডিট এতে যায়: /programming/10087168/how-to-add-breadcrumb


0

ফাংশন MODULE_menu_breadcrumb_alter (& $ অ্যাক্টিভ_ট্রাইল, $ আইটেম) {

//STORE THE LAST ITEM
$end = end($active_trail);
foreach ($active_trail as $key => $crumb){
    //CHECK AGAINST NODE TYPE
    if($crumb['map'][1]->type == 'CONTENT_TYPE' && $crumb['link_path'] == 'node/%'){
       //INSERT THE REPLACEMENT CRUMB
        //INSERT THE REPLACEMENT CRUMB
        $active_trail[$key] = array( 
            'title' => t("Title"),
            'href' => 'PATH',
            'link_path' => 'PATH', 
            'localized_options' => array(),
            'type' => 0
        );
    }
}

}

এই অনেক কোড ব্রেডক্রাম্ব ইউআরএল সংশোধন করার জন্য যথেষ্ট।

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