【问题标题】:SilverStripe is not displaying imageSilverStripe 不显示图像
【发布时间】:2019-05-16 19:32:10
【问题描述】:

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

【问题讨论】:

    标签: php silverstripe silverstripe-4


    【解决方案1】:

    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'];
    

    【讨论】:

    • 您好,您需要更详细的描述才能让我进一步帮助您。可以肯定的是,我在一个新项目中测试了您的代码。确保您已发布您的图片(请参阅我的最后一条注释)。
    • 您在添加$owns API 后是否刷新了缓存,或者您是否发布了附加到您页面的图像?你的代码适合我
    • 如果您能提供更多信息会很好 - “它不起作用”并不是特别有用。您可以在模板中尝试$Banner.Debug 以查看对象的外观、是否具有 ID 等
    • 我在SS4中发现的是,如果你上传一张图片,然后发布你没有添加private static $owns = ['Banner'];代码,你更新代码,然后再次尝试保存图片,它不起作用。起作用的是上传另一张图片。
    • 嗨@GavinBruce。你说的对。上传新图像作品。有线。干杯人。
    猜你喜欢
    • 1970-01-01
    • 2019-12-13
    • 1970-01-01
    • 2012-07-05
    • 1970-01-01
    • 2017-09-30
    相关资源
    最近更新 更多