Menü öğelerine alan ekleme


11

Normal menünün bir alt kümesi olan bir ana menü oluşturmak gerekir. Tasarım ekibi, kullanıcının ana menüde sadece en önemli bağlantılara sahip olmasının ve her şeye sahip olmamasının daha iyi olacağını düşünüyor. Bazı bağlantılar üst düzey menü ve bazıları alt menülerdir. Bunun için açılır menü olarak menü bağlantı öğesi formuna bir alan ekleyebilmeyi umuyordum. Bir bağlantı oluştururken, kullanıcı bu açılır menüyü "promoteMainMenuAsBigLink" veya "promiseToMainMenuAsSmallLink" için kullanabilir veya öğeyi ana menüde göstermeyecek şekilde bırakabilir.

Bu Drupal 7 çözümü ile benzer bir çözüm arıyorum ama Drupal 8 için arıyorum .

Tablo genişletilmiş 'yanında menu_link_content_data bir sütun eklemek umuyordu. Bu bilgileri d7 çözümünde gösterildiği gibi başka bir tabloya kaydetmemeyi umuyordum.

Oluşturduğum özel bir modülde bağlantı formuna bir alan ekleyebildim, sadece test amacıyla sadece başlamak için bir metin alanı ekledim:

custom_menu.module:

function custom_menu_form_alter(&$form, FormStateInterface $form_state, $form_id) {
  if($form_id == 'menu_link_content_menu_link_content_form') {
    $form['promoteToMainMenu'] = array(
      '#type' => 'textfield',
      '#title' => t('Promote to main menu'),
      '#description' => t('Promote link menu to main menu.'),
      '#default_value' => '',
      '#weight' => -9
    );
  }
}

Alan gerçekten bağlantı formunda gösterilir, ancak asla kaydedilmez.

Birisi bana bu konuda yardımcı olabilir mi?


Göründüğü gibi, özel menü bağlantı öğeleri içerik varlıklardır ( api.drupal.org/api/drupal/… ). Bu, alanı eklemek için bir kanca kullanmanız (belki api.drupal.org/api/drupal/… ) ve şemayı güncellemek için bir güncelleme işlevi çalıştırmanız gerektiği anlamına gelir .
Eyal

Yanıtlar:


14

Menü Öğesi Ekstra modülünü kontrol edin .


2
Bu modülün v2.0 sürümünden itibaren menü bağlantılarını tamamen değiştirilebilir girişlere dönüştüren kesinlikle bu yoldur. Colossal menüden daha iyi bir çözümdür çünkü çekirdek menü sistemini değiştirmek yerine geliştirir.
Hudri

1
+1, bugünün tarihini menü çubuğuna dahil etmek için harika, örneğin
therobyouknow

1
Tüm özellikler hakkında makale var lembergsolutions.com/blog/…
Mykhailo Gurei

11

Varlığa aşağıdaki kodla hook_entity_base_field_infoek bir alan eklemek için kullanabilirsiniz menu_link_content:

/**
 * Implements hook_entity_base_field_info().
 */
function HOOK_entity_base_field_info(EntityTypeInterface $entity_type) {
  $fields = [];

  if ($entity_type->id() == 'menu_link_content') {
    $fields['FIELD_NAME'] = BaseFieldDefinition::create('FIELD_TYPE')
      ->setLabel(t('FIELD_LABEL'))
      ->setDescription(t('FIELD_DESCRIPTION '))
      ->setDisplayOptions('form',array('type' => 'FIELD_TYPE', 'weight' => 0));
  }

  return $fields;
}

Daha fazla bilgi için bkz. Https://www.drupal.org/docs/8/api/entity-api/defining-and-using-content-entity-field-definitionsBaseFieldDefinition .

Bundan sonra hook_form_menu_link_content_menu_link_content_form_alter()forma bir alan eklemeniz gerekir .


5
Form değiştirme yoluyla alan eklemeniz gerekmez. Sadece kullanabilirsiniz BaseFieldDefinition->setDisplayOptions()yöntemi: ...->setDisplayOptions('form', [ ... ]).
milkovsky

1
Görüntü alanını nasıl oluşturabilirim? Bu alan türüyle örnek bulamıyorum ve buna ihtiyacım var. Bunu kullanırken görüntü yükleme alanını görebiliyorum, ancak menü öğesini kaydetmeye çalıştığımda: Drupal \ Core \ Entity \ EntityStorageException: SQLSTATE [42S22]: Sütun bulunamadı: 1054 Bilinmeyen sütun 'field_menu_image__target_id' Eklemek için sayfayı yenilediğimde günlüklerde gördüğüm menü öğesi formu: Uyarı: Tanımsız dizin: field_menu_image__height Uyarı: Tanımsız dizin: field_menu_image__width ... Görüntü alanı türü için herhangi bir örnek var mı? Teşekkürler
blastoise

5
Bu sorunu çözdüm. /update.php çalışmıyor, bu nedenle sütun hiçbir zaman sandık oluşturulmaz. Ben db güncellemek için drush kullandım: drush updatedb --entity-updates
blastoise

1
Alan eklemek için hook_form_menu_link_content_menu_link_content_form_alter () 'a ne koyarsınız?
Matt

3

Ne yazık ki @MatthieuScarset'in dediği gibi Drupal 8'de varsayılan olarak menü bağlantıları için hiçbir alan arayüzü yok. Ancak menu_link_contentDrupal 8'deki bir içerik varlığıdır, bu yüzden ona alan eklemek mümkündür.

Seçenek # 1 Tabii ki @Decipher tarafından önerilen programlı olarak yapabilirsiniz.

Seçenek # 2 Ancak, geçici menü bağlantıları için alan kullanıcı arayüzünü etkinleştirmek için başka bir geçici çözüm vardır:

  1. Açık Drupal\menu_link_content\Entity\MenuLinkContent
  2. field_ui_base_route = "entity.menu.add_link_form"Ek açıklamaya ekle
  3. Önbelleği yeniden oluştur
  4. Ziyaret etmek /admin/structure/menu/manage/main/add/fields
  5. Tüm alanlarınızı, ekranlarınızı yönetin
  6. Site yapılandırmanızı dışa aktarın ( drush cex -y).
  7. field_ui_base_route = "entity.menu.add_link_form"Adresindeki ek açıklamadan kaldırDrupal\menu_link_content\Entity\MenuLinkContent
  8. Önbelleği yeniden oluştur.

Bu yaklaşımı denedim. İlk başta iyi görünüyor, ancak yeni alan oluşturmaya çalıştığımda hata alıyorum: Alan oluşturulurken bir sorun oluştu Menü resmi: Bir paket olmadan 'field_menu_image' alanı oluşturmaya çalışın. Şimdi programlı olarak bunu başarmaya çalışıyorum, ama bu da işe yarayabilirse daha iyi olurdu.
blastoise


0

@Mykhailo Gurei'nin önerdiği gibi, "Menü öğesi ekstraları" bunu başarmanın bir yoludur.

Ama benim durumumda fazladan alan eklemek ve Mega menü modülünü kullanmak zorunda kaldım. "Biz mega menü" kullanıyordum ve onunla "Menü öğesi ekstralar" çalışmıyor. Basitçe menü ön uçta gösterilmez (bazı şablonlar sorunu geçersiz kılar).

"Biz mega menü" ile çalışan diğer seçenek "Menü öğesi içerik alanları" dır:

https://www.drupal.org/project/menu_item_fields

Aynı işlevselliğe sahiptir ve We mega menü modülü ile çakışmaz.


-2

Ne yazık ki, Drupal 8 çekirdek geliştiricileri Menü bağlantılarını yapılabilir hale getirmedi. Bu nedenle şimdilik menü bağlantılarına alan eklemek mümkün değil.

Site oluşturucu "geçici çözüm" özel alanlara sahip olabilen özel bir sözcük dağarcığı oluşturmaktır.


4
Yanlış. MenuLinkContent güvenilir bir içerik öğesidir.
milkovsky

1
MenuLinkContent'e yeni alanlar eklemek için ne yapardınız?
MatthieuScarset

1
yukarıdaki cevaplara bakınız. Her ikisi de MenuLinkContent'e nasıl yeni alan ekleneceğini açıklıyor.
milkovsky

2
Menü Öğesi Ekstralar bunu drupal.org/project/menu_item_extras
Mykhailo Gurei

1
Net olmak için @milkovsky True. MenuLinkContent güvenilir bir içerik varlığı DEĞİLDİR.
MatthieuScarset
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.