Silverstripe 3.1是否在ss模板中提供了字段的标题/名称?

时间:2015-03-23 15:17:58

标签: silverstripe

例如

static $db = array('CarName' => 'Text')
public static $summary_fields = array('CarName' => 'Car Name')

在ss模板中,这将显示名为CarName

的字段的值
<p>$CarName</p>

我还可以显示我在$ summary_field中包含的标题,即。 &#39;车名&#39;而不是仅仅在ss模板中手动输入?

3 个答案:

答案 0 :(得分:2)

据我所知,单个摘要字段没有直接访问权限。你可以写一个简单的扩展,为你做到这一点。有点像:

<?php
class SummaryExtension extends DataExtension
{
    public function SummaryField($fieldName){
        $fields = $this->owner->summaryFields();
        if(isset($fields[$fieldName])){
            return $fields[$fieldName];
        }
        return $fieldName;
    }
}

然后通过_config.yml或直接将其作为静态变量添加到DataObject:

private static $extensions = array('SummaryExtension');

在模板中,您可以通过写:

输出标题
$SummaryField('CarName')

答案 1 :(得分:0)

我不知道这是否有用但是getName() function on DBField所以我会尝试$ CarName.Name

答案 2 :(得分:0)

写了这个有效的函数,把它放在你使用的页面的Page_Controller中 -

public function getSummaryFlds() {
    $getSummFlds = $this->owner->summaryFields();
    $newArr = array();
    foreach ($getSummFlds as $dbfield => $title) {
        $value = $this->$dbfield;
        $newArr[] = ArrayData::create(array('Title' => $title, 'Value' => $value));
    }
    var_dump($getSummFlds);
    $newArray = ArrayList::create(
                $newArr
            );
    $result = $newArray;
    return $result;
}

然后在ss模板中

<% loop $SummaryFlds %>
    <dt>$Title</dt><dd>$Value</dd>
<% end_loop %>

结果是所有带有标题和值的$ summary_fields。