কোন দৃশ্যের ফলাফলের মাধ্যমে পুনরাবৃত্তি করার সবচেয়ে ভাল উপায় কী?


12

'চিলড্রেন' নামক একটি ভিউ দেওয়া হয়েছে (দুটি ক্ষেত্র সহ: শিশু_নোড_আইডি এবং একটি জন্ম_অর্ডার_ভ্যালু) প্রোগ্রামটিমে, 'ডিফল্ট' এর একটি ডিসপ্লে_আইড এবং অভিভাবক নোড আইডি যুক্ত একটি আর্গুমেন্ট দেওয়া ভিউ ফলাফলের মাধ্যমে পুনরাবৃত্তি করার সর্বোত্তম উপায় কী?

পূর্বে, আমি নীচের মতো কোড ব্যবহার করে একটি ব্লকে ভিউ ব্যবহার করেছি:

if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2)) {
   $node = node_load(arg(1));
   $args = array($node->nid);
   $view = views_get_view('Children');
   print $view->preview('default', $args);
}

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


আপনার পদ্ধতির ঠিক আছে। আপনি যদি এটি একটি উত্তরে রাখেন তবে লোকেরা এতে ভোট দিতে এবং অনুমোদন দিতে পারে। আপনি যা চেষ্টা করতে পারেন তা হ'ল প্রতিবারের ভিউটি সেট না করে। মৃত্যুদন্ড কার্যকর হওয়ার পূর্বে একটি $ দর্শন-> ক্লোন_ভিউ () করুন। ভিউ লোডিং বেশ ভারী এবং এটি মেমরি এবং পারফরম্যান্সে সহায়তা করতে পারে।
জেরেমি ফরাসী

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

আপনি foreach (.. মাপের ()) এর পরিবর্তে বিবেচনা করা উচিত , এটি অনেক ভাল সম্পাদন করে (কারণ এটি পিএইচপি পরিবর্তে সি হয়)।
বার্ক

একটি বিষয় লক্ষণীয়, না করে বরং if (arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2))ব্যবহার করা ভাল if ($node = menu_get_object())
ক্রিস প্লিয়াকাস

আমি প্রশ্ন থেকে উত্তরটি ছাঁটাই করেছি এবং উত্তর হিসাবে পোস্ট করেছি। এইভাবে সাইটের ব্যবহারকারীদের কাছে এটি স্পষ্ট যে এই প্রশ্নের উত্তর রয়েছে।
জেরেমি ফরাসি

উত্তর:


2

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

<?php
if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
   $node = node_load(arg(1));
   $args = array($node->nid );
   unset($view);
   $view = views_get_view('Children');
   $view->set_display('default');  
   $view->set_arguments($args);
   $view->set_items_per_page(20);
   $view->execute();
   $newarg = array();
   for ($i=0; $i<sizeof($view->result); $i++) {
      $newarg[$i] = $view->render_field('nid_1', $i);
   }
   for ($i=0; $i<sizeof($newarg); $i++) {
      unset($view);
      $view = views_get_view('Children');
      $view->set_display('default');  
      $view->set_arguments($newarg[$i]);
      $view->set_items_per_page(20);
      $view->execute();
      ....
   }
}
?>

ফলাফলটি একাধিকবার কার্যকর করার মূল চাবিকাঠিটি ছিল আমার যখন ফলাফল সেটটি সম্পন্ন করা হত তখন আনসেট করা ($ দর্শন) ছিল।


1

আমি নিম্নলিখিত ফাংশন থেকে ভাল মাইলেজ পেয়েছি। রিটার্ন মানটি সমস্ত দেখার রেকর্ডের একটি অ্যারে। ডিএসএম ($ রিটার্ন_ভ্যালু) কল করা আপনাকে আপনার নির্দিষ্ট দর্শনের কাঠামোর একটি ভাল ধারণা দেবে।

function _get_view_data($view_name, $args, $page = NULL, $page_size = 0 ) {
    $view = views_get_view($view_name);
    $view->pager['items_per_page'] = $page_size;
    $view->set_arguments($args);
    if ($page) {
        $view->build($page);
        $view->execute($page);
    }
    else {
        $view->execute();
    }
    return $view->result;
}

1

ড্রুপাল এপিআই-তে ইতিমধ্যে নির্মিত একটি সহায়ক ফাংশন এখানে। (আমি ড্রুপাল ডক্সের চারপাশে ফ্লাইং করার জন্য কিছু সময় ব্যয় করেছি এবং অবশেষে এটি খুঁজে পেয়েছি It মনে হয় অন্য অনেকগুলি সমাধানও তৈরি করেছেন যা এই সহায়কটি ব্যবহার করে না, এবং এই সাহায্যকারীও একটি আকর্ষণীয় পদক্ষেপ করেন যা অন্য সমাধানগুলি না করে .. সম্পাদনা করার আগে $ ভিউ অবজেক্টে pre_reender কল করতে) call

এটি ভালভাবে কাজ করে কি না সে বিষয়ে আমি কোন প্রমাণ দিতে পারি না, তবে এই পদ্ধতির সাথে সমস্যাগুলি সমাধান করার জন্য এটি একটি নির্দিষ্ট জায়গা।

ডি 6 এর জন্য http://api.drupal.org/api/views/views.module/function/views_get_view_result/6

এবং ডি 7 এর জন্য http://api.drupal.org/api/views/views.module/function/views_get_view_result/7

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