织梦调用电影播放地址

99ANYc3cd6
预计阅读时长 16 分钟
位置: 首页 织梦建站 正文

核心思路

无论使用哪种方法,核心思路都是一致的:

织梦调用电影播放地址
(图片来源网络,侵删)
  1. 确定数据来源:播放地址存在哪个表、哪个字段里?(dede_addonmovie 表的 playurl 字段)。
  2. 获取当前文章ID:织梦模板中,用 {dede:field.id/} 可以获取到当前文章的ID。
  3. 关联查询:使用织梦的标签,通过文章ID去附加表中查询对应的播放地址数据。
  4. 解析并输出:播放地址通常是多集的,用 或其他符号分隔,需要将其拆分成一个列表,并进行循环输出。

使用 {dede:field} 标签直接调用(最简单)

如果你的播放地址直接存储在主表(dede_archives)的自定义字段中,或者你只想简单地调用一个字符串,这是最快的方法。

适用场景

  • 播放地址只有一集(单集视频)。
  • 播放地址是固定的,不需要解析多集。

步骤

  1. 在后台添加自定义字段,字段名为 playurl,类型选择“文本area”。
  2. 在发布或编辑电影时,在 playurl 字段中填入播放地址, http://xxx.com/1.mp4|http://xxx.com/2.mp4|http://xxx.com/3.mp4
  3. 在模板文件(通常是 article_article.htm)中,直接调用:
<div class="play-box">
    <h3>播放地址</h3>
    <!-- 直接输出整个字符串 -->
    <p>{dede:field.playurl/}</p>
</div>

缺点:这种方法输出的是一个长字符串,用户体验很差,无法选择集数。

织梦调用电影播放地址
(图片来源网络,侵删)

使用 {dede:arclist}{dede:list} 结合附加表(推荐)

这是最标准、最推荐的方法,尤其适用于将播放地址存储在附加表中的情况。

适用场景

  • 播放地址存储在附加表(如 dede_addonmovie)。
  • 需要将播放地址解析成列表,方便用户点击播放。

步骤

确认附加表和字段

假设你的电影模型使用了 dede_addonmovie 作为附加表,并且你添加了一个名为 playurl 的文本字段来存储播放地址。

织梦调用电影播放地址
(图片来源网络,侵删)

编写模板代码页模板(article_article.htm)中,使用 {dede:field}function 属性来调用一个自定义的PHP函数,这是最灵活强大的方式。

方案A:使用 array_sliceimplode (推荐)

这种方法通过PHP代码将播放地址字符串拆分成数组,然后循环输出。

<!-- 在 article_article.htm 中 -->
<div class="play-box">
    <h3>选择播放集数</h3>
    <ul class="play-list">
        {dede:field name='id' function="GetPlayUrl(@me)" /}
    </ul>
</div>

关键步骤:创建自定义函数 GetPlayUrl

  1. 打开织梦根目录下的 /include/common.func.php 文件。
  2. 在文件末尾 ?> 之前,添加以下PHP函数代码:
/**
 * 解析播放地址并生成HTML列表
 * @param int $aid 文章ID
 * @return string 播放列表的HTML代码
 */
function GetPlayUrl($aid) {
    // 1. 获取附加表名和播放地址
    // 假设你的模型ID是1,附加表是 dede_addonmovie
    // 你需要根据你的实际情况修改 $addon 和 $field
    $addon = 'dede_addonmovie'; 
    $field = 'playurl';
    // 查询附加表数据
    $row = $GLOBALS['dsql']->GetOne("SELECT `$field` FROM `$addon` WHERE aid='$aid'");
    if (is_array($row)) {
        $playUrls = explode('|', $row[$field]);
        // 如果没有地址,返回空
        if (empty($playUrls)) {
            return '';
        }
        // 生成列表HTML
        $html = '';
        $i = 1;
        foreach ($playUrls as $url) {
            $url = trim($url);
            if (!empty($url)) {
                $html .= "<li><a href='{$url}' target='_blank'>第{$i}集</a></li>";
                $i++;
            }
        }
        return $html;
    }
    return ''; // 如果没找到数据,返回空
}

代码解释

  • 这个函数接收文章ID ($aid)。
  • 它通过 DedeSQL ($GLOBALS['dsql']) 查询附加表 dede_addonmovie 中对应文章ID的 playurl 字段。
  • 使用 explode('|', ...) 将用 分隔的字符串拆分成一个数组。
  • 使用 foreach 循环数组,为每一个地址生成一个 <li>
  • 最后返回拼接好的HTML字符串。

方案B:使用织梦自带的 list 标签(稍显复杂)

如果你不想修改PHP文件,也可以在模板里嵌套使用 {dede:sql}{dede:list},但这种方法效率较低,代码也较臃肿,不推荐。


使用自定义模型 + 单独字段(最规范)

对于多集视频网站,最规范的做法不是用一个文本字段存所有地址,而是为每一集创建一个独立的字段。

适用场景

  • 视频集数固定(例如最多30集)。
  • 后台需要为每一集单独填写地址,更灵活。

步骤

  1. 在后台创建或修改自定义模型。
  2. 添加多个单行文本字段,playurl1, playurl2, playurl3, ... playurl30
  3. 在模板中直接调用:
<div class="play-box">
    <h3>播放地址</h3>
    <ul>
        {dede:field.playurl1 runphp='yes'}
        if(@me != '') @me = "<li><a href='{@me}' target='_blank'>第1集</a></li>";
        else @me = '';
        {/dede:field}
        {dede:field.playurl2 runphp='yes'}
        if(@me != '') @me = "<li><a href='{@me}' target='_blank'>第2集</a></li>";
        else @me = '';
        {/dede:field}
        <!-- ... 可以继续添加更多集数 ... -->
    </ul>
</div>

缺点:如果集数很多,模板会变得非常冗长,维护困难。此方法仅适用于集数非常少的情况。


总结与最佳实践

方法 优点 缺点 推荐度
直接调用 极其简单,无需修改代码 无法解析多集,用户体验差 ⭐ (仅用于单集或测试)
附加表+PHP函数 灵活、强大、性能好、代码整洁 需要修改PHP文件,对新手稍有门槛 ⭐⭐⭐⭐⭐ (强烈推荐)
独立字段 数据结构清晰,后台管理直观 模板代码冗长,扩展性差 ⭐⭐ (仅适用于集数固定的少数场景)

最终建议

对于绝大多数织梦电影网站,请使用 方法二,它兼顾了灵活性、性能和代码的可维护性,只需要在 /include/common.func.php 中添加一次 GetPlayUrl 函数,之后所有内容页都可以通过 {dede:field name='id' function='GetPlayUrl(@me)'/} 来优雅地调用播放列表。

额外提示

  • 安全性:在输出播放地址时,确保地址是可信的,如果地址来自用户输入,最好进行一些过滤,防止XSS攻击。
  • 播放器:调用到地址后,你需要使用一个视频播放器(如 DPlayer、JW Player、CKPlayer等)来播放这些地址,通常做法是,点击列表中的“第X集”时,通过JavaScript改变播放器的 src 属性,这需要前端和后端的配合。
-- 展开阅读全文 --
头像
织梦友情链接模板修改
« 上一篇 今天
织梦建站系统好用吗?优缺点有哪些?
下一篇 » 今天

相关文章

取消
微信二维码
支付宝二维码