প্রসঙ্গত ফিল্টারগুলির সাথে আমি কীভাবে প্রোগ্রামটি ভিউ রেন্ডার করব?


20

ড্রুপাল 8-এ প্রসঙ্গত ফিল্টারগুলির সাথে আমি কীভাবে প্রোগ্রামটিমে কোনও ভিউ রেন্ডার করব?

ড্রুপাল 7 এ, আমি সাধারণত নিম্নলিখিত কোডগুলি ব্যবহার করি।

$view = views_get_view('test_view'); //test_view is the view machine name
$view->set_display("block"); //block is the view display name
$view->set_arguments($tid); //$tid is the argument to pass
$view->pre_execute();
$view->execute();
$content = $view->render();

ড্রুপাল 8 এ অর্জনের কোনও বিকল্প উপায় আছে কি?


আপনি যুক্তি হিসাবে ঠিক কী পাস করতে চান? সম্ভবত আপনি ভিউ এর ইউআইয়ের মাধ্যমে যা চান তা অর্জন করতে পারেন।
এসএসওয়েট

হ্যাঁ আমি জানি আমি ইউআই ভিউ ব্যবহার করে এটি অর্জন করতে পারি তবে এটি আমার ক্ষেত্রে সম্ভব নয়, আমি এটি কেবল কয়েকটি কোড দ্বারা অর্জন করতে চাই।
সঞ্জয়

উত্তর:


36

দ্বারা ব্যবহৃত কোডটিতে ঝাঁকুনি views_get_view_result(), আমি নীচের কোডটি ব্যবহার করব, আপনি প্রশ্নের মধ্যে যে কোডটি দেখান তার সমান কোড হিসাবে।

  $args = [$tid];
  $view = Views::getView('test_view');
  if (is_object($view)) {
    $view->setArguments($args);
    $view->setDisplay('block');
    $view->preExecute();
    $view->execute();
    $content = $view->buildRenderable('block', $args);
  }

5
এটি রেন্ডারিং নয়, এটি কেবল ফলাফল পাচ্ছে। একই নয় :) এটি করার পছন্দের উপায়টি হ'ল $ ভিউ-> বিল্ডরেন্ডারেবল ($ ডিসপ্লে, $ আর্গুমেন্ট) ব্যবহার করা, দেখুন drupal.stackexchange.com/questions/198920/…
বার্ডির

হ্যাঁ, আমি ফলাফল বনাম রেন্ডারিং সম্পর্কে একই ভাবছিলাম। :D
কিমলালুনো

1
8 জিরগোসকে ড্রুপাল 8 দিয়ে আপনি কখনই ব্যবহার করবেন না drupal_render()। এটি যথেষ্ট পরিমাণে আপনি একটি রেন্ডারযোগ্য অ্যারে ফিরিয়ে দেন, যা এমনকি একটি নিয়ামক শ্রেণিও করতে পারে।
কিমলালুনো

1
রিয়েল এক্সপোর্ট (জসন আউটপুট) থেকে ফিল্ড ফর্ম্যাটারে $ বিষয়বস্তুটি পাস করা জেসন আউটপুটে কেবল "অ্যারে" আউটপুট করছিল ... আমার ব্যবহারের জন্য @ কইমালালুনো ভাল, তবে আমি drupal_render($content)এটি পাস করার পরে! আসলে আমাকে জসন আউটপুটে রেন্ডার আউটপুট দিয়েছে ... আমি কি কিছু মিস করছি? আপনি যা বলেছিলেন তা বোঝার মতো কোনও জায়গা আছে?
জর্জিস্কে

1
@ জিয়েরগোস্ক: আপনি যদি ডিসপালকে প্রদর্শনের জন্য ব্যবহার করেন তবে আপনি এই দিনগুলিকে রেন্ডার করবেন না, আপনি এটিকে সবকিছু শেষ রেন্ডারে রেখে দিন এবং বাকিটি সিস্টেমটিকে করতে দিন। তবে যদি আপনাকে দ্রুপাল (সম্ভবত কোনও নিউজলেটারে বা অনুরূপ লাগাতে) থেকে ফলাফলটি তুলতে হয় তবে আপনি হ্যাঁ, রেন্ডার করুন। তবে ব্যবহার না করা শুরু করুন drupal_render(), এটি হ্রাস করা হবে।
গ্যাবার

9
/**
 * Return the rendered view with contextual filter.
 * @param string $viewId - The view machine name.
 * @param string $viewId - The display machine name.
 * @param array $arguments - The arguments to pass.
 * 
 * @return object $result
 */
function getView($viewId, $displayId, array $arguments)
{
    $result = false;
    $view = Views::getView($viewId);

    if (is_object($view)) {
        $view->setDisplay($displayId);
        $view->setArguments($arguments);
        $view->execute();

        // Render the view
        $result = \Drupal::service('renderer')->render($view->render());
    }

    return $result;
}

/**
 * Get json output.
 * @return array $data
 */
function jsonData() {
    $data = [];
    $viewId = 'rest_comments';
    $displayId = 'rest_export_1';
    $arguments = [$nid];

    // Get the view
    $result = getView($viewId, $displayId, $arguments);

    if(is_object($result)) {
        $json = $result->jsonSerialize();
        $data = json_decode($json);
    }

    return $data;
}


/**
 * Get the view object.
 * @return object $view
 */
function view() {
    $viewId = 'rest_comments';
    $displayId = 'rest_export_1';
    $arguments = [$nid];

    // Get the view
    $view = getView($viewId, $displayId, $arguments);

    return $view;
}

2

রেস্ট এক্সপোর্ট ডিসপ্লের প্রকৃত জেএসএন আউটপুট পেতে আপনি এরকম কিছু করতে পারেন:

$view = Views::getView('view_id');
$render_array = $view->buildRenderable('display_name', $args);
$rendered = \Drupal::service('renderer')->renderRoot($render_array);
$json_string = $rendered->jsonSerialize();
$json_object = json_decode($rendered);

মনোমুগ্ধকর মত কাজ করা, ধন্যবাদ ভাল।
সতীশ সুন্দর

পুরোপুরি কাজ করে, কীভাবে ব্যবহারকারীকে দেখার অনুরোধটি সেট করবেন? উদাহরণস্বরূপ দর্শনটির পুনর্বিবেচনাগুলি প্রদর্শনের অনুমতি প্রয়োজন।
সিমোনবি

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