我想在drupal中呈现“基本页面”的内容。像这个问题:displaying a Drupal view without a page template around it但对于Drupal 7。
我的尝试几乎奏效:
function mytheme_preprocess_page(&$variables, $hook) {
if ( isset($_GET['ajax']) && $_GET['ajax'] == 1 ) {
$variables['theme_hook_suggestions'][] = 'page__ajax';
}
}
在template.php所在的同一目录中有一个名为page--ajax.tpl.php
的文件:
<?php print $page['content']; ?>
问题是它仍然从侧边栏呈现菜单和我的两个自定义块。我只想要页面内容。我应该改变什么?
答案 0 :(得分:6)
你快到了。您唯一需要的是添加自定义HTML包装器模板。
template.php
:function THEMENAME_preprocess_html(&$variables, $hook) {
if ( isset($_GET['ajax']) && $_GET['ajax'] == 1 ) {
$variables['theme_hook_suggestions'][] = 'html__ajax';
}
}
html--ajax.tpl.php
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
"http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">`
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<?php print $styles; ?>
<?php print $scripts; ?>
</head>
<body class="<?php print $classes; ?>">
<?php print $page_top; ?>
<?php print $page; ?>
<?php print $page_bottom; ?>
</body>
</html>
答案 1 :(得分:4)
根据Ufonion Labs的答案,我能够完全删除 Drupal 7中页面内容周围的所有HTML输出 实施
hook_preprocess_page
和hook_preprocess_html
我的主题template.php,像这样: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,I 仅获取带有页面内容的
<div>
,以便它可以嵌入到另一个页面中。
这里无耻地采取形式: displaying a Drupal view without a page template around it(drupal 7的第二个最佳答案)。
Alexei解决方案仍然使用负责显示块的页面模板