গতিরূপে ভিউজের পেজার সেটিংস সেট করা সম্ভব?


13

উদাহরণস্বরূপ বলুন, আপনার একটি দৃষ্টিভঙ্গি রয়েছে যা নির্দিষ্ট নোডের প্রকারটি দেখার সময় প্রদর্শিত হয়, তবে আপনি প্রতিটি পৃথক নোডের জন্য পেজার সেটিংস আলাদা হওয়া চাই। আমি "পেজার সেটিং" এর মতো সিসিকে ক্ষেত্র তৈরি করার কথা ভাবছিলাম এবং তারপরে এটিকে xy এর পূর্ণসংখ্যার বিকল্পটি দেব। তবে আমি জানি না যে কোনওভাবে এই ক্ষেত্রটিকে ভিউ'র সেটিংসে গতিশীলভাবে প্লাগ করা সম্ভব কিনা। অথবা এটি করার অন্য কোনও উপায় আছে কি?

উত্তর:


18

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

আপনার করা উচিত:

/*
 * Implementation of hook_views_pre_build().
 */
function hook_views_pre_build(&$view) {

  // Make sure this is only for the specific view you want to modified
  if ($view->name == "foo_bar") {

    // Get the x-y value from where you're storing it (in your example the node object).
    $pager_count = get_count_for_this_node();

    // Lets also make sure that this is a number so we won't destroy our view.
    if (is_numeric($pager_count)) {

      // Now lets set the pager item to what ever out count is.
      $view->pager['items_per_page'] = $pager_count;
    }
  }
}

উপরে আমরা একটি ভিউ হুক ব্যবহার করছি যা ভিউ কোয়েরিটি সেভাবে পেজার তৈরি করার আগে ডাকা হয় এবং অন্য সমস্ত কিছু পরিবর্তনের প্রতিফলন ঘটায়।

সতর্কতার শব্দ: আপনি কী চলছে তা বুঝতে পারলেই দর্শন হুকগুলি ব্যবহার করা উচিত। উপরের কোডটি ভিউজ -২.০ এর জন্য লেখা হয়েছে।

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


দুর্দান্ত, আপনাকে ধন্যবাদ। আমার কাছে এখনও কোনও মডিউল বিকাশের অভিজ্ঞতা নেই, তবে আমি যে দুটি জিনিস অর্জন করতে চাই তার জন্য এটি শুরু করছি। আমার পিএইচপি-র কাজ করার উপলব্ধি রয়েছে, তাই আপনি উপরে যে পেস্ট করেছেন সেই কোড অংশে কী ঘটছে আমি তা অনুসরণ করতে পারি। আমি মনে করি এটি ভাল আমাকে অনেক সাহায্য করে। ধন্যবাদ.
জয়

1
দর্শনের 3.x এর জন্য প্রাসঙ্গিক কোডটি পরিবর্তন করতে হবে$view->items_per_page = $pager_count;
স্টিভেনউ

গতিশীলভাবেও প্রতিটি পৃষ্ঠার অফসেট সেট করা সম্ভব?
শেকুফহে

2

ড্রুপাল For এর জন্য কেবল নিম্নলিখিতটি লিখতে হবে:

$view->items_per_page = $pager_count;

উদাহরণে:

/**
 * Implements hook_views_pre_build().
 */
function module_name_views_pre_build(&$view) {
  if ($view->name == "foo_bar" && $view->current_display == 'foo_display') {
    $pager_count = get_count_for_this_node();
    if (is_numeric($pager_count)) {
      $view->items_per_page = $pager_count;
    }
  }
}

আমি @ এরিকদুরান দ্বারা কোড উদাহরণ ব্যবহার করি।


1

আপনার ভিউ প্রিপ্রসেস ফাংশন ব্যবহার করা উচিত

/*
 * Implementation of hook_views_pre_render().
 */
function MYMODULE_views_pre_render(&$view){
  // $view->name
  // $view->current_display
  // ...
  // look for other variables in $view object
}

"প্রিপ্রোসেস" তাদের জন্য এবং প্রি-রেন্ডার খুব দেরিতে (তিনি জিজ্ঞাসা করলেন অল রেডি রান) - প্রি-বিল্ড হুক আরও ভাল।
মোজজিস

1

হুক_ভিউ_প্রেম_রেেন্ডারে ভিউ ফলাফল এবং পেজার আপডেট করার জন্য, আপনি নিম্নলিখিতগুলি করতে পারেন:

<?php

/**
 * Implementation of hook_views_pre_render().
 */
function MODULENAME_views_pre_render(&$view) {
  if ($view->name == 'my_view' && $view->current_display == 'my_display') {
    // View result update logic.
    // e.g.
    // $result = array();
    // foreach ($view->result as $k => $row) {
    //   if (whatever is your condition) {
    //     $result[$k] = $row;
    //   }
    // }

    // Assuming $result has data as per your logic.
    // Update the pager according to result.
    $view->query->pager->total_items = count($result);
    $view->query->pager->update_page_info();
    // Add results to view.
    $view->result = $result;
  }
}

এই কাজ করা উচিত!! ;)


অসাধারণ! আমি কোয়েরিতে ফিরিয়ে দেওয়া আইটেমগুলির উপর নির্ভর করে প্রদত্ত পৃষ্ঠায় আইটেমের সংখ্যা সীমাবদ্ধ করতে চেয়েছিলাম। এই পদ্ধতিটি ASAP চেক আউট করবে।
জেনস

এটা ঠিক কাজ করে না। আপনার সারি সারিগুলি পরবর্তী পৃষ্ঠায় সরে যায় না turn সুতরাং আপনি নিখোঁজ সামগ্রী দিয়ে শেষ। আরও তদন্ত প্রয়োজন।
জেনস

0

@ তন্ময়কের কোডটি আমার পক্ষে কৌশলটি করেছে। Hook_views_pre_reender এ কোডের এই 2 টি লাইন যুক্ত করেছে

$view->query->pager->total_items = $nr;
$view->query->pager->update_page_info();

তবে ফলাফলগুলিতে আমার ভিউ যুক্ত করার দরকার নেই।

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