我是Drupal 7的新人,所以我有一个问题。
我有自己的内容类型作家,包括标题,生命年,照片,描述等字段。
我有一项任务是在页面上显示3个随机写作者。实际上我已经在Views模块的帮助下完成了它,但我想自己做。
所以我创建了我自己的模块random_content:
<?php
function random_content_help($path, $arg) {
switch ($path) {
case "admin/help#random_content":
return '<p>'. t("Displays random content") .'</p>';
break;
}
}
function random_content_block_info() {
$blocks['random_content'] = array(
'info' => t('Random content'),
'cache' => DRUPAL_CACHE_PER_ROLE,
);
return $blocks;
}
function random_content_contents() {
$query = db_select('node', 'n')
->fields('n', array('nid', 'title'))
->condition('type', 'writers')
->orderBy('rand()')
->range(0,3)
->execute();
return $query;
}
function random_content_block_view($delta = '') {
switch($delta){
case 'random_content':
$block['subject'] = t('Random content');
if(user_access('access content')) {
$result = random_content_contents();
$items = array();
foreach ($result as $node){
$items[] = array(
'data' => l($node->title, 'node/' . $node->nid) . '</br>',
);
}
if (empty($items)) {
$block['content'] = t('No data availible.');
} else {
$block['content'] = theme('item_list', array(
'items' => $items));
}
}
}
return $block;
}
正如您所看到的,我只学会添加指向特定内容的链接。但是,如何显示标题,生命年限,照片和描述等完整信息?
答案 0 :(得分:1)
要显示完整节点或部分节点,您需要加载节点。 E.g。
$my_node = node_load($nid);
$render_array = array();
$render_array['title'] = array(
'#type' => 'markup',
'#markup' => $my_node->title
);
$author = field_get_items('node', $my_node, 'field_author','und');
$render_array['author'] = array(
'#type' => 'markup',
'#markup' => $author[0]['safe_value']
);
// or as some like to do it
$render_array['author'] = array(
'#type' => 'markup',
'#markup' => $my_node->field_author['und'][0]['value']
);
echo drupal_render($render_array);
注意'und'常量表示语言未定义。如果您启用了翻译/语言以及针对不同语言的不同内容,则必须使用“en”,“de”等作为相应的语言。
您还可以让drupal渲染节点,然后操作或检索单个项目。喜欢这个
$my_node = node_load($nid);
$build = node_view($my_node,'full');
$build['body'][0]['#markup'] = $build['body'][0]['#markup'].' some addition';
$build['field_author'][0]['#markup'] = $build['field_author'][0]['#markup'].' my favorite';
echo drupal_render($build);
使用后一种方法的好处是,然后整个主题引擎启动,并设置所有挂钩作用于内容等。当然,如果您只想检索值,则不需要它。
另请注意,我假设您的作者字段名为field_author。您应该在字段编辑窗口中检查内容类型。