Galeta unu içeriğinin değiştirilmesi


13

Bir kırıntı bağlantısını değiştirmek için bu kanca kullanmaya çalışıyorum:

hook_menu_breadcrumb_alter(&$active_trail, $item)

Kanca çağrılmış gibi görünmüyor.

Denedim :

  • Bir temanın kancasını kullanma
  • Kancayı özel bir modülde kullanma (breadcrumb_finder_fix)
  • Drush kullanarak tüm önbellekleri temizleme

Devel modülünü kurdum ve etkinleştirdim ve aşağıdakiler çıktı üretmiyor.

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

Herhangi bir fikir ? Talimatlar ? Tavsiye lütfen.

OBS: Bu cevabı okudum: /drupal//a/7659/12647


Bendede aynı sorun var. MYMODULE_menu_breadcrumb_alter () kanca işlevini oluşturdum, modülü etkinleştirdim, önbelleği temizledim ve kanca asla kullanıcı sayfalarında çağrılmadı. İronik olarak, yönetici sayfalarında çağrılmış gibi görünüyor (yönetici sayfalarında krumo çıktısı alıyorum). Temanın _breadcrumb () düzeyi bunu yapmak için yanlış bir yer gibi görünüyor.
Peter Murray

Yanıtlar:


4

Burada, kırıntıları nasıl değiştirebileceğinizi gösteren bir pasaj.

Aşağıdakileri unutmayın:

  • Bu yöntem, ekmek kırıntılarını tema düzeyinde değiştirir, bu da şablon dosyalarına ulaşmadan önce herhangi bir şeyi değiştirmek için son yerdir, bu nedenle burada değiştirmek diğer modülün daha sonra ekmek kırıntılarını değiştirmesine izin vermez.
  • Ekmek kırıntılarınızı değiştirmek için son seçenek olarak bu yolu düşünün.
  • Bu pasajı temanızın template.php dosyasına ekleyin.

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

@jean Birkaç değişiklik yaptım, (snippet'te değil) bir göz attım, ancak feragatnamede
arpitr

13

Muhtemelen cevap vermek için biraz geç, ama bu sabah Drupal 7'de kırıntıyı geçersiz kılmanın bir yolunu ararken bu konuya rastladım, biraz yardımcı oldu, bu yüzden çözümümü ekleyeceğimi düşündüm.

Bu, içerik türlerine göre ekstra kırıntılar oluşturur ve geçerli sayfayı kırıntıya ekler. Bunu verilen düğümden önce görülen bir filtreleme görünümüne bir kırıntı eklemek için kullanıyorum.

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
Bu doğru yol gibi görünüyor, ama benim için çalışmıyor. İronik olarak, bu yönetici sayfalarında çalışır, ancak genel kullanıcı içeriği üzerinde çalışmaz. Hata ayıklama önerileri?
Peter Murray

@PeterMurray ile aynı problemim var. Henüz tam olarak çözemedim, ancak şu an söyleyebileceğimden, bu, bir şekilde bağlantıları geçersiz kılan custom_breadcrumbs modülünden kaynaklanıyor. Neyse, benim 2 sentim.
Pax

9

hook_menu_breadcrumb_alter () yapar işi değildir drupal_set_breadcrumb () önce adı olmuştur sayfalarında.

hook_menu_breadcrumb_alter () , menu_get_active_breadcrumb () öğesinden çağrılır . Bu, drupal_get_breadcrumb () öğesinden çağrılır , ancak yalnızca drupal_set_breadcrumb () ile önceden bir kırıntı ayarlanmamışsa .

Kullanıcı sayfasından drupal_set_breadcrumb () çağrılmış gibi görünmüyor. Ama belki de bunu yapan bir katkı modülü vardır. Durumun böyle olup olmadığını görmek için drupal_set_breadcrumb () öğesine bir dpm () veya ddebug_backtrace () koyabilirsiniz (devel modülünün etkinleştirilmesi gerekir ve devel bilgilerini görme izniniz vardır).

Bunun yerine hook_preprocess_breadcrumb () kullanabilirsiniz, ancak bu değiştirmek istediğiniz ekmek kırıntı bağlantısını ayrıştırmayı gerektirir. Bu kancada, kırıntı bağlantıları zaten html olarak işlendiğinden, URL'yi belirlemek için düzenli ifadelere (preg_match ()) veya benzerine ihtiyacınız vardır.

Drupal için mevcut olan çeşitli kırıntı uyarlama modüllerinden birini kullanmak çok daha iyi bir çözümdür .


2

bu en etkili yol olmayabilir, ancak şunu deneyin:

function THEME_breadcrumb($variables)

ve sonra değişkenleri okuyun.

... ayrıca tanrım ekmek kırıntılarından nefret ediyorum. çok fazla.


1
Bunu gördüm. Ama "Drupal yolu" gibi görünmüyor. Bu bir tema kancasıdır ve bu nedenle girişi değiştirmek için kullanılmamalıdır
Jean-Michel Garcia

Bunun için gidiyorum çünkü diğer yol çalışmıyor. Sorunuzu onaylıyorum, ancak kabul etmiyorum. Birisinin "doğru yolu" bulmasını umuyorum.
Jean-Michel Garcia

1

Yalnızca belirli bir sayfadaki kırıntıyı değiştirmeniz gerekirse, aşağıdaki çözüm size yardımcı olabilir. Bu örnek, düzenleme formu için hesapta görüntülenen yeri gösterir.

$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);

Başka bir Drupal yolu kullanıcı hook_menu_breadcrumb_alterolmaktır, ancak YOUR_MODULE_menu_breadcrumb_alterişlevi ekledikten sonra adlandırdığınızdan ve önbelleği temizlediğinizden emin olun .

Ya da theme_breadcrumbekmek kırıntısını güncellemenin Drupal bir yoludur, ancak bu kancada bağlantıları değil, ekmek kırıntısının işaretlemesini değiştirmelisiniz.


0

THEME_NAME_breadcrumbBenim için işe yaramadı. Ancak, bu işlevle kırıntıyı geçersiz kılmayı başardım:

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

kredi şu adrese gider: /programming/10087168/how-to-add-breadcrumb


0
function MODULE_menu_breadcrumb_alter(&$active_trail, $item) {
  // Store the last item
  $end = end($active_trail);
  foreach ($active_trail as $key => $crumb){
    // Check against the node type
    if ($crumb['map'][1]->type == 'CONTENT_TYPE' && $crumb['link_path'] == 'node/%') {
      // Replace the breadcrumb
      $active_trail[$key] = array( 
        'title' => t("Title"),
        'href' => 'PATH',
        'link_path' => 'PATH', 
        'localized_options' => array(),
        'type' => 0
      );
    }
  }  
}

bu kadar kod, kırıntı URL'sini değiştirmek için yeterlidir.

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.