Selon cette réponse , vous pouvez simplement imprimer le contenu de la page dans le rappel de la page de menu plutôt que de le renvoyer.
Pour obtenir des données de la base de données Drupal et / ou produites en PHP, vous avez besoin d'un rappel de page (dans un module personnalisé) qui génère les données sans le rendu de mise en page complet. Ceci est facilement réalisable en imprimant le contenu de la page directement dans votre rappel de page au lieu de le renvoyer.
Je suppose que le module d' impression a implémenté la page imprimable de cette façon. Voici l'extrait de code du module.
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;
......
}
Selon cela, le module utilise le modèle HTML personnalisé print.tpl.php
. Il s'agit d'un modèle de niveau HTML. Le module récupère ensuite le code HTML en appelant theme('print',...)
et le restitue directement au navigateur à l'aide print $html;
.
Voici une idée générale pour votre objectif: 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;
}
Modèle: 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>
J'espère que cela personnalisera votre page de connexion selon vos besoins.
hook_menu_alter()
pour changer ledelivery callback
chemin d'accès utilisateur / connexion à votre propre version dedrupal_deliver_html_page()
. Cela devrait vous donner un contrôle absolu sur ce qui est rendu à l'écran, même si cela signifie que vous devez définir vous-même les en-têtes appropriés