多值字段的主题视图

时间:2011-06-25 16:53:38

标签: drupal drupal-6 drupal-views cck drupal-theming

我知道这可能是一个n00b问题,但我到处寻找答案并没有找到任何答案。

我有“功能”的CCK多值字段,其中产品可以为其输入随机数量的多个功能。我正在编辑视图,因此我可以设置产品页面上功能的输出样式。

现在在我看来,我可以使用以下方法一次输出整个功能列表:

<?php print $fields['field_features_value']->content ?> 

这将为我列出产品的所有功能。但我想要做的是循环并拉出每个单独的功能并单独格式化/设计它。我到底该怎么做?

2 个答案:

答案 0 :(得分:0)

我昨天又遇到了这个问题,花了好几个小时尝试使用Google语法,但没有用。

我能够让这个工作,但我必须承认它是不是最好的方式。它重复了Views已经为我们做过的一些工作,应该被认为是一种蛮力的方法。

我的用例涉及将每个文件字段文件分别放在一个节点中,每个基于节点的行:

<?php
// $Id: views-view-field.tpl.php,v 1.1 2008/05/16 22:22:32 merlinofchaos Exp $
 /**
  * This template is used to print a single field in a view. It is not
  * actually used in default Views, as this is registered as a theme
  * function which has better performance. For single overrides, the
  * template is perfectly okay.
  *
  * Variables available:
  * - $view: The view object
  * - $field: The field handler object that can process the input
  * - $row: The raw SQL result that can be used
  * - $output: The processed output that will normally be used.
  *
  * When fetching output from the $row, this construct should be used:
  * $data = $row->{$field->field_alias}
  *
  * The above will guarantee that you'll always get the correct data,
  * regardless of any changes in the aliasing that might happen if
  * the view is modified.
  */
?>
<?php

$output = explode('|', $output); // I've rewritten the field output in Views like this: [field_portfolio_image-field_name]|[nid]
$paths = $output[0]; // I've set filefield to show file paths rather than the file
$nid = $output[1]; // The NID is all that's really needed for this approach

$node = node_load($nid);
$slots = $node->field_portfolio_image;

foreach($slots as $prop) {
        print '<a href="'.$prop[filepath].'" title="'.$prop[data][description].'" rel="gallery-'.$nid.'" class="colorbox hidden">'.$prop[data][description].'</a>';
    }

?>

我在这里大量使用Devel模块(附带此示例的图像参考),以获取我需要的嵌套值。

Devel view of fields used

我知道有一种更好,更合适的方法,而不是重新加载节点数据,因为在页面加载时,视图应该已经可以访问它。

答案 1 :(得分:0)

当主题观点太具体时,我设置条件,关系,参数和所有视图除了字段。我使用的唯一字段是节点ID。

然后在做主题时我用...

$node = node_load($nid);

...获取节点对象。您可以使用devel模块附带的dpm函数检查节点对象。

dpm($node);

这种“技术”适用于节点,当您不关心优化或速度时,因为如果您要使用1000个节点执行此操作,则应批量加载节点。