मैं प्रोग्राम व्यू ब्लॉक कैसे दिखा सकता हूं?


32

मैंने एक व्यू ब्लॉक बनाया, जिसका मशीन नाम "समाचार" है।

मैं इसका उपयोग कैसे करूं module_invoke()और दृश्य के मशीन नाम का उपयोग कैसे करूं ?

जवाबों:


62

उपयोग करें views_embed_view():

echo views_embed_view('view_machine_name', 'block_1');

आप टैब पर क्लिक करके प्रदर्शन नाम का पता लगा सकते हैं और अपने ब्राउज़र के एड्रेस बार में उसका नाम देख सकते हैं: #views-tab-block_1आपको देता है block_1


Drupal 8 के बारे में क्या? क्या आप जानते हैं कि यह ड्रुपल 8 में कैसे काम करता है?
shekoufeh

Drupal 8 के लिए हम {{ drupal_view('view_machine_name', 'block_1') }}
Twig

21

यदि आप दृश्य उपयोग के लिए एक पैरामीटर पास करना चाहते हैं:

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);

Drupal 8 के बारे में क्या? क्या आप जानते हैं कि यह ड्रुपल 8 में कैसे काम करता है?
shekoufeh

@shekoufeh, प्रलेखन के अनुसार ( api.drupal.org/api/drupal/core%21modules%21views%21views.module/… ), इसे Drupal पर समान रूप से काम करना चाहिए। क्या आप कोशिश करके हमें बता सकते हैं?
पीटर लोज़ोवित्स्की

नहीं, यह सिर्फ सरणी देता है
shekoufeh

8

ज्यादातर मामलों में 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()ताकि मैंने उन दो लाइनों को फ़्लिप किया।


अच्छा दोस्त मेरे दोस्त।
स्टेफगोसेलिन

1

यह मेरे लिए काम किया:

$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>


0

इसके अलावा 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');
}

0

आप निम्न कोड द्वारा विचारों को प्रस्तुत करने के बजाय अपने ब्लॉक को प्रस्तुत कर सकते हैं।

<?php
 $block = block_load($module, $delta);
 $render_array = _block_get_renderable_array(_block_render_blocks(array($block)));
 $output = render($render_array);
 print $output;
?>

0

मेरे अपने अनुभव से, आप निम्नलिखित जैसे किसी फ़ंक्शन के साथ एक दृश्य शीर्षक या सामग्री के लिए एक पथ बदल सकते हैं।

<?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(), कुछ भी नहीं सही काम किया। मुझे रिटर्न मान के रूप में खाली स्ट्रिंग (शायद शून्य) मिलेगी।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.