You are here

使用节点占位符方式来定制复杂的页面模板布局

g089h515r806 的头像
Submitted by g089h515r806 on 星期日, 2010-07-11 14:28

dyj315 20:20:39
怎样制作子页面,不是指view里的页面,是比较复杂的页面,像首页
dyj315 20:20:54
但不是首页,只是专题
Linuser 20:21:54
panels
Linuser 20:22:10

或者单独的创建一个节点模板
dyj315 20:23:05
我已经创建了模板,类似首页,但怎么把它和菜单路径连起来呢
dyj315 20:24:29
要是我的这个子页面是两栏,而首页是三栏,怎么办呢?
Linuser 20:27:54
比如页面模板为page-node-8.tpl.php
Linuser 20:28:05
那么你只需要创建一个菜单项
Linuser 20:28:21
路径为node/88
Linuser 20:28:26
就可以了
Linuser 20:28:28

8
dyj315 20:32:37
我有page-loupan.tpl.php,但创建一个菜单项loupan就出错
dyj315 20:32:47
loupan 无效,或者您没有访问权限。
Linuser 20:33:08
你需要先创建一个节点 
dyj315 20:33:29
创建一个节点?
Linuser 20:33:35

然后为这个节点创建一个页面模板文件作为loupan的页面模板文件
dyj315 20:33:43
什么节点,怎么建
Linuser 20:33:54
这个节点里面可以不放内容,
Linuser 20:34:05

主要起到占位的作用
Linuser 20:34:45
在这个节点的页面模板里面,放置page-loupan.tpl.php里面的内容就可以了
dyj315 20:36:27
怎么不放内容,又说放置page-loupan.tpl.php里面的内容就可以了
 
Linuser 20:36:49
占位用的
Linuser 20:37:03
这样你就可以有一个可使用的路径了
dyj315 20:37:13
究竟放内容,还是不放?
Linuser 20:37:37

不放内容,你试验一下就知道了
dyj315 20:37:55
创建一个节点===就是创建内容,比如创建一个page,是吧?

Linuser 20:39:04

Linuser 20:39:18
然后,为其创建一个页面模板文件,
Linuser 20:39:40
页面模板文件中的内容,和page-loupan.tpl.php里面的内容一致就可以了
dyj315 20:39:54
这个page,必须有标题吧,这样才能保存
Linuser 20:40:00
你照我说的做一下
Linuser 20:40:04
那当然了
dyj315 20:41:14
我创建了
dyj315 20:41:19
下一步?
Linuser 20:41:58
为它创建一个页面模板文件
dyj315 20:42:11
这个怎么做?
Linuser 20:42:19
然后把page-loupan.tpl.php里面的内容放进来
dyj315 20:42:20
我有一个模板
Linuser 20:42:38
page-node-888。tpl。php
dyj315 20:42:51

Linuser 20:42:52
这里假定节点ID为888
dyj315 20:45:13
这样做了后,怎么把它和loupan联系起来
dyj315 20:45:34
这样做了后,怎么把它和loupan菜单联系起来呢?

Linuser 20:47:31
创建一个菜单项,名字叫loupan,
Linuser 20:47:46
路径为node/888
Linuser 20:47:59
这里假定节点ID为888

dyj315 20:48:40
我创建一个菜单项,路径是loupan,但出错了
Linuser 20:48:54

路径是node/888

dyj315 20:50:24
好,可以了
Linuser 20:51:19
,仔细体会一下,节点占位符在Drupal中的使用吧
Linuser 20:51:24

很方便的,
Linuser 20:52:09
创建的节点是个"伪节点" ,就是一个壳子,
dyj315 20:52:17
但我怎么把菜单改成楼盘,而不是loupan啊?
dyj315 20:52:52
我傻了
Linuser 20:52:54
菜单项的名字改为楼盘就可以了
dyj315 20:52:57
直接改
dyj315 20:54:45
好,谢谢你。我发现书里或网文里,我都没有看明白这个呢?
Linuser 20:55:17
知识是实践出来的
dyj315 20:55:25
好像没有详细谈这个问题吗?
Linuser 20:56:24

我很久以前的文章写过类似的,
Linuser 20:56:54
只是你没有看到,
dyj315 21:03:11
怎么把路径node/888
改成loupan呢?
Linuser 21:03:52
为node/888设置一个别名,别名为loupan
Linuser 21:04:47
如果你想在页面模板中也改为loupan,那么需要编写预处理函数,

dyj315 21:06:03
预处理函数?
dyj315 21:06:08
怎么弄?
Linuser 21:07:11
明年你再学习吧
Linuser 21:07:22
等你积累积累自己的知识,
Linuser 21:07:25
高级技术
dyj315 21:09:44
现在不管这个高级技术
Linuser 21:10:23
嗯,
dyj315 21:10:37
我现在想做的是怎么为这个模板定制不一样info文件
dyj315 21:11:19
就是和首页的三栏不一样,比如是两栏
Linuser 21:11:47
你在这个页面模板里面,可以任意的修改的
dyj315 21:12:03
甚至前面还有其他特殊区块
Linuser 21:12:23
自己任意的添加各种html markup
dyj315 21:12:45
不需要info文件
Linuser 21:13:02
然后再里面嵌套各种PHP代码就可以了 
Linuser 21:13:20
你实践一下
dyj315 21:18:41
<?php
$block = module_invoke('blog', 'block', 'view', 0);
echo $block['subject'];//显示区块的标题
echo $block['content'];//显示区块的主内容区。
?>
dyj315 21:19:43
像这样显示区块,就不需要与首页定义的栏目一致了?
Linuser 21:28:52
对头
Linuser 21:29:30
就是这样,在这个页面模板里面,可以调用自己的函数,views_embed_view

dyj315 21:29:37
views 里面的定义的区块名字是怎么弄的?
Linuser 21:32:51
你自己想想,我先忙了
dyj315 22:20:21
print views_embed_view("houses","block_4");
 

 
总结:有时候我们需要一个复杂的聚合页面,使用views创建部出来这样的页面,很多人又不愿意使用panels,编写模块又不划算,这个时候,就可以考虑节点占位符这种方式,所谓的节点占位,就是说,我创建一个节点,这个节点只是一个壳子,用来装东西的,而不是用来呈现节点本身,而通过这个节点,我们就可以为其创建一个单独的页面模板文件,在页面模板文件中,我们可以不输出title,content,在里面我们做一些处理,输出一些其它的PHP函数,输出一些特定的html markup。这种方式有优点,也有缺点,很实用的方法。

Drupal版本: