admin 发表于 2021-8-8 15:58:37

发帖添加作者水印 发帖添加作者水印pc+手机版v1.2(youyacao_watermark)

本插件是发帖打上自己的水印,本功能参考腾讯企鹅号,知乎和csdn,本功能有助于作者积极发帖,曾经发内容均是社区自身的水印如今可以设置为自己的水印,增强知识产权文字归属感,有利于站长运营社区所有作者们自行去分享和推广自己的帖子。

后台配置默认文字,效果即为 作者ID名@默认文字

例如:
优雅草
ID为 垂死挣扎的老八
那么得到
垂死挣扎的老八@优雅草

后台可以自定义配置字体,颜色(带颜色选择器),间距,角度,大小

字体可自己上传字体至youyacao_watermark\template\font 目录

Discuz智能体 发表于 2025-3-17 13:35:48

要实现发帖时自动添加作者水印的功能,可以参考以下步骤进行开发和配置。这个功能的核心是在用户发帖时,自动在帖子内容中添加一个水印,水印的内容可以是作者ID和自定义的文字组合。

### 1. 插件目录结构
首先,确保插件的目录结构如下:

youyacao_watermark/
├── template/
│   ├── font/// 存放自定义字体文件
│   └── watermark.tpl// 水印模板文件
├── youyacao_watermark.class.php// 插件主类文件
└── youyacao_watermark.inc.php// 插件配置文件

### 2. 后台配置
在后台配置中,站长可以设置默认的文字、字体、颜色、间距、角度和大小等参数。这些配置可以通过插件的配置文件 `youyacao_watermark.inc.php` 来实现。

// youyacao_watermark.inc.php
$config = array(
    'default_text' => '优雅草',// 默认文字
    'font_color' => '#000000',// 字体颜色
    'font_size' => 20,// 字体大小
    'font_angle' => 0,// 字体角度
    'font_spacing' => 10,// 字体间距
    'font_file' => 'arial.ttf'// 默认字体文件
);

### 3. 水印生成逻辑
在用户发帖时,插件会自动生成水印并将其添加到帖子内容中。可以在 `youyacao_watermark.class.php` 中实现这个逻辑。

// youyacao_watermark.class.php
class plugin_youyacao_watermark {

    function post_submit_end($param) {
      global $_G;

      // 获取作者ID和用户名
      $author_id = $_G['uid'];
      $author_name = $_G['username'];

      // 获取后台配置
      $config = include 'youyacao_watermark.inc.php';

      // 生成水印文字
      $watermark_text = $author_name . '@' . $config['default_text'];

      // 生成水印图片
      $font_file = 'template/font/' . $config['font_file'];
      $font_size = $config['font_size'];
      $font_color = $config['font_color'];
      $font_angle = $config['font_angle'];
      $font_spacing = $config['font_spacing'];

      // 使用GD库生成水印图片
      $image = imagecreatetruecolor(200, 50);
      $background_color = imagecolorallocate($image, 255, 255, 255);
      $text_color = imagecolorallocate($image, hexdec(substr($font_color, 1, 2)), hexdec(substr($font_color, 3, 2)), hexdec(substr($font_color, 5, 2)));
      imagefilledrectangle($image, 0, 0, 199, 49, $background_color);
      imagettftext($image, $font_size, $font_angle, 10, 35, $text_color, $font_file, $watermark_text);

      // 保存水印图片
      $watermark_image_path = 'data/attachment/watermark/' . $author_id . '_watermark.png';
      imagepng($image, $watermark_image_path);
      imagedestroy($image);

      // 将水印图片添加到帖子内容中
      $param['message'] .= '<img src="' . $watermark_image_path . '" alt="水印" />';

      return $param;
    }
}

### 4. 模板文件
在 `template/watermark.tpl` 中,可以定义水印的显示样式。

<!-- template/watermark.tpl -->
<div class="watermark">
    <img src="{watermark_image_path}" alt="水印" />
</div>

### 5. 插件安装与卸载
在插件的安装和卸载过程中,需要创建和删除相关的目录和文件。

// youyacao_watermark.class.php
function install() {
    // 创建水印图片存放目录
    if (!is_dir('data/attachment/watermark')) {
      mkdir('data/attachment/watermark', 0777, true);
    }
}

function uninstall() {
    // 删除水印图片存放目录
    if (is_dir('data/attachment/watermark')) {
      rmdir('data/attachment/watermark');
    }
}

### 6. 插件启用与禁用
在插件启用和禁用时,可以添加一些额外的逻辑,比如清理缓存或更新数据库。

// youyacao_watermark.class.php
function enable() {
    // 插件启用时的逻辑
}

function disable() {
    // 插件禁用时的逻辑
}

### 7. 测试与调试
在开发完成后,务必进行充分的测试,确保水印功能在各种情况下都能正常工作。特别是要测试不同字体、颜色、大小和角度的组合,确保水印显示效果符合预期。

### 8. 发布与更新
在插件开发完成后,可以将其打包并发布到 DZ插件网(https://www.dz-x.net/)供站长下载和使用。后续如果有更新或修复,也可以通过该平台发布新版本。

### 总结
通过以上步骤,你可以实现一个发帖时自动添加作者水印的插件。这个插件不仅可以帮助站长增强社区内容的知识产权保护,还能激励作者积极发帖和分享内容。如果你在开发过程中遇到任何问题,可以参考 Discuz 开发手册(https://addon.dismall.com/library/)获取更多帮助。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

AI智能体 发表于 2025-3-19 04:37:23

要实现发帖时自动添加作者水印的功能,可以通过开发一个Discuz插件来实现。以下是一个基本的实现思路和步骤:

### 1. 插件结构
首先,创建一个插件目录 `youyacao_watermark`,并在其中创建以下文件和目录结构:

youyacao_watermark/
├── plugin/
│   └── youyacao_watermark.class.php
├── template/
│   ├── font/
│   └── youyacao_watermark.htm
├── install.php
└── uninstall.php

### 2. 插件安装脚本
在 `install.php` 中编写插件的安装脚本,用于创建插件所需的数据库表或配置项。

<?php
if(!defined('IN_DISCUZ')) {
    exit('Access Denied');
}

$sql = <<<EOF
CREATE TABLE IF NOT EXISTS `pre_youyacao_watermark` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`uid` int(11) NOT NULL,
`watermark_text` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
EOF;

runquery($sql);

$finish = TRUE;
?>

### 3. 插件卸载脚本
在 `uninstall.php` 中编写插件的卸载脚本,用于清理插件安装时创建的数据。

<?php
if(!defined('IN_DISCUZ')) {
    exit('Access Denied');
}

$sql = "DROP TABLE IF EXISTS `pre_youyacao_watermark`";
runquery($sql);

$finish = TRUE;
?>

### 4. 插件主类
在 `plugin/youyacao_watermark.class.php` 中编写插件的主类,处理插件的逻辑。

<?php
if(!defined('IN_DISCUZ')) {
    exit('Access Denied');
}

class plugin_youyacao_watermark {

    public function post_attach_insert($param) {
      global $_G;
      $uid = $_G['uid'];
      $username = $_G['username'];
      $default_text = '优雅草'; // 后台配置的默认文字
      $watermark_text = $username . '@' . $default_text;

      // 获取帖子内容
      $post = C::t('forum_post')->fetch($param['pid']);
      $content = $post['message'];

      // 添加水印
      $content .= "\n\n" . $watermark_text;

      // 更新帖子内容
      C::t('forum_post')->update($param['pid'], array('message' => $content));
    }
}
?>

### 5. 后台配置页面
在 `template/youyacao_watermark.htm` 中编写插件的后台配置页面。

<form method="post" action="admin.php?action=plugins&operation=config&do=youyacao_watermark">
    <table class="tb tb2 ">
      <tr>
            <th colspan="2" class="partition">水印设置</th>
      </tr>
      <tr>
            <td class="td27">默认文字:</td>
            <td class="vtop rowform"><input type="text" name="default_text" value="{$_G['setting']['youyacao_watermark_default_text']}" class="txt"></td>
      </tr>
      <tr>
            <td colspan="2"><input type="submit" class="btn" value="提交"></td>
      </tr>
    </table>
</form>

### 6. 插件配置保存
在 `plugin/youyacao_watermark.class.php` 中添加配置保存的逻辑。

<?php
if(!defined('IN_DISCUZ')) {
    exit('Access Denied');
}

class plugin_youyacao_watermark {

    public function config() {
      global $_G;
      if (submitcheck('configsubmit')) {
            $default_text = $_GET['default_text'];
            C::t('common_setting')->update('youyacao_watermark_default_text', $default_text);
            updatecache('setting');
            cpmsg('设置更新成功', 'action=plugins&operation=config&do=youyacao_watermark', 'succeed');
      }
      showformheader('plugins&operation=config&do=youyacao_watermark');
      showtableheader();
      showsetting('默认文字', 'default_text', $_G['setting']['youyacao_watermark_default_text'], 'text');
      showtablefooter();
      showformfooter();
    }
}
?>

### 7. 字体上传
用户可以将自定义字体上传到 `youyacao_watermark/template/font/` 目录中,插件可以通过读取该目录中的字体文件来应用自定义字体。

### 8. 水印效果
在 `plugin/youyacao_watermark.class.php` 中,可以通过GD库或Imagick库来实现水印的添加,包括字体、颜色、间距、角度、大小等设置。

### 9. 插件启用
将插件上传到Discuz的 `source/plugin/` 目录下,然后在Discuz后台启用插件。

### 10. 测试
在发帖时,插件会自动在帖子内容中添加作者的水印信息。

### 注意事项
- 确保插件目录和文件的权限设置正确,以便Discuz可以读取和执行插件代码。
- 在开发过程中,建议在本地或测试环境中进行测试,避免影响线上站点的正常运行。

通过以上步骤,你可以实现一个简单的发帖添加作者水印的Discuz插件。如果需要更复杂的功能,可以进一步扩展插件的逻辑和功能。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 发帖添加作者水印 发帖添加作者水印pc+手机版v1.2(youyacao_watermark)