菜鸟科技网

织梦如何调用浏览记录?

在织梦CMS(DedeCMS)中调用浏览记录功能,可以帮助用户快速浏览近期访问过的内容,提升用户体验,这一功能通常结合Cookie或Session技术实现,记录用户浏览过的文章ID,并在前端页面动态展示,以下是详细的实现步骤和代码示例,涵盖从数据库设计到前端展示的全流程。

织梦如何调用浏览记录?-图1
(图片来源网络,侵删)

浏览记录功能的实现原理

浏览记录的核心逻辑是通过Cookie存储用户最近浏览的文章ID,然后在页面中读取这些ID,查询对应的文章信息并展示,具体步骤包括:

  1. 存储浏览记录:当用户访问文章详情页时,将文章ID存入Cookie(限制数量,如只保留最近10条)。
  2. 读取浏览记录:在需要展示浏览记录的页面(如首页、列表页),从Cookie中获取文章ID列表。
  3. 查询文章信息:根据文章ID列表查询数据库,获取标题、缩略图、发布时间等信息。
  4. 前端展示:将查询结果以列表或网格形式展示在页面中。

具体实现步骤

修改文章详情页(article_article.htm)

在文章详情页的模板文件中,添加以下PHP代码,用于将当前文章ID存入Cookie,建议在</head>标签前插入:

<?php
if(!empty($aid)){
    $cookie_name = 'dede_view_history';
    $cookie_value = isset($_COOKIE[$cookie_name]) ? explode(',', $_COOKIE[$cookie_name]) : array();
    // 避免重复添加
    if(($key = array_search($aid, $cookie_value)) !== false){
        unset($cookie_value[$key]);
    }
    // 将当前文章ID添加到数组开头
    array_unshift($cookie_value, $aid);
    // 限制存储数量为10条
    $cookie_value = array_slice($cookie_value, 0, 10);
    // 将数组转换为字符串存入Cookie,有效期30天
    setcookie($cookie_name, implode(',', $cookie_value), time() + 30*24*3600, '/');
}
?>

创建浏览记录调用标签

在织梦的后台“标签调用”中,可以自定义一个标签来获取浏览记录,以下是两种实现方式:

直接在模板中写PHP代码(适用于非静态化页面) 在需要展示浏览记录的位置插入以下代码:

织梦如何调用浏览记录?-图2
(图片来源网络,侵删)
<?php
$cookie_name = 'dede_view_history';
if(isset($_COOKIE[$cookie_name])){
    $ids = trim($_COOKIE[$cookie_name], ',');
    $dsql = new DedeSql(false);
    $sql = "SELECT * FROM dede_archives WHERE id IN ($ids) ORDER BY FIELD(id, $ids) LIMIT 10";
    $dsql->SetQuery($sql);
    $dsql->Execute();
    $list = '';
    while($row = $dsql->GetArray()){
        $list .= '<li><a href="/plus/view.php?aid='.$row['id'].'">'.$row['title'].'</a></li>';
    }
    echo $list;
}
?>

使用织梦的自定义标签(推荐)

  1. 在织梦后台“核心” → “标签调用管理”中,新建一个标签,命名为“浏览记录”。
  2. 标签代码如下:
    {dede:php}
    $cookie_name = 'dede_view_history';
    if(isset($_COOKIE[$cookie_name])){
     $ids = trim($_COOKIE[$cookie_name], ',');
     $dsql = new DedeSql(false);
     $sql = "SELECT * FROM dede_archives WHERE id IN ($ids) ORDER BY FIELD(id, $ids) LIMIT 10";
     $dsql->SetQuery($sql);
     $dsql->Execute();
     $result = array();
     while($row = $dsql->GetArray()){
         $result[] = $row;
     }
     $GLOBALS['view_history'] = $result;
    {/dede:php}
  3. 在模板中调用:
    <ul>
    {dede:loop table='dede_archives' sort='id' row='10'}
     <li><a href="[field:arcurl/]">[field:title/]</a></li>
    {/dede:loop}
    </ul>

前端展示优化

为了提升用户体验,可以将浏览记录设计为更美观的样式,使用表格展示:

<table border="1" cellpadding="5" cellspacing="0">
    <tr>
        <th>标题</th>
        <th>发布时间</th>
    </tr>
    <?php
    if(!empty($view_history)){
        foreach($view_history as $row){
            echo '<tr>';
            echo '<td><a href="/plus/view.php?aid='.$row['id'].'">'.$row['title'].'</a></td>';
            echo '<td>'.date('Y-m-d', $row['pubdate']).'</td>';
            echo '</tr>';
        }
    }else{
        echo '<tr><td colspan="2">暂无浏览记录</td></tr>';
    }
    ?>
</table>

注意事项

  1. Cookie安全性:建议对Cookie中的ID进行加密处理,防止篡改。
  2. 性能优化:如果浏览记录数量较多,建议使用缓存技术减少数据库查询。
  3. 静态化页面:如果网站使用静态化,可能需要通过AJAX动态加载浏览记录,因为Cookie在静态页面中无法直接读取。

相关问答FAQs

问题1:为什么浏览记录中的文章顺序不正确?
解答:浏览记录的顺序依赖于ORDER BY FIELD(id, $ids)语句,确保文章ID按Cookie中的顺序排列,如果顺序错乱,可能是Cookie中的ID格式问题(如包含空格或非数字字符),需在使用前对$ids进行过滤,$ids = preg_replace('/[^0-9,]/', '', $_COOKIE[$cookie_name]);

问题2:如何清除用户的浏览记录?
解答:可以通过设置Cookie过期时间来清除,在页面中添加以下代码:

织梦如何调用浏览记录?-图3
(图片来源网络,侵删)
<?php
setcookie('dede_view_history', '', time() - 3600, '/'); // 将过期时间设为过去时间
?>

或者通过JavaScript清除:

document.cookie = 'dede_view_history=; expires=Thu, 01 Jan 1970 00:00:00 UTC; path=/;';
分享:
扫描分享到社交APP
上一篇
下一篇