প্রদত্ত প্রকারের সমস্ত নোড পান


21

আমি সব নোড যে হয় পেতে চাই my_custom_typeটাইপ Drupal এর 8

আমি জানি আমি সঙ্গে (যে কোন ধরনের) সমস্ত নোড পেতে পারেন \Drupal\node\Entity\Node::loadMultiple()এবং সকল ধরনের তালিকাতে \Drupal\node\Entity\NodeType::loadMultiple()

তবে প্রদত্ত নোড প্রকারের নোডগুলি কীভাবে পাবেন?

আমি সত্যিই এটির জন্য বিশেষায়িত মডিউলটি ব্যবহার করতে চাই না (যদি এটি সম্ভব হয়) তবে এটি যথাসম্ভব সহজ রাখুন। আমি সমাধানটি আমার কাস্টম মডিউলটিতে ব্যবহার করব।

এবং সমস্ত নোড দিয়ে লোড করা \Drupal\node\Entity\Node::loadMultiple()এবং তার প্রকারটি পরীক্ষা foreachকরে পারফরম্যান্সটিকে খুব বেশি আঘাত করবে।

উত্তর:


39

আপনি আপনার প্রদত্ত ধরণের সমস্ত নোড লোড করতে Drupal::entityQuery()এবং ব্যবহার করতে পারেন Node::loadMultiple():

$nids = \Drupal::entityQuery('node')->condition('type','my_custom_type')->execute();
$nodes =  \Drupal\node\Entity\Node::loadMultiple($nids);

1
কোনও সত্তার প্রকারের জন্য জেনারিকভাবে এটি করার কোনও উপায়? আপনি ভাবেন rup দ্রুপাল :: অ্যান্টিকিউরি ($ প্রকার) -> শর্ত ('প্রকার', $ বান্ডেল)> চালিত (); কাজ করবে, কিন্তু দুঃখের বিষয় না।
তরল পদক্ষেপ

1
এই উত্তর নোড সত্তা নির্দিষ্ট। অন্যান্য সত্তার জন্য বিশদ পরিবর্তন হবে। সাধারণ মামলার জন্য আপনার আরেকটি প্রশ্ন করা উচিত।
শন কন কন

3
ওওপি কোডে এটি এখন $nids = $this->entityTypeManager->getStorage('node')->getQuery()->condition('type','my_custom_type')->execute();Drupal.org/node/2849874 দেখুন ।
লেইম্যানেক্স

17

এটি করার আরেকটি উপায় হ'ল এই স্নিপেট কোডটি ব্যবহার করা হবে:

$values = [
  'type' => 'page'
];
$nodes = \Drupal::entityTypeManager()
  ->getStorage('node')
  ->loadByProperties($values);

7

সাধারণত আপনার সমস্ত প্রকাশিত নোডের দরকার নেই।

$nids = \Drupal::entityQuery('node')
  ->condition('status', 1)
  ->condition('type', 'YOUR-NODE-TYPE')
  ->execute();
$nodes = \Drupal\node\Entity\Node::loadMultiple($nids);

7

এটি আসলে খুব সহজ,

\Drupal::entityTypeManager()->getStorage('node')
  ->loadByProperties(['type' => 'content_type', 'status' => 1])

আপনি যদি সমস্ত নোডগুলি অপ্রকাশিতও চান তবে কেবল ব্যবহার করুন:

\Drupal::entityTypeManager()->getStorage('node')
  ->loadByProperties(['type' => 'content_type'])

0

ডকুমেন্টেশনগুলি খুঁজে বের করা এবং এটি সন্ধান করা মোটামুটি সহজ কিছু ছিল যা কিছুটা বিভ্রান্তিকর এবং খুঁজে পাওয়া শক্ত। এটি এই বিষয়ের শীর্ষস্থানীয় অনুসন্ধান ফলাফলগুলির মধ্যে একটি, তাই আমি নতুন পদ্ধতিগুলি ব্যবহার করে একসাথে রাখতে সক্ষম হওয়া একটি সমাধান পোস্ট করার জন্য সময় নিতে চাই।

আমার ব্যবহারের ক্ষেত্রে কোনও নির্দিষ্ট সামগ্রীর ধরণের প্রকাশিত নোডের একটি তালিকা পাওয়া যাচ্ছে এবং তৃতীয় পক্ষের দ্বারা গ্রাস করার জন্য এটি কোনও পৃষ্ঠায় এক্সএমএল হিসাবে প্রকাশ করা হচ্ছে।

এখানে আমার ঘোষণা আছে। তাদের মধ্যে কিছু এই সময়ে অতিরিক্ত অতিরিক্ত হতে পারে তবে আমি এখনও পর্যন্ত কোডটি আপগ্রেড করতে পারি নি।

<?php
namespace Drupal\my_events_feed\Controller;
use Drupal\Core\Controller\ControllerBase;
use Drupal\Component\Serialization;
use Symfony\Component\Serializer\SerializerInterface;
use Symfony\Component\HttpFoundation\Response;
use Drupal\field\Entity\FieldStorageConfig;
use Drupal\Core\Field\FieldStorageDefinitionInterface;
use Drupal\Core\Entity\EntityTypeManager;

XML এ কেবলমাত্র বস্তুকে ফিড দেওয়ার জন্য এখানে কোড

/**
 * Class BuildXmlController.
 */
class BuildXmlController extends ControllerBase {
  /**
   * Builds the xml from an object
   */
  public function build() {
    $my_events = \Drupal::entityTypeManager()
    ->getStorage('node')
    ->loadByProperties([
      'status' => '1',
      'type' => 'submit_an_event',
    ]);

    $thisSerializer = \Drupal::service('serializer');
    $serializedData = $thisSerializer->serialize($my_events, 'xml', ['plugin_id' => 'entity']);

    $response = new Response();
    $response->headers->set('Content-Type', 'text/xml');
    $response->setContent($serializedData);
    return $response;
  }
}

আপনার যদি ডেটা ম্যাসেজ করতে হয় তবে আপনাকে একটি অ্যারে পূরণ করতে হবে এবং সেখানে সম্পাদনা করতে হবে। অবশ্যই, আপনি এখনও একটি স্ট্যান্ডার্ড লাইব্রেরি অ্যারে সিরিয়ালাইজ করতে পারেন।

/**
 * Class BuildXmlController.
 */
class BuildXmlController extends ControllerBase {
  /**
   * Builds the xml from an array
   */
  public function build() {

    $my_events = \Drupal::entityTypeManager()
    ->getStorage('node')
    ->loadByProperties([
      'status' => '1',
      'type' => 'submit_an_event',
    ]);

    $nodedata = [];
    if ($my_events) {
      /*
      Get the details of each node and
      put it in an array.
      We have to do this because we need to manipulate the array so that it will spit out exactly the XML we want
       */
      foreach ($my_events as $node) {
        $nodedata[] = $node->toArray();
      }
    }

    foreach ($nodedata as &$nodedata_row) {
      /* LOGIC TO MESS WITH THE ARRAY GOES HERE */
    }

    $thisSerializer = \Drupal::service('serializer');
    $serializedData = $thisSerializer->serialize($nodedata, 'xml', ['plugin_id' => 'entity']);

    $response = new Response();
    $response->headers->set('Content-Type', 'text/xml');
    $response->setContent($serializedData);
    return $response;
  }
}

আশাকরি এটা সাহায্য করবে.

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