首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >银条从CheckboxSetField值创建无序列表(many_many)

银条从CheckboxSetField值创建无序列表(many_many)
EN

Stack Overflow用户
提问于 2015-04-11 23:24:44
回答 2查看 572关注 0票数 0

我在学习,但我撞到了另一堵墙所以我有另一个问题.

因此,我创建了一个包含公司所有计划功能的DataObject,并且每当创建新的成员计划类型时,我都会将所有这些功能显示为带有CheckboxSetField的复选框,这样用户就不必费解HTML字段了。

所有的设置和工作都很好,唯一的问题是当我要求复选框的值显示计划功能列表时,我会得到一个单独的逗号分隔列表.这是不好的,因为我需要能够将每个选定的特性作为列表项(<li> ... </li>)显示。

现在,它正在返回列表,如1、22 ,3,它们是所选计划特性的it。对于将复选框的值设置为计划特性的文本字符串,我犹豫不决,因此我打算使用这些I来引用PlanFeature表中的记录。有更好的方法吗?我想我至少需要控制一下这个名单.

我花了整整几个小时来尝试(但失败)使这个工作,我想我需要一些帮助。由于我不知道如何从这个列表中提取条目,所以我也没有开始探索如何在模板中显示内容,所以我可能也需要一些帮助。(预先谢谢:)

这是我的密码。

PlanFeature.php

代码语言:javascript
复制
<?php

class PlanFeature extends DataObject {
    private static $db = array (
        'PlanFeatureText' => 'Varchar',
    );

    private static $belongs_many_many = array (
        'PlanFeature' => 'Pricing',
    );

    private static $summary_fields = array (
        'ID' => 'ID',
        'PlanFeatureText' => 'Plan Feature',
    );

    public function getCMSFields() {
        $fields = FieldList::create(
            TextField::create('PlanFeatureText')
        );
        return $fields;
    }
}

ServicePlan.php in getCMSFields()

代码语言:javascript
复制
..//

CheckboxSetField::create(
    'PlanFeatures',
    'Choose Your Plan Features',
    PlanFeature::get()->map('ID', 'PlanFeatureText')
),

..//

Pricing.php

代码语言:javascript
复制
<?php
class Pricing extends Page {
private static $has_many = array (
    'ServicePlans' => 'ServicePlan'
);

private static $many_many = array (
    'PlanFeatures' => 'PlanFeature'
);

public function getCMSFields() {
    $fields = parent::getCMSFields();

    $fields->addFieldsToTab('Root.Plans', GridField::create(
        'ServicePlans',
        'Orenda Force Service Plan Information',
        $this->ServicePlans(),
        GridFieldConfig_RecordEditor::create()
    ));
    $fields->addFieldsToTab('Root.Plans', GridField::create(
        'PlanFeatures',
        'Manage Plan Features',
        $this->PlanFeatures(),
        GridFieldConfig_RecordEditor::create()
    ));

    return $fields;
    }
}

class Pricing_Controller extends Page_Controller {

}

在这里我完全迷路了..。所以我相信这一切都是不对的

Page.php (in Page_Controller)

代码语言:javascript
复制
function ExplodedFeatures() {
    $set = new DataObjectSet();

    if($Features = Pricing::get()->First()->PlanFeatures) {
        foreach(explode(',',$Features) as $key => $value) {
            $set->push(new ArrayData(array('Value' => $value)));
        }
    }

echo $set;
}

public function Features() {
    $Feature = Pricing::get();
    $Feature = $Feature->PlanFeatures()->getOptions();
    return $Feature;
    //return $Feature;
}

Pricing.ss

代码语言:javascript
复制
<section class="body pricing">
    <div class="content">
    <h2 class="title-02 text-monochrome">Pricing</h2>
        <% loop $ServicePlans %>
            <div class="col-1-3 card pricing">
                <div class="pricing__header $PlanColor">
                    <p class="pricing__plan-name">$PlanName</p>
                    <p class="pricing__price">$PlanPrice<sub>$PlanRenewal</sub></p>
                </div>
                <div class="card__contents">
                    <h3 class="title-06">Plan details</h3>
                    <ul>
                    <% loop $PlanFeatures %>
                      <li>$PlanFeatureText</li>
                    <% end_loop %>
                    </ul>
                </div>
            </div>
        <% end_loop %>
        $Content
    </div>
</section>
EN

回答 2

Stack Overflow用户

发布于 2015-04-11 23:59:32

您不需要在Page_Controller中编写任何代码,因为PricingPlanFeature之间已经有了关系。

Pricing的模板(我注意到它是一个页面类型)中,您应该能够使用以下方法生成PlanFeature值的列表:

代码语言:javascript
复制
<ul>
<% loop $PlanFeatures %>
  <li>$PlanFeatureText</li>
<% end_loop %>
</ul>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29584213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档