Paragraf alanında bulunan form alanlarının davranışını nasıl değiştirebilirim?


18

Drupal 8'deki Paragraflar modülünü kullanarak, paragraf alanı içindeki form alanlarının davranışını değiştirmeye çalışıyorum. Bu, AJAX geri çağrıları gibi davranışlar ekleyebilir, durumları vb. Kullanarak diğer alanları göstermeyi gizleyebilirim.

Bu işlevi kullanarak paragraf üst alanına erişebilirim:

function hook_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) { 
}

Ancak paragrafın içindeki alanlara nasıl erişebilirim?

Denedim hook_field_widget_form_alterama boşuna.

Bunu nasıl yaparım?

Not: Hala Drupal gelişiminde oldukça yeniyim.


Sizin alter bu deneyin, kint($form);ve kint($form_id);o size alter kanca kimliği için id vermeli ve sonra da değiştirmek istediğiniz şey için size dizi yollarını vermelidir.
Danny Englander

Yanıtlar:


14

Paragraflar ^ 1.3 olduğundan hook_field_widget_WIDGET_TYPE_form_alter () kullanabilirsiniz ( Kanca kullanımı hakkında iyi bir yorum olduğu için 8.2 sürümünü bağladım ).

Aşağıdaki örneği şurada görebilirsiniz: modules/contrib/paragraphs/tests/modules/paragraphs_test/paragraphs_test.module

/**  
 * Implements hook_field_widget_WIDGET_TYPE_form_alter().  
 */  
function paragraphs_test_field_widget_entity_reference_paragraphs_form_alter(&$element, &$form_state, $context) {
  if ($element['#paragraph_type'] == 'altered_paragraph') {
    $element['subform']['field_text']['widget'][0]['#title'] = 'Altered title';
  }
}

6
"Paragraflar Klasik" yerine "Paragraflar DENEYSEL" widget'ı kullanıyorsanız, widget türünün sadece paragraphsbunun yerine olduğunu unutmayın entity_reference_paragraphs.
Dalin

1
Bazı yararlı şeyler (çünkü bu kancaları hata ayıklamak imkansız):/* @var $paragraph \Drupal\paragraphs\Entity\Paragraph */ $paragraph = $form_state->get('paragraph'); $delta = $context['delta'];
Dalin

1

hook_form_alterBunu kullanmak , formdaki herhangi bir şeyi, hatta widget'lardan gelenleri bile değiştirebilir. Kolayca biraz dağınık olabilir ve widget'larla uğraştığınızda kolayca kırılma eğilimi gösterir.

Eğer widget'ları değiştirmek isterseniz, kendi widget'ınızı yapabilirsiniz. Widget'lar eklentilerdir (PHP sınıfı), böylece kendi alt sınıfınızı sahip olduğunuz sınıfta yapabilir ve tamamen üzerine yazarak veya işlevleri genişleterek değiştirebilirsiniz.

Widget'lar ek açıklama sistemi kullanır, bu nedenle sınıfın üzerindeki yorumlar olarak ad, kimlik vb. Tanımlamanız gerekir. En kolay yolu sadece orijinal widget kopyalamak ve değiştirmek için yeni bir isim ve kimlik vermek, dinlenme olması gerektiği gibi olmalıdır.

Drupal'ın yeni eklentiyi bulmasını sağlamak için önbelleği temizlemeyi unutmayın.


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.