显示Drupal视图,周围没有页面模板

2022-08-30 12:50:52

我想显示一个Drupal视图,而没有通常围绕它的页面模板 - 我只想要视图节点的纯HTML内容。

这个视图将包含在另一个非Drupal站点中。

我希望必须使用多个视图来执行此操作,因此,让我快速轻松地设置这些视图的解决方案将是最好的 - 我宁愿每次需要在某个地方包含视图时都不必创建.tpl.php文件。


答案 1

我正在寻找一种通过ajax提取节点数据的方法,并为Drupal 6提出了以下解决方案。实现以下更改后,如果您在URL中添加ajax = 1(例如 mysite.com/node/1?ajax=1),您将只获得内容而没有页面布局。

在模板中.php主题的文件:

function phptemplate_preprocess_page(&$vars) {

  if ( isset($_GET['ajax']) && $_GET['ajax'] == 1 ) {
        $vars['template_file'] = 'page-ajax';
  }

}

然后在您的主题目录中创建 page-ajax.tpl.php,其中包含以下内容:

<?php print $content; ?>

答案 2

根据Ufonion Labs的答案,我能够通过实现这两个模板并在我的主题模板中完全删除Drupal 7中页面内容周围的所有HTML输出.php,如下所示:hook_preprocess_pagehook_preprocess_html

function MY_THEME_preprocess_page(&$variables) {
  if (isset($_GET['response_type']) && $_GET['response_type'] == 'embed') {
    $variables['theme_hook_suggestions'][] = 'page__embed';
  }
}

function MY_THEME_preprocess_html(&$variables) {
  if (isset($_GET['response_type']) && $_GET['response_type'] == 'embed') {
    $variables['theme_hook_suggestions'][] = 'html__embed';
  }
}

然后我在我的主题中添加了两个模板:html--embed.tpl.php

<?php print $page; ?>

和:page--embed.tpl.php

<?php print render($page['content']); ?>

现在,当我打开一个节点页面(例如 http://example.com/node/3)时,我会像往常一样看到完整的页面,但是当我添加response_type参数(例如 http://example.com/node/3?response_type=embed)时,我只获取带有页面内容的,以便它可以嵌入到另一个页面中。<div>


推荐