我正在通过开发一个简单的项目来学习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时,它是(未知的)。怎么啦?如何显示图像?
编辑
我根据Robbie的回答编辑了下面的问题。
这是我的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发布于 2019-05-17 06:14:13
ScaleWidth()方法实际上将为您返回一个完整的图像标记,因此您不需要指定宽度、高度等。您可以这样做:
$Banner.ScaleWidth(750)如果要自己呈现图像,可以删除.ScaleWidth()部件。with结构将作用域从当前作用域(假设是一个页面)更改为由模型或控制器中的Banner()或getBanner()返回的$Banner关系或模型,因此其中的变量调用在通栏的作用域内。
<% 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'];https://stackoverflow.com/questions/56175451
复制相似问题