SilverStripe不显示图像

时间:2019-05-16 19:32:10

标签: php silverstripe silverstripe-4

我正在通过开发一个简单的项目来学习SilverStripe。现在,我无法在模板文件中显示图像。

这是我的BlogPage.php

<?php

namespace {

    use SilverStripe\AssetAdmin\Forms\UploadField;
    use SilverStripe\Assets\Image;

    class BlogPage extends Page
    {
        private static $can_be_root = false;

        private static $has_one = [
            'Banner' => Image::class,
        ];

        public function getCMSFields()
        {
            $fields = parent::getCMSFields();
            $fields->addFieldToTab('Root.Attachments', $banner = UploadField::create('Banner'));
            $banner->setFolderName('banners');

            return $fields;
        }
    }
}

我可以在管理面板中上传横幅图像。我试图像这样在BlogPage.ss中显示图像。

<% with $Banner.ScaleWidth(750) %>
    <img class="my-custom-class" src="$URL" alt="" width="$Width" height="$Height" />
<% end_with %>

但是它什么也没显示。当我在控制台中检查URL时,它是(未知)。怎么了?如何显示图像?

编辑

我根据下面罗比的答案编辑了问题。

这是我的BlogPage.php

<?php

namespace {

    use SilverStripe\AssetAdmin\Forms\UploadField;
    use SilverStripe\Assets\Image;

    class BlogPage extends Page
    {
        private static $can_be_root = false;

        private static $has_one = [
            'Banner' => Image::class,
        ];

        private static $owns = [
            'Banner',
        ];

        public function getCMSFields()
        {
            $fields = parent::getCMSFields();
            $fields->addFieldToTab('Root.Attachments', $banner = UploadField::create('Banner'));
            $banner->setFolderName('banners');

            return $fields;
        }
    }
}

这是我的BlogPage.ss

<% with $Banner %>
    <img class="my-custom-class" src="$URL" alt="" width="$Width" height="$Height" />
<% end_with %>

<h3>$Title</h3>

$Content

1 个答案:

答案 0 :(得分:0)

ScaleWidth()方法实际上将为您返回完整的图像标签,因此您无需指定宽度,高度等。您可以这样做:

$Banner.ScaleWidth(750)

如果要自己渲染图像,则可以删除.ScaleWidth()部分。 with结构将范围从当前范围(可能是页面)更改为模型或控制器中的$BannerBanner()返回的getBanner()关系或模型,因此其中的变量调用在横幅的范围内。

<% with $Banner %>
    <img class="my-custom-class" src="$URL" alt="" width="$Width" height="$Height" />
<% end_with %>

此外,请注意,文件和图像在SilverStripe 4中默认为版本。这意味着,当您发布页面时,附加到该页面的图像将不会自动发布,也不会显示在前端。 。您可以告诉SilverStripe您的页面“拥有”您上传的图像,它将随页面自动发布:

// On your page:
private static $owns = ['Banner'];