【问题标题】:Return owner fields from silverstripe $many_many relationship从 silverstripe $many_many 关系返回所有者字段
【发布时间】:2017-06-20 04:34:33
【问题描述】:

我在TestimonialBlocks之间有many_many关系 Testimonials,定义为:

class TestimonialBlockSlice extends ContentSlice
{
    private static $db = array (
        'IconColour' => 'Enum("White,Blue,Green,Orange","Green")'
    );

    private static $many_many = array(
        'Testimonials' => 'Testimonial'
    );

    private static $many_many_extraFields = array(
        'Testimonials' => array('SortOrder' => 'Int')
    );

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

        $config = GridFieldConfig_RelationEditor::create()
            ->removeComponentsByType('GridFieldDeleteAction')
            ->addComponents(new GridFieldDeleteAction('unlinkrelation'));
        $config->getComponentByType('GridFieldDataColumns')->setDisplayFields(array(
            'Text'=> 'Text',
            'Author'=> 'Author'
        ));

        $testimonialsField = new GridField(
            'Testimonials',
            'Testimonial',
            $this->Testimonials(),
            $config
        );

        $fields->addFieldToTab('Root.Main', $testimonialsField);
        return $fields;
    }
}


class Testimonial extends DataObject {
    private static $db = array(
        'Text' => 'Text',
        'Author' => 'Varchar(255)'
    );

    private static $belongs_many_many = array(
        'TestimonialBlocks' => 'TestimonialBlockSlice'
    );

    private static $summary_fields = array(
        'Text' => 'Text',
        'Author' => 'Author'
    );
}

一切正常,但在模板中我无法获得包含 TestimonialBlockSlice 的 $IconColour ......我已经尝试了我能想到的一切。我正在做这样的事情:

<% loop Testimonials.Limit(2) %>
    <div class="testimonial">
        <div class="icon-quote"><img src="/themes/images/icon-quote-{ ##getIconColourHere## }.png"></div>
        <div class="testimonial-text">$Text</div>
        <div class="testimonial-author">$Author</div>
    </div>
<% end_loop %>

TestimonialBlockSlice 扩展了全盛期/silverstripe-slices,其中 ContentSlice 是一个 DataObject。 关于如何引用这个特定 TestimonialBlockSlice 的 IconColour 的任何想法?非常感谢您的帮助:)

【问题讨论】:

    标签: php silverstripe


    【解决方案1】:

    当您进入循环时,您输入正在循环的项目的the scope/context。在这种情况下,您处于 Testimonial 的上下文中。

    IconColour 属于TestimonialBlockSlice 类(父类),因此您可以移动"up" a scope level 来访问它:

    <% loop Testimonials.Limit(2) %>
        <div class="testimonial">
            <div class="icon-quote"><img src="/themes/images/icon-quote-{$Up.IconColour}.png"></div>
            <div class="testimonial-text">$Text</div>
            <div class="testimonial-author">$Author</div>
        </div>
    <% end_loop %>
    

    【讨论】:

    • 谢谢罗比,这是我尝试的第一件事:) 但是,在这种情况下不起作用......
    • 刚刚注意到我使用了 IconColor - 已编辑以显示 IconColour
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-05
    • 1970-01-01
    • 2013-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多