在本身定义主题中输出结果时,有三个部分或不少其它特殊的函数。如 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