it-swarm.asia

كيف أقوم بإظهار كتلة عرض برمجياً؟

قمت بإنشاء كتلة عرض ، واسم الجهاز الخاص بها "أخبار".

كيف أعرضه باستخدام module_invoke() واسم الجهاز لطريقة العرض؟

31
vitaly.batonov

استخدم views_embed_view() :

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

يمكنك معرفة اسم العرض بالنقر فوق علامة التبويب والتحقق من اسمه في شريط العنوان في المستعرض الخاص بك: #views-tab-block_1 يعطيك block_1.

63
tostinni

إذا كنت ترغب في تمرير معلمة إلى طريقة العرض ، استخدم:

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);
22
Peter Lozovitskiy

إجابة توستني هي الإجابة الصحيحة في معظم الحالات. ومع ذلك ، إذا كنت تريد تضمين عنوان العرض ، فهو أكثر قبيحًا بعض الشيء.

من 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() لذلك قمت بقلب هذين الخطين.

8
Joshua Stewardson

عملت هذا بالنسبة لي:

$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>
1
devashish gurjar

لاحظ أن الكتلة الافتراضية (بدون اسم) تسمى block بدلاً من block_1:

<?php echo views_embed_view('news_archive', 'block'); ?>
1
Harry Mumford-Turner

بناء أيضًا على إجابة توستيني:

إذا كنت لا تريد ظهور أي 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
squarecandy

يمكنك تقديم كتلة الخاص بك بدلا من تقديم وجهات النظر عن طريق الكود التالي.

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

من تجربتي الخاصة ، يمكنك تحويل مسار إلى عنوان أو محتوى عرض بوظيفة مثل ما يلي.

<?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() بشكل صحيح ، لم ينجح شيء. سأحصل على سلاسل فارغة (ربما فارغة) كقيم إرجاع.

0
Alexis Wilke