我正在尝试为Drupal开发一个模块,我很新。
除了包含的文件外,以下代码段运行良好。包含文件的内容显示在模板外部,其余内容正确显示在模板内。为什么会发生这种情况以及如何解决这个问题?
drupal_add_css(drupal_get_path('module', 'helloworld') . '/helloworld.css', array('group' => CSS_DEFAULT, 'every_page' => TRUE));
function helloworld_menu(){
$items = array();
$items['helloworld'] = array(
'title' => t('Hello world'),
'page callback' => 'helloworld_output',
'access arguments' => array('access content'),
);
return $items;
}
function helloworld_display(){
include_once ( dirname(__FILE__) . '/helloworld.display.php');
}
/*
* Display output
*/
function helloworld_output() {
header('Content-type: text/plain; charset=UTF-8');
header('Content-Disposition: inline');
$output = "<div id='hw_wrapper'>";
$output .= helloworld_display();
$output .= 'hej';
$output .= "</div>";
return $output;
}
答案 0 :(得分:0)
试试此代码
的 MYMODULE.module 强> 的
<?php
/**
* Implementation of hook_menu().
*
* @return An array of menu items.
*/
function MYMODULE_menu() {
$items = array();
$items['test'] = array(
'title' => 'Test',
'page callback' => 'MYMODULE_test_page',
'access arguments' => array('access content'),
);
return $items;
}
/**
* Page callback
*/
function MYMODULE_test_page(){
// Drupal 7 way to get path of files directory
$path = variable_get('file_public_path', conf_path() . '/files');
// Uncomment for Drupal 6
// $path = file_directory_path() .'/files';
$variables['content'] = htmlentities(@file_get_contents($path .'/test.php'));
return theme('test_page', $variables);
}
/**
* Implementation of hook_theme().
*
* @return Array of defined theme functions
*
*/
function MYMODULE_theme() {
$themes = array(
'test_page' => array(
'variables' => array('variables' => array()),
'template' => 'test-page',
'path' => drupal_get_path('module', 'MYMODULE') . '/theme'
)
);
return $themes;
}
的主题/测试page.tpl.php中强> 的
<div class="myclass">
<pre>
<?php print $content; ?>
</pre>
</div>
答案 1 :(得分:0)
我宁愿使用以下代码。
function helloworld_init() {
drupal_add_css(drupal_get_path('module', 'helloworld') . '/helloworld.css', array('group' => CSS_DEFAULT, 'every_page' => TRUE));
}
function helloworld_menu(){
$items = array();
$items['helloworld'] = array(
'title' => t('Hello world'),
'page callback' => 'helloworld_output',
'access arguments' => array('access content'),
);
return $items;
}
/*
* Display output
*/
function helloworld_output() {
drupal_add_http_header('Content-type', 'text/plain; charset=UTF-8');
drupal_add_http_header('Content-Disposition', 'inline');
return array(
'#prefix' => '<div id="hw_wrapper">',
'#suffix' => '</div>',
'#theme' => 'helloworld_mypage',
);
}
function helloworld_theme() {
return array(
'helloworld_mypage' => array(
'variables' => array(),
'template' => 'helloworld-mypage',
),
);
}
将helloworld.display.php文件重命名为helloworld-mypage.tpl.php,并将其放在包含helloworld.module文件的目录中。
我会添加一些注意事项:
hook_init()。如果您只需要在页面中使用它,则可以使用以下代码。 (使用以下代码替换之前显示的helloworld_output()
;其余部分与之前相同。)
function helloworld_output() {
drupal_add_http_header('Content-type', 'text/plain; charset=UTF-8');
drupal_add_http_header('Content-Disposition', 'inline');
return array(
'#prefix' => '<div id="hw_wrapper">',
'#suffix' => '</div>',
'#theme' => 'helloworld_mypage',
'#attached' => array(
'css' => drupal_get_path('module', 'helloworld') . '/helloworld.css',
),
);
}
如果您只有一次drupal_add_http_header()
来电,则可以将其替换为#attached数组中的项目,如下面的代码所示。
function helloworld_output() {
return array(
'#prefix' => '<div id="hw_wrapper">',
'#suffix' => '</div>',
'#theme' => 'helloworld_mypage',
'#attached' => array(
'css' => drupal_get_path('module', 'helloworld') . '/helloworld.css',
'drupal_add_http_header' => array('Content-type', 'text/plain; charset=UTF-8'),
),
);
}
有关详细信息,请参阅drupal_process_attached()。