银色条纹.在内容区嵌入2个youtube视频,在两者中显示相同的视频



我在Silversstripe(3.1)中为一个客户开发了一个站点。今天,他试图将第二个youtube视频嵌入CMS的内容区域(从网络插入媒体>粘贴youtube URL>添加URL>插入)。

在CMS中的所见即所得中,视频的缩略图会正确显示,但在前端的模板中,第一个视频会在第二个视频的iFrame中重复。

我试着改变这些,删除两个视频,然后自己重新添加,以消除一些反常的用户错误,但我每次都可以复制。第一个视频始终克隆在第二个视频的iFrame中。

我也尝试过用YouTube上的嵌入代码直接嵌入视频,但也遇到了同样的问题。

检查iFrame,第二个视频的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>

相关内容

  • 没有找到相关文章

最新更新