织梦投票系统如何用文章ID插入?

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

默认情况下,织梦的投票标签 {dede:vote} 是调用系统后台设置的一个“默认投票”,但我们可以通过修改其参数,让它指向与当前文章绑定的那个特定投票。

使用织梦投票系统插入文章id
(图片来源网络,侵删)

以下是详细的步骤和方法,从易到难,你可以根据自己的需求选择。


最直接的方法(在文章内容页调用)

这种方法适用于在文章内容页(article_article.htm)的末尾或开头,显示与该文章关联的投票。

前提条件:

  1. 后台已创建投票:在织梦后台,进入“核心” -> “投票管理”,创建一个或多个投票主题,记下你要关联的那个投票的主题ID(在列表中可以看到)。
  2. 文章已关联投票这是最关键的一步,织梦默认没有“文章-投票”的关联字段,我们需要手动为文章表(dede_archives)添加一个字段来存储关联的投票ID。

步骤 1: 为文章表添加一个字段来存储投票ID

  1. 登录你的网站数据库管理工具(如 phpMyAdmin)。

  2. 选择你的织梦数据库。

    使用织梦投票系统插入文章id
    (图片来源网络,侵删)
  3. 找到 dede_archives 表(如果你的表前缀不是 dede_,请相应修改)。

  4. 点击“结构”或“SQL”,执行以下SQL语句,为文章表添加一个名为 voteid 的字段,用于存储关联的投票ID:

    ALTER TABLE `dede_archives` ADD `voteid` INT(10) NOT NULL DEFAULT '0' COMMENT '关联的投票主题ID';
  5. 当你编辑或新增文章时,在“高级选项”里,你将看到一个名为“关联投票ID”的字段,在这里填入你想要关联的投票主题ID。

步骤 2: 修改文章内容页模板

  1. 进入织梦后台的“模板” -> “默认模板管理”。

  2. 找到并打开文章内容页模板文件,通常是 article_article.htm

  3. 在你希望显示投票的位置(例如文章内容的末尾),插入以下代码:

    {dede:vote voteid='[field:voteid /]' lineheight='22' tablewidth='100%' titletext='投票'}

    代码解释:

    • {dede:vote}: 这是织梦调用投票的标签。
    • voteid='[field:voteid /]': 这是核心参数,它告诉织梦,不要调用默认投票,而是调用 [field:voteid /] 这个值所指定的投票主题ID。[field:voteid /] 会自动获取当前文章的 voteid 字段值。
    • lineheight='22': 设置投票选项行高,用于样式调整。
    • tablewidth='100%': 设置投票表格的宽度。
    • titletext='投票': 投票模块的标题。
  4. 保存模板文件并更新网站缓存。

当你查看一篇在后台设置了“关联投票ID”的文章时,页面就会显示你指定的那个投票。


更灵活的方法(通过自定义函数)

如果你不想修改数据库结构,或者希望有更灵活的控制(例如通过文章自定义字段来关联),可以使用自定义函数的方法。

前提条件:

  1. 后台已创建投票:同方法一。
  2. 文章有自定义字段:我们使用织梦的自定义字段功能来关联投票ID。

步骤 1: 添加文章自定义字段

  1. 在织梦后台,进入“核心” -> “内容模型管理” -> “普通文章” -> “更改”(或选择你使用的模型)。
  2. 在“字段管理”选项卡中,点击“添加新字段”。
  3. 设置字段:
    • 字段名称: voteid (必须与下面代码中的变量名一致)
    • 字段类型: 单行文本
    • 字段提示: 关联投票ID
    • 前台调用: 勾选
    • 其他选项保持默认即可。
  4. 保存后,去编辑一篇文章,你会在“常规选项”或“高级选项”中看到新添加的“关联投票ID”输入框,在这里填入投票的主题ID。

步骤 2: 创建自定义函数文件

  1. 在你的网站根目录下,找到 /include/extend.func.php 文件,如果这个文件不存在,请自己创建一个。

  2. 在这个文件中,添加以下PHP函数:

    /**
     * 根据文章ID获取关联的投票主题ID,并返回投票代码
     * @param int $aid 文章ID
     * @return string 投票的HTML代码
     */
    function getArticleVote($aid)
    {
        global $dsql;
        $voteid = 0;
        // 从附加表的自定义字段中获取voteid
        // 注意:这里假设你的自定义字段在 `dede_addonarticle` 表中,并且字段名为 `voteid`
        // 如果你的模型不同,表名可能需要修改,`dede_addon17` 等
        $query = "SELECT voteid FROM `dede_addonarticle` WHERE aid = $aid";
        $row = $dsql->GetOne($query);
        if (is_array($row)) {
            $voteid = $row['voteid'];
        }
        // 如果找到了voteid,则生成投票代码
        if ($voteid > 0) {
            // 调用投票系统,生成HTML
            // 注意:这里的路径可能需要根据你的织梦版本调整
            require_once(DEDEINC.'/vote.class.php');
            $vote = new Vote();
            $voteHTML = $vote->GetVoteCode($voteid);
            return $voteHTML;
        }
        return ''; // 如果没有关联投票,则返回空
    }

    代码解释:

    • 这个函数接收一个文章ID ($aid)。
    • 它从文章的附加表中查询我们刚刚创建的自定义字段 voteid 的值。
    • 如果找到了值,就使用织梦自带的 vote.class.php 来生成该投票的完整HTML代码。
    • 如果没找到,就返回空。

步骤 3: 在模板中调用自定义函数

  1. 同样,打开 article_article.htm 模板文件。

  2. 在需要显示投票的位置,插入以下代码:

    {dede:field.id function="getArticleVote(@me)"/}

    代码解释:

    • {dede:field.id}: 获取当前文章的ID。
    • function="getArticleVote(@me)": 调用我们在 extend.func.php 中定义的 getArticleVote 函数,并将文章ID (@me) 作为参数传递给它。
  3. 保存模板文件并更新缓存。

这种方法的好处是,它不修改核心数据表,更符合织梦的扩展机制,也更灵活。


总结与对比

方法 优点 缺点 适用场景
方法一 (直接修改数据库) 实现简单,调用代码直观,性能较好(直接调用字段)。 需要直接操作数据库,修改了 dede_archives 表结构。 对于已经确定要为所有文章都增加此功能,且不介意修改数据库结构的情况。
方法二 (自定义函数) 不修改数据库结构,使用织梦原生自定义字段功能,更灵活、更规范。 代码稍复杂,需要创建函数文件,对PHP有一定要求。 推荐使用,特别是当你只想在部分文章中显示投票,或者希望遵循织梦最佳实践时。

建议:对于大多数用户,强烈推荐使用方法二,因为它更安全、更灵活,且符合织梦的设计哲学。

-- 展开阅读全文 --
头像
C语言setproctitle如何修改进程标题?
« 上一篇 2025-12-20
如何去除手机端织梦网站自动跳转app?
下一篇 » 2025-12-20

相关文章

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

目录[+]