Drupal 7 开发内部培训资料, 分头诗人

列表页,我该用views,还是自己写?

赞成!
0
否决!

遇到了一个很纠结的问题,关于用还是不用view。

A.不用view我得在taxonomy/term/xxxx这样的地方输出文章列表,还好我的术语都是单选的,而且我还用了标签,dp7刚好能满足我关于标签的要求。

问题是taxonomy/term/xxxx样式复写是在node.tpl.php,我现在还不知道怎么将其和文章节点样式分开复写(文章列表会显示几个特定的字段和无图片的文章摘要以及文章链接,文章链接的这个变量我也不知道,而文章节点也就是全文+社交分享等等),而且后面还需要有页码功能,我不知道不用view的话dp7能否实现(前提当然是我的能力范围内,实现绝对是能实现的)。

所以不用view我得解决两个问题:1.复写列表样式并且还不能影响到文章全文浏览的样式,2.得为列表页加上页码,如果view的变量和函数可以拿出来用就好了。

B.用view,输出的时候很方便灵活,但遇到了以下几个问题:

view建的一个block输出文章列表,文章加了术语表字段(单选的,可以看作是文章栏目分类),现在block输出规则是只要属于某几个指定栏目就输出,并且把栏目名称作为链接显示出来,但是链接是指向 taxonomy/term/xxxx这样的地址的,怎样才能让各个栏目链接指向views生成的专门只显示对应栏目的页面?

还有就是标签也是指向的taxonomy/term/xxxx这样的地址,不知道猪跑啦上的标签功能是如何实现的(诗人问你这么多次了,你就从了我们吧~~~~嘿嘿~~~~~)

2 个回答

赞成!
2
否决!

A,完全可以,猪跑啦是没用views的,复写node.tpl.php 跟suggestion有关,请看Drupal 7 模板改写建议,而内容页跟列表页,其实都跟node.tpl.php 有关,在drupal,内容页用full,列表页用teaser,而在node.tpl.php 通过  php代码 if(!page) 判断是内容页还是列表页。所以可以完全不影响的。

如 

if(!page) {
内容页
}
else{
列表
}

至于列表页,taxonomy/term/[tid] 类页面,本身就支持页码。

B,关于怎样才能让各个栏目链接指向views生成的专门只显示对应栏目的页面,views 太久不用,还真不太记得,但印象是可以重写链接地址的,你找找views中分类字段,编辑它,这里以标题为例:点击field 中标题

在弹出的窗口找到 REWRITE RESULTS,勾选 Output this field as a link,Link path中输入你的views地址就好了,至于views的名称如何动态绑定,尝试一下token。

 

C,关于标签,这个标签不是三言两语的,需要写自定义模块。这里贴代码给你参考。

drupalla_tags/drupalla_tags.info

;$Id$

name = Drupalla Tags
description = 猪跑啦标签模块.
core = 7.x
package = Drupalla
files[] = drupalla_tags.module

dependencies[] = drupalla
;php = 5.2

drupalla_tags/drupalla_tags.module

<?php

/**
 * Implements hook_menu().
 */
function  drupalla_tags_menu() {
  $items['t/%tags'] = array(
    'title' => t("Tags"),
    'description' => t("Tags"),
    'page callback' => 'show_tags',
    'page arguments' => array(1),
    'file' => 'drupalla_tags.pages.inc',
    'access arguments' => array('view_tags'),
	'access callback' => TRUE,
    'type' => MENU_NORMAL_ITEM, 
  );
  return $items;
}


/**
 * hook_theme()
 */

function drupalla_tags_theme(){
	return array(
		'drupalla_tags' => array(
        'template' => 'drupalla_tags',
				'variables' => array(),
				'path' => drupal_get_path('module', 'drupalla_tags') . '/tpl',
		),
	);
}

/**
 * Implements hook_permission().
 */
function drupalla_tags_permission() {
  return array(
    'view_tags' =>  array(
      'title' => t('view tags'),
    ),
  );
}

function tags_load($tags){
	$output = '';
	$query = db_select('taxonomy_term_data', 't')->fields('t', array('tid'))->condition('t.vid', 1)->condition('t.name', $tags)->execute()->fetchAssoc();
	$output = taxonomy_term_load($query['tid']);
	return $output;
}

 

drupalla_tags/drupalla_tags.pages.inc

<?php
function show_tags($tag){
	$output = '';
	$query = db_select('field_data_field_tags','t')->extend('PagerDefault')->limit(50);
	$query->fields('t', array('entity_id'))
		->condition('t.field_tags_tid', $tag->tid)->orderBy('field_tags_tid', 'DESC');
	$query = $query->execute()->fetchAll();
	$rows = array();
	foreach ($query as $ob)
	{
		$row = array();
		$node = node_load($ob->entity_id);
		//print_r($node);
		$row['title'] = l($node->title, 'node/'.$node->nid);
		$row['author'] = $node->name;
		$row['created'] = $node->created;
		$type="";		
		switch($node->type){
			case 'question':
			  $type = l('问题', 'questions');
			  break;
			case 'blog':
			  $type = l('博客', 'blog');
			  break;
			case 'module':
			  $type = l('模块', 'project/modules');
			  break;
			case 'themes':
			  $type = l('模板', 'project/themes');
			  break;
			case 'cases':
			  $type = l('案例', 'cases');
			  break;
			default:
			  $type = "";
		}
		$row['type'] = $type;
		$rows[] = $row;		
	}
	$output .= theme('pager');
	$output .= theme('drupalla_tags', array('rows' => $rows));
	$output .= theme('pager');
	return $output;
}

 

drupalla_tags/tpl/drupalla_tags.tpl.php

<div id="articlelist">
<ul class="txtlist">
<?php foreach($rows as $data){?>
  <li><span class="datetime"><?php print $data['type'] ?></span><?php print $data['title'] ?></li>
<?php }?>
</ul>
</div>

 

剩下的就得靠自己的参透了。

赞成!
1
否决!

哇,好快呀!谢谢诗人!