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']);]
Drupal 自己定义主题实体 Theming Custom Entities的更多相关文章
- Drupal如何解析主题继承关系?
Drupal中,主题是可以继承的,或者说是扩展.例如,要创建一个新的名为custom的主题,该主题与名为default的主题只有某些细小的差别.这个时候,不需要复制一份default到custom,可 ...
- Java定义bean实体类中的变量时变量名的问题
首先:TMD,这个问题花了我两个多小时,居然是因为一个字母的大小写导致的,我瞬间就&Y^%^&%&()*%¥%¥¥&^#@%&; 事情是酱紫的: 我定义了一个变 ...
- HTML字符实体(Character Entities),转义字符串(Escape Sequence)
为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希 ...
- HTML字符实体(Character Entities),转义字符串(Escape Sequence)【转】
为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希 ...
- HTML字符实体(Character Entities),转义字符串(Escape Sequence) 转
为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希 ...
- [转]HTML字符实体(Character Entities),转义字符串(Escape Sequence)
为什么要用转义字符串? HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希 ...
- Android中为窗口定义主题
在res/values/styles文件夹中定义如下: <style name="myTheme"> <item name="android:windo ...
- 在 EFCore 定义的实体中进行 FreeSql 开发
EFCore 和 FreeSql 都是 ORM,在各自领域都有着独特的优势. 问题起源 假设某项目是使用 EFCore 开发的,且实体 特性或FluentApi 都配置好了,如: protected ...
- HTML字符实体(Character Entities)与 转义字符串(Escape Sequence)(转)
为什么要用转义字符串?HTML中<,>,&等有特殊含义(<,>,用于链接签,&用于转义),不能直接使用.这些符号是不显示在我们最终看到的网页里的,那如果我们希望 ...
随机推荐
- POJ 1200 Hash
我的hash从来没写对过........ (白学了快一年OI --原来连个hash都没写对过) 但是 但是 今天是一个值得纪念的日子. 看看标题 我竟然在写hash的题解. (好了好了 废话少说) 题 ...
- [Offer收割]编程练习赛35
有歧义的号码 #include<stdio.h> #include<string.h> #include<stdlib.h> int cmp(const void ...
- JavaScript中的工厂方法、构造函数与class
JavaScript中的工厂方法.构造函数与class 本文转载自:众成翻译 译者:谢于中 链接:http://www.zcfy.cc/article/1129 原文:https://medium.c ...
- js---通过arguments来获取指定参数
通过访问arguments对象的length属性可以获取有多少个参数传递给了函数. 如:每次被调用的时候,输出传入其中的参数个数 function doAdd(){ alert(arguments.l ...
- Android 使用WindowManager实现Android悬浮窗
WindowManager介绍 通过Context.getSystemService(Context.WINDOW_SERVICE)可以获得 WindowManager对象. 每一个WindowMan ...
- Android开发笔记(7)——Intent启用应用软件
转载请注明:http://www.cnblogs.com/igoslly/p/6844154.html Intent启用应用软件 intent可以用来要求其他应用组件完成特定工作,如相机.电话.地图等 ...
- 决策实验(2)分水岭&哄骗实验
转载请注明http://www.cnblogs.com/igoslly/p/6824544.html 史密斯实验II PART I 分水岭实验 两种选项 A 50%没钱,50% 45元 B 获取固定数 ...
- 参数转对象 类似 ?camera=1&travel=0&faceScore=1
parseQueryString(url) { var obj = {}; var keyvalue = []; var key = "", value = "" ...
- in 与 exist , not in 与 not exist
in和exists in 是把外表和内表作hash 连接,而exists是对外表作loop循环,每次loop循环再对内表进行查询.一直以来认为exists比in效率高的说法是不准确的. 如果查询的两个 ...
- 从ReadImage到ML- 一个不错的博客
实在对不起原作者,为了不把文章淹没在 转载的海洋里.... 原文链接: http://www.cnblogs.com/tornadomeet/archive/2012/09/26/270404 ...