首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SilverStripe未显示图像

SilverStripe未显示图像
EN

Stack Overflow用户
提问于 2019-05-17 03:32:10
回答 1查看 423关注 0票数 1

我正在通过开发一个简单的项目来学习SilverStripe。现在,我在显示模板文件中的图像时遇到了问题。

这是我的BlogPage.php

代码语言:javascript
运行
复制
<?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中显示图像。

代码语言:javascript
运行
复制
<% with $Banner.ScaleWidth(750) %>
    <img class="my-custom-class" src="$URL" alt="" width="$Width" height="$Height" />
<% end_with %>

但是它没有显示任何内容。当我在控制台中检查URL时,它是(未知的)。怎么啦?如何显示图像?

编辑

我根据Robbie的回答编辑了下面的问题。

这是我的BlogPage.php

代码语言:javascript
运行
复制
<?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

代码语言:javascript
运行
复制
<% with $Banner %>
    <img class="my-custom-class" src="$URL" alt="" width="$Width" height="$Height" />
<% end_with %>

<h3>$Title</h3>

$Content
EN

回答 1

Stack Overflow用户

发布于 2019-05-17 06:14:13

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

代码语言:javascript
运行
复制
$Banner.ScaleWidth(750)

如果要自己呈现图像,可以删除.ScaleWidth()部件。with结构将作用域从当前作用域(假设是一个页面)更改为由模型或控制器中的Banner()getBanner()返回的$Banner关系或模型,因此其中的变量调用在通栏的作用域内。

代码语言:javascript
运行
复制
<% with $Banner %>
    <img class="my-custom-class" src="$URL" alt="" width="$Width" height="$Height" />
<% end_with %>

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

代码语言:javascript
运行
复制
// On your page:
private static $owns = ['Banner'];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56175451

复制
相关文章

相似问题

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