下面我将从文件结构、模板文件详解、修改步骤、常见问题四个方面,为你提供一个全面的ECSHOP留言板模板指南。

ecshop留言板模板
(图片来源网络,侵删)

文件结构

要修改留言板模板,你首先需要知道相关的文件存放在哪里,ECSHOP的模板文件位于 themes/ 目录下。

假设你使用的是默认模板 default,那么与留言板相关的核心文件路径如下:

  1. 留言板页面主文件

    • themes/default/guestbook.dwt
    • 这是用户访问留言板页面时加载的主模板文件,定义了整个页面的HTML结构,包括头部、留言列表、留言表单和底部。
  2. 留言列表项模板文件

    ecshop留言板模板
    (图片来源网络,侵删)
    • themes/default/library/guestbook_list.lbi
    • 这是一个Library Item (库项目)文件,它定义了单条留言的显示样式。guestbook.dwt 文件会循环调用这个 lbi 文件来显示所有的留言。
  3. 留言表单模板文件

    • themes/default/library/guestbook_form.lbi
    • 这是另一个库项目文件,定义了用户提交留言的表单,包括用户名、留言内容等输入框。
  4. 语言包文件

    • themes/default/lang/guestbook.php
    • 存储了留言板页面中所有的文本内容,如“发表留言”、“留言内容”、“提交”等,修改这里的文字可以改变页面上的显示文本。
  5. CSS 样式文件

    • themes/default/style.cssthemes/default/images/style.css (根据版本不同)
    • 留言板的样式(颜色、字体、边距、布局等)通常定义在这里,你可以通过修改这个文件来美化留言板。
  6. PHP 逻辑文件 (通常不需要修改模板,但需了解):

    • guestbook.php: 控制留言板页面的核心PHP文件,负责获取留言数据、处理用户提交等逻辑。
    • lib_main.php: 包含了页面初始化等公共函数。

总结一下:你主要需要编辑的是 .dwt.lbi 文件来改变布局和内容,编辑 .css 文件来改变样式,编辑 .php 语言包文件来改变文字。


模板文件详解

guestbook.dwt (主页面模板)

这个文件的结构和大多数ECSHOP页面类似,大致分为:

<!DOCTYPE html>
<html>
<head>
    <!-- 引入头部文件 common/header.dwt -->
    {include file="header.dwt"}
</head>
<body>
    <!-- 主体内容开始 -->
    <div class="main">
        <!-- 位置导航 -->
        <div class="path">当前位置: <a href="index.php">首页</a> > <a href="guestbook.php">留言板</a></div>
        <!-- 留言列表区域 -->
        <div class="guestbook-list">
            <!-- 这里会循环调用 guestbook_list.lbi -->
            {foreach $guestbook_list as $gb}
                {include file="library/guestbook_list.lbi" gb=$gb}
            {/foreach}
        </div>
        <!-- 分页 -->
        <div class="pagination">{$pager}</div>
        <!-- 留言表单区域 -->
        <div class="guestbook-form">
            <!-- 这里会调用 guestbook_form.lbi -->
            {include file="library/guestbook_form.lbi"}
        </div>
    </div>
    <!-- 引入底部文件 common/footer.dwt -->
    {include file="footer.dwt"}
</body>
</html>
  • {foreach $guestbook_list as gb}: 这是一个循环,它会从PHP变量 $guestbook_list 中取出每一条留言数据。
  • {include file="library/guestbook_list.lbi" gb=$gb}: 在循环中,包含 guestbook_list.lbi 文件,并把当前循环到的留言数据 $gb 传递给它。

guestbook_list.lbi (单条留言模板)

这个文件定义了每一条留言长什么样,你可以在这里添加、删除或修改HTML元素。

<!-- 一条留言的容器 -->
<div class="guestbook-item">
    <!-- 用户头像和基本信息 -->
    <div class="user-info">
        <!-- 如果用户登录,显示用户名和头像 -->
        {if $gb.user_id > 0}
            <img src="{$gb.user_portrait}" alt="{$gb.user_name}" class="user-avatar" />
            <span class="user-name">{$gb.user_name}</span>
        {else}
            <!-- 如果是匿名用户,显示匿名信息 -->
            <img src="images/default_avatar.png" alt="匿名用户" class="user-avatar" />
            <span class="user-name">匿名用户</span>
        {/if}
        <span class="post-time">{$gb.add_time|date:'Y-m-d H:i:s'}</span>
    </div>
    <!-- 留言内容 -->
    <div class="message-content">
        <!-- 使用 {$gb.content} 直接输出内容,没有转义,有XSS风险 -->
        <!-- 安全做法是:{$gb.content|escape} -->
        {$gb.content}
    </div>
    <!-- 管理员回复 -->
    {if $gb.reply_content}
        <div class="admin-reply">
            <strong>管理员回复:</strong>
            <p>{$gb.reply_content}</p>
        </div>
    {/if}
</div>
  • $gb.add_time: 留言时间,可以使用 date 修饰符来格式化,如 {$gb.add_time|date:'Y-m-d H:i:s'}
  • $gb.content: 留言内容。
  • $gb.reply_content: 管理员的回复内容。
  • $gb.user_name: 留言用户名。
  • $gb.user_portrait: 用户头像URL。

guestbook_form.lbi (留言表单模板)

这个文件定义了用户填写留言的表单。

<div class="form-title">发表留言</div>
<form action="guestbook.php?act=insert" method="post" name="guestbookForm" onsubmit="return check_guestbook()">
    <ul class="form-list">
        <li>
            <label for="msg_content">留言内容:</label>
            <textarea id="msg_content" name="msg_content" rows="5" cols="50"></textarea>
            <span class="error_msg">{$error_msg}</span> <!-- 用于显示错误信息 -->
        </li>
        {if $smarty.session.user_id <= 0}
            <!-- 如果用户未登录,显示姓名和邮箱输入框 -->
            <li>
                <label for="user_name">您的姓名:</label>
                <input type="text" id="user_name" name="user_name" value="{$smarty.post.user_name}" />
            </li>
            <li>
                <label for="email">您的邮箱:</label>
                <input type="text" id="email" name="email" value="{$smarty.post.email}" />
            </li>
        {/if}
        <li>
            <label>&nbsp;</label>
            <input type="submit" name="submit" value="提交" class="btn" />
        </li>
    </ul>
</form>
  • action="guestbook.php?act=insert": 表单提交的地址和操作。
  • name="guestbookForm": 表单的名称,用于JavaScript验证。
  • onsubmit="return check_guestbook()": 提交时调用JavaScript函数进行前端验证。
  • {$smarty.session.user_id}: 判断用户是否登录,如果未登录则显示姓名和邮箱输入框。

如何修改留言板模板 (实战步骤)

假设你想修改留言板的标题文字和样式

步骤 1:修改页面标题和文字

  1. 打开 themes/default/lang/guestbook.php 文件。

  2. 找到 _LANG['guestbook_title'] 这一行,修改它的值。

    // 修改前
    $_LANG['guestbook_title'] = '留言板';
    // 修改后
    $_LANG['guestbook_title'] = '客户留言簿';
  3. 保存文件,现在刷新留言板页面,你会发现页面标题已经改变了。

步骤 2:修改留言列表样式

  1. 打开 themes/default/library/guestbook_list.lbi 文件。

  2. 修改单条留言的HTML结构,你想给每条留言加一个背景色和边距:

    <!-- 修改前 -->
    <div class="guestbook-item">
    <!-- 修改后 -->
    <div class="guestbook-item" style="background-color: #f9f9f9; border: 1px solid #e0e0e0; padding: 10px; margin-bottom: 15px; border-radius: 5px;">
  3. 或者,你更推荐使用CSS类,而不是内联样式,这样更规范,那么就在 guestbook_list.lbi 中给 div 添加一个类名,class="my-gb-item"

    <div class="my-gb-item">
        <!-- ... 内容 ... -->
    </div>
  4. 打开 themes/default/style.css 文件,在末尾添加你的CSS样式:

    /* 自定义留言板样式 */
    .my-gb-item {
        background-color: #f9f9f9;
        border: 1px solid #e0e0e0;
        padding: 15px;
        margin-bottom: 20px;
        border-radius: 8px;
        box-shadow: 0 2px 4px rgba(0,0,0,0.05);
    }
    .my-gb-item .user-info {
        display: flex;
        align-items: center;
        margin-bottom: 10px;
    }
    .my-gb-item .user-avatar {
        width: 40px;
        height: 40px;
        border-radius: 50%;
        margin-right: 10px;
    }
    .my-gb-item .post-time {
        color: #888;
        font-size: 12px;
        margin-left: auto;
    }
  5. 保存两个文件,刷新页面,你会看到留言列表的样式已经改变。


常见问题与解决方案

问题 1:留言内容无法保存或显示乱码。

  • 原因:通常是数据库编码和页面编码不一致导致的,ECSHOP默认使用 gbk 编码。
  • 解决方案
    1. 确保你的数据库、数据表、字段(如 ecs_guestbook 表的 content 字段)都是 gbk 编码。
    2. 确保你的PHP文件(guestbook.php等)保存为 ANSIGBK 编码,而不是 UTF-8
    3. 如果想使用 UTF-8,需要将整个系统(数据库、文件、页面头部 <meta charset="...">)统一为 UTF-8,这通常比较麻烦,不推荐新手轻易尝试。

问题 2:如何让留言板支持图片或富文本?

  • 原因:默认的留言内容是一个 textarea,只能输入纯文本,ECSHOP默认没有集成富文本编辑器。
  • 解决方案
    1. 集成富文本编辑器:最常用的方法是集成一个第三方的富文本编辑器,如 KindEditorCKEditor
    2. 修改步骤
      • 下载并解压富文本编辑器到你的 js 目录(如 js/kindeditor/)。
      • 修改 guestbook_form.lbi 文件,将原来的 <textarea> 替换为编辑器初始化的代码,通常需要引入编辑器的JS文件,然后调用一个初始化函数。
      • 修改 guestbook.php 中的 insert 动作,确保能正确处理和保存HTML内容(注意防范XSS攻击,通常需要对用户输入进行过滤)。
      • 修改 guestbook_list.lbi 文件,在显示留言内容时,确保能正确渲染HTML标签(即不要使用 {$gb.content|escape},直接使用 {$gb.content})。

问题 3:如何修改留言板分页的样式?

  • 原因:分页的样式由 {$pager} 变量生成,这个变量在 lib_main.php 中定义。
  • 解决方案
    • 简单修改:直接编辑 lib_main.php 文件,找到 get_pager 函数,修改其中的HTML结构来改变分页的样式。
    • 推荐方法:创建一个自定义的LBI文件(如 pager.lbi),然后在 guestbook.dwt 中用 {include file="library/pager.lbi"} 来替代 {$pager},这样你就可以完全控制分页的HTML和CSS,更灵活。

希望这份详细的指南能帮助你完全掌握ECSHOP留言板模板的修改!