2017-09-21 10 views
0

J'ai créé un bloc personnalisé et je voudrais l'associer à un tpl dans le module associé.drupal 7 - Créer un bloc personnalisé et lui affecter un tpl

Actuellement, je ne peux associer qu'un fichier tpl dans le dossier .

Je voudrais que ce soit un tpl du module et ensuite utiliser le hook_menu et lui transmettre des données, ce qui est impossible (à ma connaissance) avec un tpl dans le dossier de thème.

Est-ce encore possible? Si ce n'est pas possible, je voudrais utiliser le tpl dans mon thème comme un conteneur et utiliser le hook_menu pour transmettre son contenu mais je ne sais pas comment retourner le tpl/thème que je vais créer dans le module.

Quelqu'un peut-il m'aider?

Répondre

1

J'espère que l'exemple ci-dessous vous aide à

function MYMODULEBLOCK_block_info() { 
    $blocks['MYMODULE_BLOCK_NAME'] = array(
    'info' => t('MYMODULE BLOCK TITLE'), 
    'cache' => DRUPAL_NO_CACHE, //there are a number of caching options for this 
); 

    return $blocks; 
} 

function MYMODULEBLOCK_block_view($delta = ''){ 
    switch($delta){ 
    case 'MYMODULE_BLOCK_NAME': 
     if(user_access('access content')){ //good idea to check user perms here 
     $block['subject'] = t('MYBLOCK_TITLE'); 
     $block['content'] = MYMODULE_BLOCK_FUNCTION_ITEMS(); 
     return $block; 
     } 
     break; 
    } 
} 

function MYMODULE_BLOCK_FUNCTION_ITEMS(){ 
    $items = array(); 
    $items['VAR_ONE'] = array('#markup' => 'VAR_ONE_OUTPUT'); //this is the simplest kind of render array 
    $items['VAR_TWO'] = array(
         '#prefix' => '<div>', 
         '#markup' => 'VAR_TWO_OUTPUT', 
          '#suffix' => '</div>', 
         ); 
// this is where the $items get sent to your default MYMODULE_BLOCK.tpl.php that gets 
// registered below 
     return theme('MYMODULE_BLOCK_FUNCTION_ITEMS', array('items' => $items)); 
    } 

//here you are registering your default tpl for the above block 
function MYMODULE_theme() { 
    $module_path = drupal_get_path('module', 'MYMODULE'); 
    $base = array(
    'path' => "$module_path/theme", 
); 
    return array(
    'MYMODULE_BLOCK_FUNCTION_ITEMS' => $base + array(
     'template' => 'MYMODULE_BLOCK', //leave off .tpl.php 
     'variables' => array('items' => NULL,), 
    ), 
); 
} 

Tous les trucs en MAJUSCULES (sauf DRUPAL_NO_CACHE) peut être nommé que vous voulez

Et puis dans un sous-dossier dans votre module appelé thème/il devrait un fichier appelé MYMODULE_BLOCK.tpl.php qui pourrait avoir ce en elle:

<?php 

$items = $variables['items']; 

print render($items['VAR_ONE']); 
print render($items['VAR_TWO']); 

Et si vous vouliez, vous pouvez réellement remplacer le module « par défaut » Mise vous venez de faire pour mise en MYMODULE_BLOCK.tpl.php dans votre thème que vous le souhaitez dans le bloc - monModule - DELTA.tpl.php

1

La façon dont je fais est la suivante ...

function YOURMODULE_menu(){ 
    $items['somepage'/%] = array(
     'title' => 'Some page title', 
     'page callback' => 'YOURMODULE_page', 
     'page arguments' => array(1), 
     'type' => MENU_CALLBACK, 
     'access arguments' => array('access content'), 
    ); 
    return $items; 
} 

function YOURMODULE_page($data){ 
    $output = 'value from YOURMODULE module! = '.$data; 
    return theme('theme_file',array('results' => $output)); 
} 

function YOURMODULE_theme() { 
    $path = drupal_get_path('module', 'YOURMODULE'); 
    return array(
     'theme_file' => array(
      'variables' => array('results' => null), 
      'template' => 'theme_file', 
      'path' => $path, 
     ), 
    ); 
} 

Placez votre fichier tpl theme_file.tpl.php dans le répertoire de votre module et utilisez le code ci-dessous.

<?php print $results; ?> 

ou

function YOURMODULE_theme() { 
    return array(
     'theme_file' => array(
      'variables' => array('results' => null), 
      'template' => 'theme_file', 
     ), 
    ); 
} 

Placez votre theme_file.tpl.php fichier tpl dans votre répertoire thématique et à l'intérieur placer le code ci-dessous

<?php print $results; ?> 

Accédez à votre http://yourdomain.com/somepage/somedata pour voir le résultat .