在本身定義主題中輸出結果時,有三個部分或不少其它特殊的函數。如 hook_menu,Page Callback。MODULE_theme 鉤子 php
一、hook_menu node
爲了使用本身定義的實體。像建立、編輯、刪除、查看實體的功能,就必需要建立一些 Menu path。這裏建立、編輯、刪除是與Drupal's Form API相關的,經過hook_menu,可以定義咱們需要的路徑來訪問這個新建立的實體內容 markdown
function my_module_menu() { $items['my_entity/%my_entity'] = array( 'title callback' => 'my_entity_page_title', 'title arguments' => array(1), 'page callback' => 'my_entity_page_view', 'page arguments' => array(1), 'access arguments' => array('view entities'), 'type' => MENU_CALLBACK, ); return $items; }
二、Page Callback xss
在上面的樣例中。咱們在訪問這個路徑時,定義了 page callback 相應的 my_entity_page_view 函數,所以,接下來就需要建立這個函數,例如如下 函數
/** * This is the callback we defined to be executed when a user * requests http://mysite.com/my_entity/1 (1 is just an example ID, * it could be anything). This function will set up the data and * prepare the render array(s). You will specify the template to * use in this callback. The critical thing to note below is the * order in which field_attach_prepare_view, entity_prepare_view * and field_attach_view are called. These functions must be called * in this order and they must be called before you specify which * theme to use. */ function my_entity_page_view($entity, $view_mode='full') { $entity_type = $entity->entityType(); $entity_id = entity_id($entity_type, $entity); // // Remove previously built content, if exists // $entity->content = array(); $entity->title = filter_xss($entity->title); // // Build the fields content // field_attach_prepare_view($entity_type, array($entity_id => $entity), $view_mode); entity_prepare_view($entity_type, array($entity_id => $entity)); $entity->content += field_attach_view($entity_type, $entity, $view_mode); // Specify the theme to use and set the #element. Note that the key // you use to pass the entity object must match the key you set in the // variables in my_module_theme(). So in the case below, we use the key // named #element because in my_module_theme() we set the following code: // // array( // 'my_entity' => array( // 'variables' => array('element' => null), // 'template' => 'my_entity' // ), // ); // $entity->content += array( '#theme' => $entity_type, '#element' => $entity, '#view_mode' => $view_mode, '#language' => LANGUAGE_NONE, ); return $entity->content; }
三、MODULE_theme() Hook post
到眼下爲止,爲了這個實體咱們已經定義了菜單項還有CALL BACK返回值,接下來。剩下的就需要建立一個指向模板的文件。看上面部份內容,可以看到內容爲: ui
$entity->content += array( '#theme' => 'my_entity' );意思是說。指向 my_entity ,那麼,應該怎樣定義呢?
function my_module_theme($existing, $type, $theme, $path) { return array( 'my_entity' => array( 'variables' => array('element' => null), 'template' => 'my_entity_template' ), ); }
四、依據第三部分的內容。咱們則需要建立名爲 my_entity_template.tpl.php 的模板文件 this
[php // In a real module variables should be manipulated in a preprocess function. $content = $element->content; ] <div class="[php print $classes; ]"> [php print render($content['title']); ] [php print render($content['field_date']); ] [php print render($content['field_author']);] [php print render($content['field_image']);] [php print render($content['field_description']);]
原文連接:https://drupal.org/node/1238606 code