Düğüm nesnesine paragraf varlığı nasıl yüklenir?


12

İçerik türümde paragraflar kullanıyorum. Bir paragraf türü oluşturdum ve içerik ekledim. Şimdi paragrafları a foreach. Ama hiçbir şey görünmüyor. $parasboş:

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->get('field_paragraph')->referencedEntities();

Boş gösterilen $ paras dediniz . ancak değerini nasıl yazdırdığınızı göstermediniz. Bir NULLdeğer mi, boş bir dize mi yoksa boş bir dizi mi? Bunu zaten yaptığımı yorumladığınızdan, ancak cevabınız tamamen farklı bir kod gösteren cevaba doğru olduğundan, sorunuz biraz karışıyor ve neyi başaramadığınız açık değil.
kiamlaluno

Bu soru, drupal 8'de öğrenme görevini yaparken çok yeni olduğumu sordu. Sanırım süreçte bazı hatalar yapıyorum, bu yüzden boş gösteriliyor. burada aynı kodu çalıştırmak bir demo kontrol edin. Bunu sizin için oluşturuyorum, d2log.ply.st/devel/php kullanıcı adı :: admin password :: admin
Pankaj Yogi

Yanıtlar:


23
$paragraph = $node->field_paragraph->getValue();
// Loop through the result set.
foreach ( $paragraph as $element ) {
  $p = \Drupal\paragraphs\Entity\Paragraph::load( $element['target_id'] );
  $text = $p->field_name->getValue();
}

Bunu zaten yaptım ama cevabınız doğru.
Pankaj Yogi

Dikkatli olun: bu çözüm çevirileri içermez.
ssibal

Paragraf :: load ($ tid) yerine artık \ Drupal :: entityManager () -> getStorage ('paragraf') -> load ($ tid) kullanmalıyız.
JF Kiwad

6

get()Doğrudan alan adıyla değiştirin :

$node  = \Drupal\node\Entity\Node::load(1);
$paras = $node->field_paragraph->referencedEntities();

Vay canına, evet, ama neden?
leymannx

0

Bu yöntem biraz daha hızlı çalışacaktır.

// Get data from field.
if ($paragraph_field_items = $node->get('field_paragraph')->getValue()) {
  // Get storage. It very useful for loading a small number of objects.
  $paragraph_storage = \Drupal::entityTypeManager()->getStorage('paragraph');
  // Collect paragraph field's ids.
  $ids = array_column($paragraph_field_items, 'target_id');
  // Load all paragraph objects.
  $paragraphs_objects = $paragraph_storage->loadMultiple($ids);
  /** @var \Drupal\paragraphs\Entity\Paragraph $paragraph */
  foreach ($paragraphs_objects as $paragraph) {
    // Get field from the paragraph.
    $text = $paragraph->get('field_title')->value;
    // Do something with $text...
  }
}

Bu kodu, özel servisinizdeki bazı yöntemlerde @entity_type.managerargüman ile kolayca uygulayabilir ve içindeki düğümler ve paragraflar için depolama alanı yükleyebilirsiniz __construct().

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.