当前位置: 代码迷 >> 综合 >> drupal 列表页
  详细解决方案

drupal 列表页

热度:99   发布时间:2023-12-06 17:54:03.0

刚开始以为drupal会为我生成个列表页 查了很多资料后最终还是认定了我还是天真的。。。。。

我的希望就是 我创建一个分类,如:中国-国内新闻-河北 河南 山东 山西。。。 这些都是列表,而且结构都是一样的,而 外国-美国新闻-旧金山 加州 底特律。。。 这个结构跟国内新闻是不同的,那么 我如何能更好的控制模版呢?

drupal中page的读取顺序是

page--node--edit.tpl.php
page--node--1.tpl.php
page--node.tpl.php
page.tpl.php

那么 我无法通过分类读取到自己想要的模版 如 page--hebei.tpl.php

在drupal官方论坛中讨论这个的人还真不少 其实已经有了最佳方案!

template.php中 添加代码

<?php
function themeName_preprocess_page(&$vars, $hook) {if (isset($vars['node'])) {// If the node type is "blog_madness" the template suggestion will be "page--blog-madness.tpl.php".$vars['theme_hook_suggestions'][] = 'page__'. $vars['node']->type;}
}
?>

就是它了!~虽然简短 但是解决问题

还有个更长的 应该算是完美版吧

<?php
function phptemplate_preprocess_page(&$variables) {
global $user;
if (module_exists('path')) {//allow template suggestions based on url paths. $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));if ($alias != $_GET['q']) {$suggestions = array();$template_filename = 'page';foreach (explode('/', $alias) as $path_part) {$template_filename = $template_filename . '-' . $path_part;$suggestions[] = $template_filename;}$alias_array =  explode('/', $alias);$variables['template_files'] = $suggestions;}// Add a single suggestion.if (module_invoke('throttle', 'status') && isset($user->roles[1])) {$variables['template_file'] = 'page-busy';}// Add multiple suggestions.if (!empty($user->roles)) {foreach ($user->roles as $role) {$filter = '![^abcdefghijklmnopqrstuvwxyz0-9-_]+!s';$string_clean = preg_replace($filter, '-', drupal_strtolower($role));$variables['template_files'][] =  'page-'. $string_clean;}if (drupal_is_front_page()) {$variables['template_file'] = 'page-front';}}}
}
?>

其他规则:

如果有一个node/2 那么它的page页模板名字为:page--node--2.tpl.php

如果有新建 内容内型 newslistcontent 那么它的模板名字为:page--newslistcontent.tpl.php

分类taxonomy copying /modules/taxonomy/taxonomy-term.tpl.php 改名为 taxonomy-term--tags.tpl.php 如:taxonomy-term--newslist.tpl.php

node-type.tpl.php的例子:node--newslistcontent.tpl.php  

某term的page布局更改

page--taxonomy--term--33.tpl.php



如果希望两个节点采用不同的布局,可以用page--node--(数字).tpl.php,但是这样写不直观,最好能用一看就懂的文字描述,下面的代码解决了这一问题:

<?php
function MYTHEME_preprocess_page(&$variables, $hook) {   //Add multiple suggestions for pages based on Nodeif(arg(1) == 3) {  //For node 3$variables['theme_hook_suggestions'][] =  'page__contact';} if(arg(1) == 4) {   //For node 4$variables['theme_hook_suggestions'][] =  'page__about';}
}
?>