我在 Silverstripe (3.1) 中为客户开发了一个网站。今天,他尝试将第二个 YouTube 视频嵌入到 CMS 的内容区域中(插入媒体>来自网络>粘贴 YouTube URL >添加 URL >插入)。
在 CMS 的所见即所得中,视频的缩略图正确显示,但在前端的模板中,第一个视频在第二个视频的 iFrame 中重复。
我尝试过更改这些内容,删除两个视频并自己再次添加它们,以消除一些奇怪的用户错误,但我每次都可以复制此操作。第一个视频始终克隆到第二个视频的 iFrame 中。
我还尝试过直接使用 YouTube 上的嵌入代码嵌入视频,但效果相同。
检查 iFrame,第二个视频的 src 与第一个视频的 src 相同,因此我认为这与嵌入替换模板途中文本的方式有关。
有办法解决这个问题吗?
最佳答案
我不知道您是否想走这条路,但我有多个包含多个 YouTube 视频的页面,它们使用了扩展 DataObject 的 YouTubeWidget。它作为 $has_many 添加到页面类中。看到这个要点-
https://gist.github.com/cmcramer/60b7ff41017b4a633894
(修订版)根据 @wmk 请求添加的要点中的代码片段
class YouTubeEmbed extends DataObject {
private static $db = array(
'YouTubeTitle' => 'Varchar(255)',
'YouTubeId' => 'Varchar(100)',
);
private static $has_one = array(
'PageWithVideo' => 'Page',
);
private static $summary_fields = array(
'YouTubeTitle' => 'YouTube Video',
);
private static $default_sort = array(
'YouTubeTitle',
);
private static $display_fields = array(
'Title' => 'YouTube Video',
'YouTubeId' => 'Video ID',
);
public function WatchOnYouTubeUrl() {
$strUrl = "https://www.youtube.com/watch?v={$this->YouTubeId}";
return $strUrl;
}
public function VideoIframe() {
$strHtml = '<iframe width="' .
$this->Width . '"
height="' .
$this->Height . '"
src="https://www.youtube.com/embed/'.
$this->YouTubeId . '
?rel=0&autoplay=1&showinfo=0"
frameborder="0"></iframe>'
return $strHtml;
}
}
class VideoPage extends Page {
...
private static $has_many = array(
'Webcams' => 'YouTubeEmbed',
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$fields->addFieldsToTab('Root.Webcams', GridField::create(
'Webcams',
'Webcams',
$this->Webcams(),
GridFieldConfig_RecordEditor::create()
));
return $fields;
}
}
/* In the template */
<div id="webcams">
<% loop $Webcams %>
<span class="webcam-block">
$VideoIframe
<p>$YouTubeTitle</p>
</span><!-- .webcam-block -->
<% end_loop %>
</div>
关于youtube - 银条。在内容区域嵌入 2 个 YouTube 视频会在两个视频中显示相同的视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34276400/