Theo câu trả lời này , bạn chỉ có thể in nội dung trang trong hàm gọi lại trang menu thay vì trả lại.
Để lấy dữ liệu từ cơ sở dữ liệu của Drupal và / hoặc được sản xuất bằng PHP, bạn cần có một cuộc gọi lại trang (trong một mô-đun tùy chỉnh) để xuất dữ liệu mà không cần hiển thị bố cục đầy đủ. Điều này có thể dễ dàng thực hiện bằng cách in trực tiếp nội dung của trang trong cuộc gọi lại trang của bạn thay vì trả lại.
Tôi đoán mô-đun In đã triển khai trang thân thiện với máy in theo cách này. Sau đây là đoạn mã từ mô-đun.
function print_menu() {
$items = array();
$items[PRINT_PATH] = array(
'title' => 'Printer-friendly',
'page callback' => 'print_controller_html',
'access arguments' => array('access print'),
'type' => MENU_CALLBACK,
'file' => 'print.pages.inc',
);
........
}
/**
* Generate an HTML version of the printer-friendly page
*
* @see print_controller()
*/
function print_controller_html() {
$args = func_get_args();
$path = filter_xss(implode('/', $args));
$cid = isset($_GET['comment']) ? (int)$_GET['comment'] : NULL;
// Handle the query
$query = $_GET;
unset($query['q']);
$print = print_controller($path, $query, $cid, PRINT_HTML_FORMAT);
if ($print !== FALSE) {
$node = $print['node'];
$html = theme('print', array('print' => $print, 'type' => PRINT_HTML_FORMAT, 'node' => $node));
drupal_add_http_header('Content-Type', 'text/html; charset=utf-8');
drupal_send_headers();
print $html;
......
}
Theo đó, mô-đun sử dụng mẫu HTML tùy chỉnh print.tpl.php
. Nó là một mẫu mức HTML. Sau đó, mô-đun nhận được HTML bằng cách gọi theme('print',...)
và kết xuất trực tiếp tới trình duyệt bằng cách sử dụng print $html;
.
Đây là một ý tưởng chung cho mục đích của bạn: mymodule.module
/**
* Implements hook_menu().
*/
function mymodule_menu() {
$items = array();
$items['mylogin'] = array(
'title' => 'Custom Login Page',
'page callback' => 'mymodule_custom_login_page',
'type' => MENU_CALLBACK,
'access callback' => TRUE,
);
return $items;
}
/**
* Implements hook_theme().
*/
function mymodule_theme() {
return array(
'mylogin' => array(
'variables' => array('page' => array()),
'template' => 'mylogin', // mylogin.tpl.php in your module folder
),
);
}
/**
* Generate a custom login page
* @see more in print_controller_html() in print.pages.inc of the Print module
*/
function mymodule_custom_login_page(){
$page = _mymodule_login_page_prerequisite(); // get/prepare necessary variables, js, css for the page
$page['form'] = drupal_render(drupal_get_form('user_login')); // get login form
// prepare html in mylogin.tpl.php
// See more in print.tpl.php() in the Print module
$html = theme('mylogin', array('page' => $page));
drupal_add_http_header('Content-Type', 'text/html; charset=utf-8');
drupal_send_headers();
print $html; // cease Drupal page rendering and render directly to the browser
}
/**
* Prepare the array for the template with common details
* @see more _print_var_generator() in print.pages.inc of the Print module
*/
function _mymodule_login_page_prerequisite(){
global $base_url, $language;
$page = array();
$page['language'] = $language->language;
$page['head'] = drupal_get_html_head();
$page['title'] = '';
$page['scripts'] = drupal_get_js();
$page['favicon'] = '';
// if there is a custom css file for this page
// drupal_add_css(drupal_get_path('module', 'mymodule') . '/css/mylogin.css');
$page['css'] = drupal_get_css();
$page['message'] = drupal_get_messages();
$page['footer_scripts'] = drupal_get_js('footer');
return $page;
}
Bản mẫu: mylogin.tpl.php
<?php
/**
* @file
* Custom login page template
*
* @ingroup page
*/
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="<?php print $page['language']; ?>" xml:lang="<?php print $page['language']; ?>">
<head>
<?php print $page['head']; ?>
<title><?php print $page['title']; ?></title>
<?php print $page['scripts']; ?>
<?php print $page['favicon']; ?>
<?php print $page['css']; ?>
</head>
<body>
<h3>This is custom login page.</h3>
<?php
if (!empty($page['message'])):
foreach($page['message'] as $type => $message):
?>
<div class="messages <?php print $type; ?>">
<ul>
<?php foreach($message as $msg): ?>
<li><?php print $msg; ?></li>
<?php endforeach; ?>
</ul>
</div>
<?php
endforeach;
endif; ?>
<div><?php print $page['form']; ?></div>
<?php print $page['footer_scripts']; ?>
</body>
</html>
Tôi hy vọng điều này sẽ tùy chỉnh trang đăng nhập của bạn khi bạn cần.
hook_menu_alter()
để thay đổi đường dẫndelivery callback
cho người dùng / đăng nhập thành phiên bản của riêng bạndrupal_deliver_html_page()
. Điều đó sẽ cung cấp cho bạn quyền kiểm soát tuyệt đối đối với những gì được hiển thị trên màn hình, mặc dù điều đó có nghĩa là tự mình thiết lập các tiêu đề phù hợp