【问题标题】:Silverstripe Uploadify Add fieldsSilverstripe Uploadify 添加字段
【发布时间】:2013-01-21 04:49:11
【问题描述】:

我希望将多张图片附加到 silverstripe 中的页面(最终将充当旋转画廊),并且想知道用户在上传每张图片时是否可以为每张图片添加链接?

【问题讨论】:

    标签: image uploadify silverstripe


    【解决方案1】:

    是的。这可以通过将has_many 与包含图像和链接对象的自定义DataObject 建立关系来实现。

    在下面的示例中,我们有一个HomePage,它与Slide 具有has_many 关系。 Slide 包含 ImageLink

    SilverStripe Lesson 9 - Working with data relationships - $has_many 中有一些关于这个主题的好信息。

    我在这个例子中使用的可选排序模块是SortableGridField

    银条 3.1

    Slide.php

    class Slide extends DataObject {
    
        private static $db = array(
            'Title' => 'Text',
            'SortOrder' => 'Int'
        );
    
        private static $has_one = array(
            'HomePage' => 'HomePage', 
            'Image' => 'Image', 
            'Link' => 'SiteTree'
        );
    
        private static $field_labels = array( 
            'Image.CMSThumbnail' => 'Image', 
            'Link.Title' => 'Link'
        ); 
    
        private static $summary_fields = array( 
            'Title',
            'Image.CMSThumbnail', 
            'Link.Title'
        ); 
    
        private static $default_sort = 'SortOrder ASC';
        private static $singular_name = 'Slide';
        private static $plural_name = 'Slides';
    
        public function getCMSFields() {
    
            $image = UploadField::create('Image', 'Image');
            $image->setFolderName('slides');
    
            $fields = FieldList::create(
                TextField::create('Title'), 
                $image, 
                TreeDropdownField::create('LinkID', 'Link', 'SiteTree')
            );
            return $fields;
        }
    
    }
    

    HomePage.php

    class HomePage extends Page {
    
        private static $has_many = array(
            'Slides' => 'Slide'
        );
    
        public function getCMSFields() {
            $fields = parent::getCMSFields();  
    
            $slidesFieldConfig = GridFieldConfig_RecordEditor::create();
    
            // The following requires the SortableGridField module installed
            $slidesFieldConfig->addComponent(new GridFieldSortableRows('SortOrder'));
    
            $slidesField = GridField::create(
                'Slides',
                'Slide',
                $this->Slides(),
                $slidesFieldConfig
            );
    
            $fields->addFieldToTab('Root.Slides', $slidesField);
    
            return $fields;
        }
    
    }
    

    布局/HomePage.ss

    <% if $Slides %>
        <div class="slideshow">
            <% loop $Slides %>
                <% if $Link %>
                    <a class="slide" href="$Link.URL" title="Go to the $Link.Title.XML page">
                        <img src="$Image.URL" alt="$Title" />
                    </a>
                <% else %>
                    <div class="slide">
                        <img src="$Image.URL" alt="$Title" />
                    </div>
                <% end_if %>
            <% end_loop %>
        </div>
    <% end_if %>
    

    银条 2.4

    使用 DataObjectManager 和 Uploadify 模块:

    Slide.php

    class Slide extends DataObject {
    
        static $db = array(
            'Title' => 'Text'
        );
    
        static $has_one = array(
            'HomePage' => 'HomePage', 
            'SlideImage' => 'Image', 
            'Link' => 'SiteTree'
        );
        static $singular_name = 'Slide';
        static $plural_name = 'Slides';
    
        public function getCMSFields_forPopup()
        {
            return new FieldSet(
                new TextField('Title'),
                new SimpleTreeDropdownField('LinkID', 'Slide Link', 'SiteTree'),
                new ImageUploadField('SlideImage', 'Slide Image')
            );
        }
    
    }
    

    HomePage.php

    class HomePage extends Page {
    
        public static $has_many = array(
            'Slides' => 'Slide'
        );
    
        public function getCMSFields()
        {
            $fields = parent::getCMSFields();
    
            $slideManager = new ImageDataObjectManager(
                $this,
                'Slides',
                'Slide',
                'Image', 
                array(
                ),
                'getCMSFields_forPopup'
            );
            $fields->addFieldToTab('Root.Content.Slides', $slideManager);
    
            return $fields;
        }
    
    }
    

    布局/HomePage.ss

    <% if Slides %>
        <div class="slideshow">
            <% control Slides %>
                <% if Link %>
                    <a class="slide" href="$Link.URL" title="Go to the $Link.Title.XML page">
                        <img src="$Image.URL" alt="$Title" />
                    </a>
                <% else %>
                    <div class="slide">
                        <img src="$Image.URL" alt="$Title" />
                    </div>
                <% end_if %>
            <% end_control %>
        </div>
    <% end_if %>
    

    【讨论】:

    • 哇!感谢这个惊人的答案。希望我能接受它 100 次以上。谢谢!
    • 完美答案,非常适合将 SS 2.x 和 SS 3.x 示例放入答案中。谢谢!
    • @pinkp - 当我有时间时,我会尝试用 SS 4 答案更新这个答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 1970-01-01
    • 1970-01-01
    • 2016-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多