1

我正在通过开发一个简单的项目来学习 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
4

1 回答 1

0

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

$Banner.ScaleWidth(750)

如果您想自己渲染图像,您可以删除该.ScaleWidth()部分。该with结构将范围从当前范围(可能是页面)更改为由模型或控制器返回或在模型或控制器中$Banner返回的关系或模型,因此其中的变量调用在横幅的范围内。Banner()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'];
于 2019-05-16T22:14:12.627 回答