टहनी में बहुवैकल्पिक क्षेत्र मान गिनें


9

मैं ट्विगल टेंपलेट मैंने कोशिश की में असीमित क्षेत्र के मूल्यों की संख्या को गिनना चाहता हूं

{{ node.field_mytext.count }} => त्रुटि का सामना करना पड़ा

और एक और कोशिश में

{{ content.field_mytext.count }}=> कुछ भी नहीं लौटाया

(इस विधि में मैंने जाँच की मेरा क्षेत्र अक्षम क्षेत्र में नहीं है प्रदर्शन प्रबंधक है)।


मेरा सवाल यह है कि मैं ट्विग में एक क्षेत्र की वस्तुओं की संख्या कैसे गिन सकता हूं?

मुझे उम्मीद है कि मैं इन समाधानों के साथ सामना करूंगा, इन समाधानों की उम्मीद है: डी

  • इसे preprocess_node में जोड़ें
  • टहनी का उपयोग करें

क्या आपने {{content.field_mytext | लंबाई}}?
डेविड मैकस्मिथ

जवाबों:


14

{{node.field_mytext.count}} => त्रुटि का सामना करना पड़ा

यह काम नहीं करता है, क्योंकि विधि countको टहनी नीतियों में अनुमति नहीं है:

कोर / lib / Drupal / कोर / खाका / TwigSandboxPolicy.php

{{content.field_mytext | लंबाई}}?

यह काम नहीं करता है, क्योंकि contentबहुत सारी अतिरिक्त कुंजियों के साथ एक रेंडर सरणी है।

यह काम करता है: फ़ील्ड को सरणी और गणना में बदलें

{{ node.field_mytext.getvalue | length }}

आप शायद इसे फॉरच लूप के साथ भी कर सकते हैं, लेकिन यह इस विशिष्ट उद्देश्य के लिए क्लीनर है।
कोई सेस्वेट जूल

6

सबसे आसान तरीका है पाने के लिए ['#items']|length। मैं यह अधिक उदाहरणों को देखने के लिए और स्लाइडिंग लोड करते समय आइटम गिनने के लिए हर समय करता हूं।

{{ content.field_mytext['#items']|length }}

4

मैंने इकाई क्षेत्रों का समर्थन करने के लिए स्वयं के ट्विग फिल्टर का उपयोग किया है, इसके साथ आप देशी सरणियों के रूप में फ़ील्ड का उपयोग कर सकते हैं:

{{ content.field_mytext|length }}

या

{{ content.field_mytext|first|value }}

या

{% if content.field_mytext is empty %}

आप कस्टम मॉड्यूल के माध्यम से आसानी से अपने ट्विग फिल्टर जोड़ सकते हैं। आप यहां और जान सकते हैं: drupal.org/docs/8/creating-custom-modules । संक्षेप में, आपको एक मॉड्यूल निर्देशिका बनाने की आवश्यकता होती है, उदाहरण के लिए path/to/drupal/modules/custom/common/, common.info.ymlमॉड्यूल परिभाषा और common.services.ymlसेवा की परिभाषा के साथ वहां (कोड में टिप्पणियां देखें) और मेरे कोड को डालें /path/to/drupal/modules/custom/common/src/TwigExtension.php

<?php
namespace Drupal\common;

use Drupal\Core\Field\FieldItemInterface;
use Drupal\Core\Field\FieldItemListInterface;
use Drupal\Core\TypedData\ComplexDataInterface;

/**
 * A class providing Twig extensions.
 *
 * This provides a Twig extension that registers various Field-API-specific
 * extensions to Twig, overriding empty and array related filters.
 *
 * Don't forget about common.services.yml
 * services:
 *   common.twig.TwigExtension:
 *     class: Drupal\common\TwigExtension
 *     tags:
 *       - { name: twig.extension }
 *
 * Usage (in *.html.twig file):
 *   - check is field empty {% if content.field_foo is empty %}
 *   - get field first value {{ content.field_foo|first|value }}
 */
class TwigExtension extends \Twig_Extension {

  /**
   * {@inheritdoc}
   */
  public function getTests() {
    return [
      new \Twig_SimpleTest('empty', [$this, 'twigEmptyField']),
    ];
  }

  /**
   * {@inheritdoc}
   */
  public function getFilters() {
    return [
      new \Twig_SimpleFilter('length', [$this, 'twigLengthFilter'], ['needs_environment' => TRUE]),
      new \Twig_SimpleFilter('slice', [$this, 'twigSlice'], ['needs_environment' => TRUE]),
      new \Twig_SimpleFilter('first', [$this, 'twigFirst'], ['needs_environment' => TRUE]),
      new \Twig_SimpleFilter('last', [$this, 'twigLast'], ['needs_environment' => TRUE]),
      new \Twig_SimpleFilter('value', [$this, 'twigFieldValue']),
    ];
  }

  /**
   * Check if value is field item object.
   *
   * @param mixed $value
   *   Mixed Twig variable.
   *
   * @return \Drupal\Core\Field\FieldItemListInterface|mixed
   *   FieldItemListInterface or same value as passed.
   */
  private function checkItems($value) {
    if (is_array($value) && !empty($value['#items']) && $value['#items'] instanceof FieldItemListInterface) {
      return $value['#items'];
    }
    return $value;
  }

  /**
   * Get field item value.
   *
   * @param object $field
   *   Field object.
   *
   * @return array|mixed
   *   List of values or value.
   */
  public function twigFieldValue($field) {
    if ($field instanceof FieldItemInterface) {
      $prop = $field->mainPropertyName();
      $value = $field->getValue();
      return $prop ? $value[$prop] : $value;
    }
    if ($field instanceof FieldItemListInterface) {
      $value = [];
      foreach ($field as $item) {
        $value[] = $this->twigFieldValue($item);
      }
      return $value;
    }
    return '';
  }

  /**
   * Checks if a variable is empty.
   *
   * @see twig_test_empty
   */
  public function twigEmptyField($value) {
    $value = $this->checkItems($value);
    if ($value instanceof ComplexDataInterface) {
      return $value->isEmpty();
    }
    // Return TRUE, because there is no data only cache and weight.
    elseif (!is_object($value) && isset($value['#cache']) && count($value) == 2) {
      return TRUE;
    }
    return twig_test_empty($value);
  }

  /**
   * Returns the length of a variable.
   *
   * @param \Twig_Environment $env
   *   Twig environment.
   * @param mixed $item
   *   A variable.
   *
   * @return mixed
   *   The first element of the item.
   *
   * @see twig_length_filter
   */
  public function twigLengthFilter(\Twig_Environment $env, $item) {
    $item = $this->checkItems($item);
    return twig_length_filter($env, $item);
  }

  /**
   * Slices a variable.
   *
   * @param \Twig_Environment $env
   *   Twig environment.
   * @param mixed $item
   *   A variable.
   * @param int $start
   *   Start of the slice.
   * @param int $length
   *   Size of the slice.
   * @param bool $preserveKeys
   *   Whether to preserve key or not (when the input is an array)
   *
   * @return mixed
   *   The first element of the item.
   *
   * @see twig_slice
   */
  public function twigSlice(\Twig_Environment $env, $item, $start, $length = NULL, $preserveKeys = FALSE) {
    $item = $this->checkItems($item);
    return twig_slice($env, $item, $start, $length, $preserveKeys);
  }

  /**
   * Returns the first element of the item.
   *
   * @param \Twig_Environment $env
   *   Twig environment.
   * @param mixed $item
   *   A variable.
   *
   * @return mixed
   *   The first element of the item.
   *
   * @see twig_first
   */
  public function twigFirst(\Twig_Environment $env, $item) {
    $item = $this->checkItems($item);
    return twig_first($env, $item);
  }

  /**
   * Returns the last element of the item.
   *
   * @param \Twig_Environment $env
   *   Twig environment.
   * @param mixed $item
   *   A variable.
   *
   * @return mixed
   *   The first element of the item.
   *
   * @see twig_last
   */
  public function twigLast(\Twig_Environment $env, $item) {
    $item = $this->checkItems($item);
    return twig_last($env, $item);
  }

}

0

लंबाई फिल्टर का उपयोग करें

{{ content.field_mytext | length }} 

4
वापसी गलती मूल्य !!!, मेरा क्षेत्र लंबा है और मेरे पास वहां 4 आइटम हैं लेकिन 20 वापस करें !!!
युसेफ

1
यह (परिस्थितियों के आधार पर) सही मान लौटा सकता है, लेकिन यह एक गलत उत्तर है।
aydow
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.