Bloc-note d'un développeur web
Dans : Développement Web
29 mai 2011Vous devez intégrer sous Drupal 6 des pages en provenance d’un site externe. Le web scraping est à exclure et de ce fait le chargement en iframe des pages externes a été retenu.
Marche à suivre.
En premier lieu, il vous faut créer la page virtuelle qui aura la charge de faire appel au service externe via une iframe. Cela se fait en implémentant le hook_menu pour y déclarer une entrée de type MENU_CALLBACK. La fonction callback associée, _mytheme_load_iframe() ici1, prendra 3 arguments :
String obligatoirement ;String.1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?php /** * template.php */ /** * @implements hook_menu() */ function mytheme_menu() { return array( 'drupal/page/path' => array( 'title' => 'Mon contenu externe', 'page callback' => '_mytheme_load_iframe', 'page arguments' => array( 'url' => 'http://example.com/service', 'width' => '700', 'height' => '1000', ), 'access arguments' => array('access content'), 'type' => MENU_CALLBACK, ) ); } /** * Loads an external resource into an iframe. * * @param string $url URL to load in the iframe. * @param string $width The width of the iframe. * @param string $height The height of the iframe. */ function _mytheme_load_iframe($url, $width, $height) { return theme('mytheme_simple_iframe', $iframe_url, $width, $height); } ?> |
Comme vous pouvez le lire, la méthode de callback fait appel à la fonction theme() sur un hook mytheme_simple_iframe qui n’existe pas.
La création d’un hook permettant de faire appel à un fichier template est des plus simple, grâce au hook_theme. Définissez dans votre fichier template.php (ou dans un fichier de module) le hook mytheme_simple_iframe :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | <?php /** * template.php */ /** * @implements hook_theme() */ function mytheme_theme() { return array( 'mytheme_simple_iframe' => array( 'template' => 'simple_iframe', 'arguments' => array( 'url' => null, 'width' => '700', 'height' => '500', ), ), ); } ?> |
Simple de compréhension, on déclare un fichier de template simple_iframe auquel 3 variables seront passées. Les arguments width et height ont une valeur par défaut de précisée, ce qui permet de les omettre dans la définition de la ressource externe dans le hook_menu.
Enfin, créez le fichier de template qui affichera une iframe.
1 2 3 4 5 6 7 8 | <?php /** * simple_iframe.tpl.php */ ?> <div class="iframe"> <iframe src="<?php print $url ?>" width="<?php print $width ?>" height="<?php print $height ?>" frameborder="0" align="left"></iframe> </div> |
Désormais, tout accès à l’URL /drupal/page/path chargera le template simple_iframe.tpl.php lorsque Drupal effectuera le rendu de la variable $content du fichier page.tpl.php.
Pourquoi s’embêter à développer un module quand il en existe déjà un : http://drupal.org/project/iframe
Parce que l’idée n’était pas de créer un type de contenu spécifique, les contributeurs n’ayant pas à s’en charger
.
Moi je me demande pourquoi tu t’embêtes avec Drupal alors que phpNuke fonctionne très bien.
(je sors.)