youtube - 银条。在内容区域嵌入 2 个 YouTube 视频会在两个视频中显示相同的视频

标签 youtube silverstripe oembed

我在 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/

相关文章:

Android Youtube API JSON-C 使用 GSON 解析

Silverstripe 3 - 将 css 类添加到 CMS 表单字段

hidden - SilverStripe 循环遍历隐藏页面

php - 使用 DB::query 处理 Silverstripe 中的 MySQL 错误

android - 如何使用Android Youtube播放器播放特定网址?

security - YouTube API v3 - 我真的需要使用 OAuth 进行基本的读取操作吗?

youtube - 检索YouTube迪斯科播放列表

youtube - YouTube是否支持oEmbed?

javascript - 在网站中包含 Vimeo 而不允许广告 cookie

php - 将 url 查询参数与 Controller 一起使用