मैंने एक व्यू ब्लॉक बनाया, जिसका मशीन नाम "समाचार" है।
मैं इसका उपयोग कैसे करूं 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);
ज्यादातर मामलों में tostinni का जवाब सही है। हालाँकि, यदि आप दृश्य शीर्षक शामिल करना चाहते हैं, तो यह थोड़ा अधिक बदसूरत है।
से 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();
अपडेट किया गया : @rojosnow ने कहा कि डॉक्स इंगित करता है कि आपको कॉल करने से पहले पूर्वावलोकन प्राप्त करना चाहिए get_title()
ताकि मैंने उन दो लाइनों को फ़्लिप किया।
यह मेरे लिए काम किया:
$view = views_get_view('view_machine_name');
$view->set_display('Master');
$view->get_title();
$response = $view->preview('You_Block_id');
// और इसे html में इस तरह कहा जाता है //
<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'); ?>
इसके अलावा tostinni के जवाब पर निर्माण:
यदि आप नहीं चाहते कि कोई HTML प्रदर्शित हो तो दृश्य में कोई परिणाम नहीं है। इसके अलावा, एक शीर्षक जोड़ें, लेकिन परिणाम होने पर ही।
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()
, कुछ भी नहीं सही काम किया। मुझे रिटर्न मान के रूप में खाली स्ट्रिंग (शायद शून्य) मिलेगी।