কিভাবে দুটি মতামত একটি ইউনিয়ন তৈরি করতে?


36

আমি ব্যবহারকারীর নোড এবং "পোস্টের তারিখ" অনুসারে সাজানো মন্তব্যের একটি ইউনিয়ন পাওয়ার চেষ্টা করছি। এই পোস্টটি ডি 6 এর জন্য স্যান্ডবক্স প্রকল্পগুলিতে লিঙ্ক করেছে তবে 7 এর জন্য কিছুই নেই।

এই পোস্টে হুক_ভিউ_প্রিয়_একসেকিউট () এবং ডি 6-তে একটি এসকিউএল ইউনিয়ন ব্যবহার করার উদাহরণ রয়েছে। 3 টি ভিউ সহ এটি ডি 7 এর জন্য কাজ করে না।

আমি Merlinofchaos ' মন্তব্য জুড়ে এসেছি

যেহেতু আমরা এখন ড্রুপালের নতুন ক্যোয়ারী জেনারেটরটি ব্যবহার করছি, ক্যোয়ারীটি একটি সিলেক্টকিয়ার অবজেক্ট যা আপনাকে সংশোধন বা প্রতিস্থাপন করতে হবে। আরও তথ্যের জন্য ড্রুপাল 7 এর নতুন ডাটাবেস স্তরটি সন্ধান করুন।

দুটি মতামতকে একত্রিত করার জন্য কীভাবে এটি বা অন্য কোনও সমাধান করা যায় তার উদাহরণ কারও কাছে রয়েছে?


এটি একটি সত্যিকারের উত্তরের চেয়ে আরও একটি ধারণা: আপনার ব্যবহারকারীর উপর ভিত্তি করে একটি ভিউ তৈরি করতে সক্ষম হওয়া উচিত যা নোড এবং মন্তব্য উভয় ক্ষেত্রেই যোগ দেবে (তারা উভয়ই কেবল সত্তা নয় :) :) :) আমার প্রথম প্রয়াসে আমি এটি করতে ব্যর্থ হয়েছি কারণ মতামতগুলি ব্যবহারকারীর কাছ থেকে আগত সম্পর্কের প্রস্তাব দেয় না। তবে এটিকে পরিবর্তন করা সহজ হওয়া উচিত। (বা আমি কিছু ভুলে গেছি)
মোজিজিস

আমি মনে করি এটি নীচের মত একই উত্তর: কেটি জন্য দুটি প্রাসঙ্গিক ফিল্টার প্রয়োজন (Content.author = ব্যবহারকারী অথবা লগ-ইন মন্তব্য করা হয়েছে a অনুমোদিত = ব্যবহারকারীর লগ ইন)।
uwe

আমি মনে করি না :) আমি নোড এবং মন্তব্যে যোগদান করে ব্যবহারকারীদের উপর ভিত্তি করে একটি ভিউ বোঝাতে চাইছি। তবে আমার অনুভূতি আছে যে ব্যবহারকারী এবং মন্তব্যের মধ্যে কিছুটা সমস্যা রয়েছে - আমি মন্তব্যগুলি প্রদর্শন করতে পারি নি।
মোজিজিস

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

1
ড্রুপাল for এর জন্য একটি স্যান্ডবক্স প্রকল্প রয়েছে 'ভিউজ ইউনিয়নাইজ', অনুগ্রহ করে পরীক্ষা করুন drupal.org/sandbox/jalama/1785294 ,
অনুপ জোসেফ

উত্তর:


15

এখানে একটি কার্যকরী এবং পরীক্ষিত উদাহরণ:

/**
 * Implements hook_views_pre_execute().
 */
function mymodule_views_pre_execute(view &$view) {
  if ($view->name == 'my_view') {
    $query1 = &$view->build_info['query'];

    // Basic setup of the second query.
    $query2 = db_select('another_table', 'at')
      ->condition('some_field', 0, '>')
      ->condition('some_other_field', 12345);

    // The number of fields (and their aliases) must match query1.
    // Get the details with:
    // dpm($query1->getFields());
    $query2->addField('at', 'some_field', 'alias1');
    $query2->addField('at', 'some_other_field', 'alias2');
    $query2->addField('at', 'some_other_field2', 'alias3');
    $query2->addField('at', 'some_other_field3', 'alias4');

    // Verify that queries are very similar.
    // dpq($query1);
    // dpq($query2);

    // Matrimony.
    $query1 = $query2->union($query1, 'UNION ALL');

    // Manual test.
    // dpm($query1->execute()->fetchAll());

  }
}

এটি বেশিরভাগ দর্শনের জন্য কাজ করে। তবে কিছু স্টাইল প্লাগইন অভিনব জিনিসগুলি করতে পারে যা এই কৌশলটির সাথে কাজ করবে না (ক্যালেন্ডার মডিউলটি আমি আপনাকে দেখছি)।


3

দুটি ভিন্ন ভিউ / ডিসপ্লে থেকে এসকিউএল ইউএনআইএন কোয়েরি উত্পন্ন করতে আপনি ভিউ অতিরিক্ত হ্যান্ডলার মডিউলটি ব্যবহার করতে পারেন।

Drupal.org এ এখানে একটি বিশদ টিউটোরিয়াল

https://www.drupal.org/project/views_extra_handlers দৃশ্যগুলির স্ক্রিনশট সেটিংস পরিবর্তন করে


2

এসকিউএল ইউনিয়নগুলি তৈরি করতে আমি db_query () ব্যবহার করে শেষ করেছি এবং তারপরে থিম () ফাংশনটি ব্যবহার করে পেজার সহ একটি টেবিল বিন্যাসে রেন্ডার করছি।

ব্যবহারকারীর কাছে এটি দেখতে ডিফল্ট মতামতের মতো। অন্য সুবিধাটি হ'ল আমি ক্যোরিটিকে অনেকটা অনুকূল করতে পারি। আমি "আমার বন্ধুর ক্রিয়াকলাপ" দেখছি এবং যদি আপনি এর জন্য মতামত ব্যবহার করেন তবে এটি আপনার বন্ধুদের একটি তালিকা তৈরি করবে এবং এটি একটি এসকিউএল "IN" ধারাতে ব্যবহার করবে যা আপনার 50 বা 100 এর বেশি রেকর্ড থাকলে খুব ধীর।

আমি গত x দিনে সাইটে লগ ইন করা বন্ধুদের সাথে সেই তালিকাটি সংকীর্ণ করতে পারি।

এটি একটি কোড নমুনা:

  // Two queries are required (friendships can be represented in 2 ways in the
  // same table). No point making two db calls though so a UNION it is.

  // Build up the first query.
  $query = db_select('flag_friend', 'f')
    ->condition('f.uid', $account->uid)
    ->condition('u.login', $timestamp, '>');
  $query->addExpression('f.friend_uid', 'uid');
  $query->innerJoin('users', 'u', 'u.uid = f.friend_uid');

  // Build up the second query.
  $query2 = db_select('flag_friend', 'f')
    ->condition('f.friend_uid', $account->uid)
    ->condition('u.login', $timestamp, '>');
  $query2->addExpression('f.uid', 'uid');
  $query2->innerJoin('users', 'u', 'u.uid = f.uid');

  // Return the results of the UNIONed queries.
  return $query->union($query2)->execute()->fetchCol();

1

ভবিষ্যতের রেফারেন্সের জন্য, আমি একই টেবিলে ভিত্তিক দুটি দৃষ্টিভঙ্গি একসাথে একত্রিত করেছি। একই নীতিগুলি একই পরিমাণ ক্ষেত্রের সাথে বিভিন্ন টেবিলের ভিত্তিতে ভিউগুলিতেও প্রয়োগ করা উচিত।

ফর্ম্যাটটি রেন্ডার সত্তায় সেট করা হয় নিচের ক্ষেত্রে কেবল আইডি নির্বাচন করা হয়। তবে আপনি যদি ক্ষেত্রের সাথে চলে যাচ্ছেন তবে আপনি নীচে টাইমস্ট্যাম্প যুক্ত করার কারণে আপনি সর্বদা ক্যোয়ারিতে অতিরিক্ত ডামি ক্ষেত্র যুক্ত করতে পারেন যাতে কম ক্ষেত্র রয়েছে।

/**
 * Implements hook_views_pre_execute().
 */
function MY_MODULE_views_pre_execute(&$view) {
  if ($view->name == 'VIEW_1' && $view->current_display == 'DISPLAY_OF_VIEW_1') {

    $view2 = views_get_view('VIEW_2');
    $view2->build('DISPLAY_OF_VIEW_2');

    $view->build_info['query']
    ->fields('table_alias', array('timestamp'))
    ->union(
        $view2->build_info['query']
        ->range()
        ->fields('table_alias', array('timestamp'))
        ->orderBy('timestamp', 'DESC')
    );

    $view->build_info['count_query']
    ->union(
        $view2->build_info['count_query']
        ->range()
    );
  };
}

0

আমি এই লাইন বরাবর এর কিছু কল্পনা:

/** 
* Implements hook_views_pre_execute().
*/     
function mymodule_views_pre_execute(&$view) {
  if ($view->name == 'myview') {
    $query = $view->query;
    $other_view = views_get_view('otherview');
    $other_query = $other_view->query;
    $query = $query->union($other_query);
    $view->query = $query;
  }
}

যদিও আমি এটি পরীক্ষা করিনি।

কিছু লিঙ্ক যা সহায়তা করতে পারে:

http://api.drupal.org/api/drupal/includes!database!select.inc/function/SelectQueryInterface%3A%3Aunion/7

http://drupal.org/node/557318#comment-1991910


1
এটি সম্পূর্ণরূপে কাজ করে না বলে মনে হয়। $ দর্শন-> কোয়েরি হল মধ্যবর্তী অবজেক্ট যা দর্শনগুলি কোয়েরিটি তৈরি করতে ব্যবহার করে। সিলেক্টকোওয়ারি হ'ল $ দর্শন-> বিল্ড_ইনফো ['ক্যোয়ারী']। আপনি সেই অনুযায়ী সম্পাদনা করলে, আমি একটি "মারাত্মক ত্রুটি: অনির্ধারিত পদ্ধতিতে কল করুন SequQuery :: রেন্ডার_পেজার ()" ত্রুটি।
এমপিডোনাদিও

1
ডাটাবেস পরীক্ষার কোডটিতে ইউনিয়নগুলির উদাহরণ রয়েছে api.drupal.org/api/drupal/… এবং api.drupal.org/api/drupal/…
মাইকাইটাউন 2

অন্য একটি উদাহরণ drupal.org/node/748844#comment-7070234
Uwe

উভয় মতামত প্রায় একই রকম হয় তবে সম্ভবত এটি কাজ করতে পারে way
ডালিন

0

আমি ভিউজ ফিল্ড ভিউ নামে একটি মডিউল জুড়ে এসেছি , যা আপনাকে অন্য দৃশ্যে একটি ক্ষেত্র হিসাবে একটি ভিউ এম্বেড করার অনুমতি দেয়। আমি এখনও এটি এখনও চেষ্টা করে দেখিনি, তবে এটি আপনার পক্ষে সহায়ক হতে পারে।


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

0

EntityFieldQuery প্রতি ব্যাক-এন্ড একই সময়ে একাধিক সত্তা ধরনের জন্য সমর্থন কুয়েরিং। সুতরাং নোড এবং মন্তব্য উভয়ের জন্যই জিজ্ঞাসা করা ব্যবহারযোগ্য হবে। উভয় সত্তা প্রকারগুলি uidতাদের লেখকের সাথে লিঙ্ক করার জন্য একটি সম্পত্তি ব্যবহার করে তাই এপিআই স্তরে এনটিটিফিল্ডকুরি :: প্রপার্টিসিডিশন () কোনও একক ব্যবহারকারীর নোড এবং মন্তব্য নির্বাচন করতে ব্যবহারযোগ্য হতে হবে। আমার ধারণা ভিউ ব্যাকএন্ড একই বৈশিষ্ট্যটি সরবরাহ করে।


তারা মত দেখাচ্ছে মাত্র ক্যোয়ারী একাধিক সত্ত্বা থেকে বৈশিষ্ট্য মুছে drupal.org/node/1564740
Uwe

0

নোড এবং মন্তব্যের ফিড তৈরি করতে (ইউআরএলটিতে ব্যবহারকারীর শনাক্তকারীর প্রাসঙ্গিক ফিল্টার সহ) এবং তারপরে দুটি ফিডকে নতুন ফিডে একত্রিত করা এবং পোস্টের তারিখ অনুসারে এটি প্রদর্শন করার জন্য আলাদা পদ্ধতির হতে পারে ।


-2

গ্লোবাল ব্যবহৃত : পিএইচপি ক্ষেত্র? আপনি এগুলি দুটি একত্রিত করে এমন দৃশ্যের সাথে এক সাথে টেপ নালীতে ব্যবহার করতে পারেন।

সামগ্রী সহ শিরোনাম এবং সামগ্রী: মন্তব্য ক্ষেত্রগুলি (প্রদর্শন থেকে বাদ দেওয়া) সহ সামগ্রীর একটি ভিউ তৈরি করুন।

এমন একটি পিএইচপি ক্ষেত্র যুক্ত করুন যা গণনা করে যা আরও সাম্প্রতিক, সর্বশেষ আপডেটের তারিখ, বা ব্যবহারকারী কর্তৃক সর্বশেষ মন্তব্যের তারিখ গণনা করে এবং সেই ক্ষেত্রের মানটিকে সেই তারিখ হিসাবে সেট করে। এই ক্ষেত্রটিকে বাছাই শর্ত হিসাবে যুক্ত করুন।

অনুরূপ ক্ষেত্র যুক্ত করুন যা মন্তব্যে বা নোডের একটি লিঙ্ক দেয়।

এটা আমার ভাল শোনাচ্ছে!


আকর্ষণীয় ধারণা। এটির জন্য দুটি প্রাসঙ্গিক ফিল্টার প্রয়োজন (Content.author = ব্যবহারকারীর লগ ইন বা মন্তব্য.অক্ষেত্র = লগ ইন ব্যবহারকারী)।
uwe

এই সম্পর্কে মহাকাব্য পুনরুদ্ধারের প্রত্যাশায় ...;)
জননাথন এলমোর

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