Drupal 本身定義主題實體 Theming Custom Entities

在本身定義主題中輸出結果時,有三個部分或不少其它特殊的函數。如 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

相關文章
相關標籤/搜索