我正在通过开发一个简单的项目来学习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
答案 0 :(得分: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'];