dede field.body如何修改?

99ANYc3cd6
预计阅读时长 22 分钟
位置: 首页 DEDE建站 正文

field.body 是文章内容页(article_article.htm 模板)中用于显示文章正文的字段,修改它通常有以下几个目的:

dede field.body修改
(图片来源网络,侵删)
  1. 修改文章内容的显示样式(如字体、颜色、行间距、添加缩进等)。
  2. 前后自动添加特定内容(如版权声明、作者信息、相关文章链接等)。
  3. 过滤或修改文章内容中的特定元素(如移除某些标签、自动给图片添加链接等)。
  4. 调用文章内容中的图片

下面我将根据不同的修改需求,提供详细的解决方案和代码示例。


修改文章内容的显示样式(CSS 控制)

这是最常见的需求,我们通常不直接修改 field.body 的值,而是用一个 <div><p> 标签把它包裹起来,然后通过 CSS 来控制这个标签的样式。

方法:

  1. 打开你的文章内容页模板文件,路径通常是 /templets/你的默认模板风格/article_article.htm
  2. 找到 {dede:field.body/} 这一行。
  3. <div><p> 标签将其包裹,并赋予一个 class 名。

示例代码:

dede field.body修改
(图片来源网络,侵删)
{dede:field.body/}

修改为:

<div class="article-content">
    {dede:field.body/}
</div>
  1. 在你的 CSS 文件(通常是 /templets/你的默认模板风格/style.css)中,定义 .article-content 的样式。

CSS 示例 (style.css):

.article-content {
    font-family: "Microsoft YaHei", "微软雅黑", Arial, sans-serif; /* 设置字体 */
    font-size: 16px;                /* 设置字号 */
    line-height: 1.8;               /* 设置行高,让阅读更舒适 */
    color: #333;                    /* 设置文字颜色 */
    text-align: justify;            /* 两端对齐 */
    padding: 20px 0;                /* 上下内边距 */
}
中的图片样式 */
.article-content img {
    max-width: 100%;                /* 图片最大宽度为容器宽度,防止溢出 */
    height: auto;                   /* 高度自动,保持图片比例 */
    margin: 10px 0;                 /* 图片上下边距 */
    border-radius: 5px;             /* 图片圆角 */
}
中的段落样式 */
.article-content p {
    margin-bottom: 15px;            /* 段落下边距,增加段落间距 */
    text-indent: 2em;               /* 段落首行缩进2个字符 */
}

优点:

  • 内容与样式分离:符合现代网页开发的最佳实践。
  • 灵活可控:可以通过修改 CSS 轻松调整样式,无需改动模板文件。
  • :后台编辑的文章内容本身不会被修改。

前后自动添加内容

如果你想在所有文章的开头或结尾都加上一段固定的文字或代码,可以使用 str_replace 函数。

dede field.body修改
(图片来源网络,侵删)

方法:

  1. 同样,打开 article_article.htm 模板文件。
  2. 找到 {dede:field.body/}
  3. 使用 PHP 的 str_replace 函数进行替换。

示例代码:

假设我们想在文章开头加上“【本文由本站原创,转载请注明出处!】”,在文章结尾加上“【文章结束】”。

{dede:field.body function='str_replace("本文", "本文【本文由本站原创,转载请注明出处!】", @me)'/}

上面的写法有局限性,更推荐使用 preg_replace 或者在 {dede:field.body/} 外层包裹一个 <div>,然后通过修改这个 <div>innerHTML 来实现,但最简单直接的方法是:

<!-- 在文章开头添加内容 -->
{dede:field.body function='str_replace("<p>", "<p>【本文由本站原创,转载请注明出处!】", @me)'/}
<!-- 在文章结尾添加内容 -->
{dede:field.body function='str_replace("</p>", "</p><p>【文章结束】</p>", @me)'/}

更健壮的写法(推荐):

为了更精确地控制,可以创建一个自定义函数,然后在模板里调用。

  1. 创建自定义函数/include/extend.func.php 文件中(如果不存在则创建一个)添加以下代码:

    /**
     * 在文章内容前后添加自定义内容
     * @param string $body 文章内容
     * @return string 处理后的文章内容
     */
    function addContentAround($body) {
        $header = '<div class="article-copyright">本文由本站原创,转载请注明出处!</div>';
        $footer = '<div class="article-related">相关文章:<a href="#">文章1</a> | <a href="#">文章2</a></div>';
        // 确保body不为空
        if (empty($body)) {
            return $body;
        }
        return $header . $body . $footer;
    }
  2. 在模板中调用 修改 article_article.htm 文件:

    {dede:field.body function='addContentAround(@me)'/}

    然后在你的 CSS 文件中为 .article-copyright.article-related 添加样式即可。


过滤或修改文章内容中的特定元素

你希望文章中所有 <img> 标签都自动加上一个链接,或者移除某些特定的 HTML 标签。

方法:

同样,我们推荐在 /include/extend.func.php 中创建一个自定义处理函数。

示例 1:给所有图片添加外链

// 在 /include/extend.func.php 中添加
function addLinkToImages($body) {
    // 使用正则表达式,查找所有 <img> 标签,并在其外层包裹 <a href="#">...</a>
    // 注意:这里的 # 链接需要根据你的需求动态生成,例如跳转到第一张图片的大图页面
    $pattern = '/(<img\s+[^>]*>)/i';
    $replacement = '<a href="#" target="_blank">$1</a>';
    return preg_replace($pattern, $replacement, $body);
}

在模板中调用:

{dede:field.body function='addLinkToImages(@me)'/}

示例 2:移除文章中的 <script> 标签(安全考虑)

// 在 /include/extend.func.php 中添加
function removeScriptTags($body) {
    // 使用正则表达式移除所有 <script>...</script> 标签及其内容
    return preg_replace('/<script.*?>.*?<\/script>/is', '', $body);
}

在模板中调用:

{dede:field.body function='removeScriptTags(@me)'/}

调用文章内容中的第一张图片

这是一个非常实用的功能,常用于列表页摘要图或相关文章缩略图。

方法:

  1. 创建获取第一张图片的函数/include/extend.func.php 中添加以下代码:

    /**
     * 获取文章内容中的第一张图片路径
     * @param string $body 文章内容
     * @param string $defaultImg 如果没有图片,返回的默认图片路径
     * @return string 图片路径
     */
    function getFirstImgFromContent($body, $defaultImg = '/images/default.jpg') {
        if (empty($body)) {
            return $defaultImg;
        }
        // 匹配第一个img标签的src属性
        preg_match_all('/<img.*?src=[\"|\']?(.*?)[\"|\'|\s]/i', $body, $imgArray);
        $imgSrc = !empty($imgArray[1][0]) ? $imgArray[1][0] : $defaultImg;
        // 如果图片是相对路径,则补全为绝对路径
        if (strpos($imgSrc, 'http') !== 0 && strpos($imgSrc, '/') !== 0) {
            $imgSrc = '/' . $imgSrc;
        }
        return $imgSrc;
    }
  2. 在模板中调用 你可以在任何需要的地方调用这个函数,例如文章列表页(list_article.htm)。

    <!-- 在文章列表页循环中 -->
    {dede:list}
        <li>
            <!-- 调用函数,如果没有图片则使用 /images/noimg.jpg 作为默认图 -->
            <img src="{dede:field.body function='getFirstImgFromContent(@me, "/images/noimg.jpg")'/}" alt="{dede:field.title/}" />
            <a href="[field:arcurl/]">[field:title/]</a>
        </li>
    {/dede:list}

总结与注意事项

修改需求 推荐方法 优点 缺点
修改显示样式 <div class="xxx"> 包裹 field.body,用 CSS 控制 内容与样式分离,灵活,不影响源数据 需要懂 CSS
前后添加内容 extend.func.php 写函数,用 function 调用 逻辑清晰,可复用,功能强大 需要懂一点 PHP
过滤/修改内容 extend.func.php 写函数,用 function 调用 安全、可控,能实现复杂逻辑 需要懂 PHP 正则表达式
中的元素 extend.func.php 写函数,用 function 调用 功能强大,扩展性强 需要懂 PHP 正则表达式

重要提醒:

  1. 修改模板前备份:任何对模板文件的修改,都建议先备份原始文件。
  2. 修改 extend.func.php 后清空缓存:在 DedeCMS 后台 -> 系统 -> 一键更新缓存更新系统缓存,否则新添加的函数可能不会生效。
  3. 使用代码编辑器:请使用专业的代码编辑器(如 VS Code, Sublime Text, Notepad++)来修改 PHP 和 HTML 文件,避免使用记事本,以防格式错误。
  4. 安全性:在使用 preg_replace 等正则函数处理用户提交的内容时,要注意防范 XSS(跨站脚本)攻击,确保对输出内容进行适当的过滤。

希望这份详细的指南能帮助你成功修改 field.body

-- 展开阅读全文 --
头像
C语言中while循环break如何跳出多层循环?
« 上一篇 昨天
织梦dedecms如何获取会员信息?
下一篇 » 昨天
取消
微信二维码
支付宝二维码

目录[+]