Drupal 自己定义主题实体 Theming Custom Entities
在自己定义主题中输出结果时,有三个部分或很多其它特殊的函数。如 hook_menu,Page Callback。MODULE_theme 钩子
1、hook_menu
为了使用自己定义的实体。像创建、编辑、删除、查看实体的功能,就必须要创建一些 Menu path。这里创建、编辑、删除是与Drupal's Form API相关的,通过hook_menu,能够定义我们须要的路径来訪问这个新创建的实体内容
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; }
2、Page Callback
在上面的样例中。我们在訪问这个路径时,定义了 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; }
3、MODULE_theme() Hook
到眼下为止,为了这个实体我们已经定义了菜单项还有CALL BACK返回值,接下来。剩下的就须要创建一个指向模板的文件。看上面部分内容,能够看到内容为:
$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' ), ); }
4、依据第三部分的内容。我们则须要创建名为 my_entity_template.tpl.php 的模板文件
[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']);]