我有点疯了…:)
我只是想从内容配置文件内容类型添加CCK字段到page-user.tpl.php(我正在创建一个高度主题的用户配置文件页面)。
似乎有两种方法,它们都有一个独特的缺点,我似乎无法克服:
'$content profile'方法。
$var = $content_profile->get_variables('profile');
print $var['field_last_name'][0]['safe'];
这是伟大的,除了我似乎不能传递当前查看的用户到$content_profile,因此它总是显示登录的用户。
$内容概要文件加载的方法。
$account_id = arg(1);
$account = user_load($account_id);
$user_id = $account->uid;
$var = content_profile_load('profile', $user_id);
print $var->field_first_name[0]['value'];
很好,但现在我不能访问完整的渲染字段,只有纯值(即,如果字段有段落,他们不会显示)。
我怎么能同时拥有两样东西呢?换句话说,我如何显示与当前查看的用户相关的字段,这些字段也被呈现(1中的"安全"格式)?
我用谷歌搜索了又搜索,结果总是在原地打转。(
欢呼,詹姆斯。
您的内容配置文件加载方法似乎是最接近您想要的。
在你的例子中:
$account_id = arg(1);
$account = user_load($account_id);
$user_id = $account->uid;
$var = content_profile_load('profile', $user_id);
print $var->field_first_name[0]['value'];
$var只是一个节点对象。您可以通过多种方式获得"完整呈现的字段"(假设您的意思是应用了过滤器的字段)。
要检查的最重要的事情是你的字段实际上是正确配置的。
去:admin/content/node-type/[node-type]/fields/field_[field-name]配置字段,并确保在文本处理下选择了"过滤文本"。
如果不能解决这个问题,试着应用这个:
content_view_field(content_fields("field_last_name"), $var, FALSE, FALSE)
(更多信息在这里:http://www.trevorsimonton.com/blog/cck-field-render-node-formatter-format-output-print-echo)
代替:
print $var->field_first_name[0]['value'];
如果这些都没有帮助…试试我在我的博客上关于这个问题的一些东西:http://www.trevorsimonton.com/blog/print-filtered-text-body-input-format-text-processing-node-template-field-php-drupal
在创建用户配置文件页面时,有一个内置的机制。只需创建一个用户模板文件user_profile.tpl.php。
当您使用内置机制时,您可以自动访问正在浏览的用户的$account对象,包括所有用户配置文件的cck字段。您有您正在寻找的字段,而不必以编程方式加载用户。
我有一个名为profile_bio的字段,并且能够吐出任何标记,而无需询问$account。
<?php if ($account->content[Profile][profile_bio]['#value']) print "<h3>Bio</h3>".$account->content[Profile][profile_bio]['#value']; ?>
我以前尝试过通过用户页面显示配置文件节点字段来主题化内容配置文件,但对我来说总是有点"黑客"。我越来越喜欢的是简单地转到该节点类型的内容配置文件设置页面,并将显示设置为"显示完整内容"。这是很好的,除了愚蠢的标记,如内容配置文件注入的节点类型名称。
解决方案是为内容概要文件模板添加预处理功能。它将取消$title的设置,并删除通常出现在配置文件上的节点类型名称。
function mymodule_preprocess_content_profile_display_view(&$variables) {
if ($variables['type'] == 'nodetypename') {
unset($variables['title']);
}
}
与此类似的函数应该可以达到这个目的。现在,要对用户配置文件进行主题化,只需像往常一样对配置文件节点进行主题化即可。