এলিমেন্টের মতো টুইগের শিশু উপাদানগুলির মাধ্যমে লুপ করুন :: শিশু ()


9

পিএইচপি-তে কোনও রেন্ডারেবল অ্যারে নিয়ে কাজ করার সময়, আমি #বৈশিষ্ট্যগুলি নয় বরং অধস্তনীয় রেন্ডারযোগ্য উপাদানগুলি (ফিল্ডসেটের অভ্যন্তরে আইটেমগুলি, ফিল্ড উইজেটের অভ্যন্তরীণ আইটেম ইত্যাদি) অ্যাক্সেসের জন্য এলিমেন্ট :: শিশু () ব্যবহার করতে পারি । উদাহরণস্বরূপ, ফাইল.মডিউল থেকে এই স্নিপেট:

<?php
if ($element['#multiple']) {
  foreach (Element::children($element) as $name) {
    // ...
  }
}
?>

টুইগ টেমপ্লেটে আমি কীভাবে একই কাজ করতে পারি? তাহলে আমি কি {% for child in element %}, এটি অন্তর্ভুক্ত করা হবে #type, #cacheইত্যাদি


না 'বাগ drupal.org/node/2776307
gagarine

উত্তর:


21
{% for key, child in element if key|first != '#' %}
  <div>{{ child }}</div>
{% endfor %}

2
কেবলমাত্র কোড-উত্তরগুলি এড়িয়ে চলুন।
Mołot

2

আমি একটি টুইগ ফিল্টার তৈরি করেছি যা বাচ্চাদের সাথে ফিরে আসবে ArrayIterator

mymodule/mymodule.services.yml

services:
  mymodule.twig_extension:
    arguments: ['@renderer']
    class: Drupal\mymodule\TwigExtension\Children
    tags:
      - { name: twig.extension }


mymodule/src/TwigExtension/Children.php

<?php

namespace Drupal\mymodule\TwigExtension;


class Children extends \Twig_Extension
{

  /**
   * Generates a list of all Twig filters that this extension defines.
   */
  public function getFilters()
  {
    return [
      new \Twig_SimpleFilter('children', array($this, 'children')),
    ];
  }


  /**
   * Gets a unique identifier for this Twig extension.
   */
  public function getName()
  {
    return 'mymodule.twig_extension';
  }


  /**
   * Get the children of a field (FieldItemList)
   */
  public static function Children($variable)
  {
    if (!empty($variable['#items'])
      && $variable['#items']->count() > 0
    ) {
      return $variable['#items']->getIterator();
    }

    return null;
  }

}


টুইগ টেমপ্লেটে:

{% for headline in entity.field_headline|children %}
  {{ headline.get('value').getValue() }}
{% endfor %}

2

টুইগ টুইক মডিউলটি ব্যবহার করুন , যা অন্যান্য দুর্দান্ত বৈশিষ্ট্যের মধ্যে একটি "শিশু" ফিল্টার রয়েছে:

{% for item in content.field_name | children(true) %}
  {# loop.length, loop.revindex, loop.revindex0, and loop.last are now available #}
{% endfor %}

1

এখানে https://drupal.stackexchange.com/a/236408/67965 এর একটি পরিবর্তন রয়েছে যা ক্ষেত্রের পরিবর্তে রেন্ডার বাচ্চাদের মধ্য দিয়ে যায় #items

দ্বৈত এক্সটেনশন:

/**
 * Generates a list of all Twig filters that this extension defines.
 */
public function getFilters() {
  return [
    new \Twig_SimpleFilter('children', array($this, 'children')),
  ];
}

/**
 * Get the render children of a field
 */
public static function children($variable) {
  return array_filter(
    $variable, 
    function($k) { return (is_numeric($k) || (strpos($k, '#') !== 0)); },
    ARRAY_FILTER_USE_KEY
  );
}

পাতায়, আপনি সরাসরি রেন্ডার করা শিশুদের মধ্য দিয়ে যেতে পারেন, যা পারমাণবিক নকশার ধরণগুলিতে সহায়তা করে। একটি সত্তা টেমপ্লেট সংজ্ঞায়িত করুন, উদাহরণস্বরূপ:

{% include '@molecules/grid.html.twig' with { 
   head : content.field_title,
   grid_columns: content.field_collection_items|children
} %}

যেখানে grid.html.twig এরকম কিছু:

{% if head %}
<div class="slab__wrapper">
  {{ head }}
</div>
{% endif %}
<div class="grid">          
  {% for col in grid_columns %}
  <div class="grid__column">
    {{ col }}
  </div>
  {% endfor %}
</div>

ক্ষেত্রের টেম্পলেটটি রেন্ডার করার চেয়ে এটি সাধারণত বেশি কার্যকর {{ content.field_collection_items }}কারণ বাচ্চাদের লেআউটটি পিতামাত ডিজাইনের উপাদানটির প্রসঙ্গে নিয়ন্ত্রিত হতে পারে।

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