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

如何在OG模块中列出某个小组的所有组内容?

赞成!
2
否决!

我安装了og和og extra模块,并按相关文章完成了设置过程。

现在可以看到

我现在想请教:
点击“第一组”进去,如何列出该组下的所有组内容呢?下面的图片是没有的,只有像普通文章的介绍而已。


12 个回答

赞成!
0
否决!

如果不好说明,告诉我思路也可以的,谢谢了。

赞成!
0
否决!

还有按UI设计图的修改样式等问题,也可以告诉一下思路,谢谢!

赞成!
0
否决!

你想象微博一样列出所有组的内容吧?我给你一个方法,就是用db_select 实现。

这里我定义了guild为组的内容类型。

$output = '';
	$query = db_select('node','n')->extend('PagerDefault');
	$query->leftJoin('field_data_field_guild_logo', 'i', 'n.nid = i.entity_id');
	$query->leftJoin('field_data_body', 'b', 'n.nid = b.entity_id');
	$query->fields('n')->fields('i')->fields('b');
	$query->condition('n.status', 1)
		->condition('n.type', 'guild')
		->limit(20);
	$query->orderBy('created', 'DESC');
	$objects = $query->execute()->fetchAll();
	$rows = array();
	foreach ($objects as $key=>$object) {
		$row = array();
		$row['nid'] = $object -> nid;
		$row['title'] = l($object -> title, 'node/'.$object ->nid);
		$row['member_count'] = group_members_count($object ->nid);
		$row['image'] = l('<img src="'.image_style_url('142x121', yisi_file_uri($object -> field_guild_logo_fid)).'" title="'.$object -> title.'"/>', 'node/'.$object ->nid, array('html' => true,'attributes' => array('class' => array('thumbnail'))));
		$row['description'] = drupal_substr(check_markup($object -> body_value, 'plain', FALSE), 0, 50);
		$row['created'] = $object -> created;
    $row['more'] = l('[详细]', 'node/'.$object ->nid, array('attributes' => array('class' => array('more'))));
		$rows[] = $row;
	}
	$output .= theme('guild', array('rows' => $rows));
	$output .= theme('pager');
	return $output;

 

你参考一下

赞成!
0
否决!

诗人,非常感谢你的答复。
我大概看明白了逻辑部分,新问题又来了。
1,我不知道怎么获取group ID

2,我不知道如何在页面显示这个group下的所有内容并列出来,因为group和group content全是node形式的。

赞成!
0
否决!

如无记错,如果你是用node作为group的话,那nid就是gid,不知道是否记错。

赞成!
0
否决!

对,是这样,我先尝试弄个模块。

赞成!
0
否决!

诗人,其实我还不清楚nid在drupal是怎么获取的,

获取到后才能加入条件查询。

$query->condition('n.status', 1)
        ->condition('n.type', 'guild')

是不是要在自已写的模块里重写菜单?

function og_views_menu() {
$items ['node/%'] = array (
   'title' => '小组',
   'description' => '小组内容',
   'page callback' => 'og_list_callback_page',
   'page arguments' => array (1),
   'access callback' => TRUE,
);
return $items;
}

function og_list_callback_page($arg='') {
if(empty($arg)){
  exit();
}
return $arg;
}

是像这样么?但是没效果。

赞成!
0
否决!

通过hook menu 生成一个新的地址,不用 node/% 改用 othername/% 。

赞成!
0
否决!

可以按照飞翔的方式做,写个菜单地址作为群组的首页,然后把函数套入,放到菜单页。这样就能显示数据。

赞成!
0
否决!

谢谢飞翔和诗人。我已按照你们说的做好了,还有一个小问题,就是分页器怎么显示呢?

逻辑部分代码:

function og_views_list_callback_page() { 
	$output = '';
    $query = db_select('node','n')->extend('PagerDefault');
    $query->leftJoin('field_data_body', 'b', 'n.nid = b.entity_id');
    $query->fields('n',array('nid','title','created'))->fields('b',array('body_value','body_summary'));
    $query->condition('n.status', 1)
        ->condition('n.type', 'group')
        ->limit(1);
    $query->orderBy('n.created', 'DESC');
    $objects = $query->execute()->fetchAll();
    $rows = array();
    foreach ($objects as $key=>$object) {
        $row = array();
        $row['gid'] = $object -> nid;
        $row['title'] = l($object -> title, 'groups/'.$object ->nid);
        $row['description'] = $object->body_summary;
        $row['created'] = $object -> created;
        $rows[] = $row;
    }
    $output .= theme('pager');
    $output .= theme('grouds', array('rows' => $rows));
    $output .= theme('pager');
    return $output;
}

tpl代码

<ul>
<?php foreach($rows as $data){?>
<li class="list">
		<div class="title"><?php print $data['title']?></div>
  <?php print $data['description']?>
  <div class="created"><?php print $data['created']?></div>
	</li>
<?php }?>
</ul>
赞成!
0
否决!

还有下面的回复表单,也没有啦,怎么调出来呢?

赞成!
0
否决!

我想了解一下,如果这样的开发方式,我要加入新增的模块,也只能手工写代码引入么?