আমি একটি ভিউ ব্লক তৈরি করেছি, যার মেশিনের নাম "সংবাদ"।
আমি কীভাবে এটি ব্যবহার করে module_invoke()
এবং দেখার मशीनটির নাম ব্যবহার করব ?
আমি একটি ভিউ ব্লক তৈরি করেছি, যার মেশিনের নাম "সংবাদ"।
আমি কীভাবে এটি ব্যবহার করে module_invoke()
এবং দেখার मशीनটির নাম ব্যবহার করব ?
উত্তর:
ব্যবহার views_embed_view()
:
echo views_embed_view('view_machine_name', 'block_1');
আপনি ট্যাবটি ক্লিক করে প্রদর্শনটির নামটি খুঁজে পেতে এবং আপনার ব্রাউজারের ঠিকানা বারে এর নামটি পরীক্ষা #views-tab-block_1
করতে পারেন : আপনাকে দেয় block_1
।
আপনি যদি ভিউ ব্যবহারের জন্য কোনও প্যারামিটারটি পাস করতে চান:
echo views_embed_view('view_machine_name', 'block_1', $param);
উদাহরণ স্বরূপ:
echo views_embed_view('view_machine_name', 'block_1', $node->nid);
বা:
echo views_embed_view('view_machine_name', 'block_1', $nid, $uid);
টস্টিনির উত্তর বেশিরভাগ ক্ষেত্রেই সঠিক। তবে আপনি যদি ভিউ শিরোনামটি অন্তর্ভুক্ত করতে চান তবে এটি কিছুটা কুরুচিপূর্ণ।
views_embed_view()
ডকুমেন্টেশন থেকে :
মনে রাখবেন যে এই ফাংশনটি দর্শনটির শিরোনাম প্রদর্শন করে না। আপনি যে কাজ করতে চান, আপনি দৃশ্য লোড, প্রিভিউ পেয়ে এবং তারপর বুঝিয়ে, কি এই ফাংশন নিজে করে কি প্রয়োজন হবে
$view->get_title()
।
উদাহরণ স্বরূপ:
$name = 'view_machine_name';
$display_id = 'block_1';
$view = views_get_view($name);
if (!$view || !$view->access($display_id)) {
return;
}
$view_content = $view->preview($display_id);
$title = $view->get_title();
আপডেট করা হয়েছে : @ রজোস্নো উল্লেখ করেছেন যে ডক্সগুলি আপনাকে কল করার আগে অবশ্যই পূর্বরূপ পেতে হবে get_title()
তাই আমি এই দুটি লাইনের চারপাশে উল্টিয়েছি।
এটি আমার জন্য কাজ করেছে:
$view = views_get_view('view_machine_name');
$view->set_display('Master');
$view->get_title();
$response = $view->preview('You_Block_id');
// এবং এটি এইচটিএমএল এর মত // বলা
<div class="col-md-4 col-sm-6">
<div class="blocksOuterWrapper companyNewsWrapper">
'.$response.'
</div>
</div>
দ্রষ্টব্য, আমার জন্য ডিফল্ট ব্লক (নাম না দিয়ে) বলা হয়ে block
থাকে block_1
:
<?php echo views_embed_view('news_archive', 'block'); ?>
তোস্তিনির জবাবটিও তৈরি করুন:
যদি ভিউটির কোনও ফলাফল না থাকে তবে আপনি যদি কোনও এইচটিএমএল দেখাতে চান না। এছাড়াও, একটি শিরোনাম যুক্ত করুন, তবে কেবল ফলাফল রয়েছে।
if (array_filter(views_get_view_result('view_machine_name', 'block_1'))) {
print '<h2 class="my-view-block-title">Special Title</h2>';
print views_embed_view('view_machine_name', 'block_1');
}
আমার নিজের অভিজ্ঞতা থেকে, আপনি নীচের মত একটি ফাংশন সহ একটি দর্শন শিরোনাম বা সামগ্রীতে একটি পথ রূপান্তর করতে পারেন।
<?php
function view_path_to_title($path)
{
// only if your path is a URL alias
$sql = "SELECT src FROM {url_alias} WHERE dst = '%s'";
$src = db_result(db_query($sql, $path));
// if you do not use URL aliases, you probably use $path here instead of $src
$menu_item = menu_get_item($src);
// make sure it worked as expected
if(!empty($menu_item)
&& $menu_item["page_callback"] == "views_page"
&& count($menu_item["page_arguments"]) >= 2)
{
$args = $menu_item["page_arguments"];
$view = views_get_view($args[0]);
}
else
{
$view = null;
}
if ($view)
{
// just loading a view is not quite enough, we have to setup the
// arguments, including the display, and the "execute" the view
$view->set_display($args[1]);
array_shift($args); // view name
array_shift($args); // display name
$view->set_arguments($args);
$view->execute();
$title = $view->get_title();
if($title)
{
return $title;
}
}
// some "random" default
return $path;
}
ভিউ রেন্ডার করতে, $view->render()
পরিবর্তে ব্যবহার করুন $view->get_title()
।
নিশ্চিতভাবেই, যতক্ষণ না আমি যথাযথভাবে ফোন করেছি $view->execute()
, কিছুই ঠিক মতো কাজ করে নি। আমি রিটার্ন মান হিসাবে খালি স্ট্রিং (সম্ভবত নাল) পেতাম।