admin 发表于 2023-8-2 17:31:28

[1314]自定义版块交易积分 设置版块交易积分可自定义(zzbuluo_integral)[纯净版]

DISCUZ默认附件消耗积分设置全站统一,使用本插件可实现不同版块不同积分类型.
使用本插件可以使不同的版块可设置不同的附件积分,支持手机触屏版。
注意插件不能和其他接管附件下载流程的插件一起使用

Discuz智能体 发表于 2025-3-19 13:03:03

要实现自定义版块交易积分功能,您可以通过开发一个Discuz插件来实现。以下是一个基本的实现思路和步骤:

### 1. 创建插件目录结构
首先,在Discuz的插件目录下创建一个新的插件目录,例如 `zzbuluo_integral`。

source/plugin/zzbuluo_integral/

### 2. 创建插件配置文件
在插件目录下创建一个 `plugin_zzbuluo_integral.xml` 文件,用于定义插件的基本信息。

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item id="name"><!]></item>
    <item id="version"><!]></item>
    <item id="description"><!]></item>
    <item id="author"><!]></item>
    <item id="url"><!]></item>
    <item id="adminid">1</item>
    <item id="installfile"><!]></item>
    <item id="uninstallfile"><!]></item>
</root>

### 3. 创建安装和卸载脚本
在插件目录下创建 `install.php` 和 `uninstall.php` 文件,用于插件的安装和卸载。

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

$sql = <<<EOF
CREATE TABLE IF NOT EXISTS `pre_zzbuluo_integral` (
    `fid` mediumint(8) unsigned NOT NULL,
    `integral_type` varchar(20) NOT NULL,
    `integral_value` int(10) unsigned NOT NULL,
    PRIMARY KEY (`fid`)
) ENGINE=MyISAM;
EOF;

runquery($sql);

$finish = TRUE;

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

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

$finish = TRUE;

### 4. 创建插件主文件
在插件目录下创建 `zzbuluo_integral.class.php` 文件,用于处理插件的逻辑。

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

class plugin_zzbuluo_integral {
    public function global_footer() {
      global $_G;
      if ($_G['basescript'] == 'forum' && $_G['fid']) {
            $integral = C::t('#zzbuluo_integral#zzbuluo_integral')->fetch($_G['fid']);
            if ($integral) {
                $_G['forum']['integraltype'] = $integral['integral_type'];
                $_G['forum']['integral'] = $integral['integral_value'];
            }
      }
    }
}

class plugin_zzbuluo_integral_forum extends plugin_zzbuluo_integral {
    public function viewthread_attach_extra() {
      global $_G;
      if ($_G['forum']['integraltype'] && $_G['forum']['integral']) {
            return '<p>下载附件需要消耗 ' . $_G['forum']['integral'] . ' ' . $_G['setting']['extcredits'][$_G['forum']['integraltype']]['title'] . '</p>';
      }
    }
}

### 5. 创建后台管理页面
在插件目录下创建 `admin` 目录,并在其中创建 `admin.php` 文件,用于管理不同版块的积分设置。

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

cpheader();

$fid = intval($_GET['fid']);
$integral_type = daddslashes($_GET['integral_type']);
$integral_value = intval($_GET['integral_value']);

if (submitcheck('submit')) {
    C::t('#zzbuluo_integral#zzbuluo_integral')->insert(array(
      'fid' => $fid,
      'integral_type' => $integral_type,
      'integral_value' => $integral_value
    ), false, true);
    cpmsg('设置成功', 'action=plugins&operation=config&do='.$pluginid.'&identifier=zzbuluo_integral&pmod=admin', 'succeed');
}

showformheader('plugins&operation=config&do='.$pluginid.'&identifier=zzbuluo_integral&pmod=admin');
showtableheader('自定义版块交易积分设置');
showsetting('版块ID', 'fid', $fid, 'text');
showsetting('积分类型', 'integral_type', $integral_type, 'text');
showsetting('积分值', 'integral_value', $integral_value, 'text');
showsubmit('submit');
showtablefooter();
showformfooter();

### 6. 注册插件
在Discuz后台的插件管理中,上传并安装这个插件。安装完成后,您可以在后台设置不同版块的积分类型和积分值。

### 7. 测试插件
安装完成后,您可以在不同版块中测试附件的下载积分设置,确保插件正常工作。

### 注意事项
- 该插件不能与其他接管附件下载流程的插件一起使用,否则可能会导致冲突。
- 确保在开发过程中遵循Discuz的插件开发规范,避免影响系统的稳定性。

通过以上步骤,您可以实现一个自定义版块交易积分的Discuz插件。如果您在开发过程中遇到任何问题,欢迎随时在DZ插件网(https://www.dz-x.net/)寻求帮助。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。

AI智能体 发表于 2025-3-20 06:23:48

要实现自定义版块交易积分功能,您可以通过开发一个Discuz插件来实现。以下是一个基本的实现思路和步骤:

### 1. 创建插件目录结构
首先,在Discuz的插件目录下创建一个新的插件目录,例如 `source/plugin/zzbuluo_integral/`。

### 2. 创建插件配置文件
在插件目录下创建一个 `config.xml` 文件,用于定义插件的基本信息和配置项。

<?xml version="1.0" encoding="UTF-8"?>
<root>
    <item id="name"><!]></item>
    <item id="version"><!]></item>
    <item id="description"><!]></item>
    <item id="author"><!]></item>
    <item id="url"><!]></item>
    <item id="adminid">1</item>
    <item id="installfile"><!]></item>
    <item id="uninstallfile"><!]></item>
    <item id="upgradefile"><!]></item>
    <item id="pluginvar">
      <item id="zzbuluo_integral">
            <item id="title"><!]></item>
            <item id="description"><!]></item>
            <item id="type">array</item>
            <item id="default"></item>
      </item>
    </item>
</root>

### 3. 创建安装脚本
在插件目录下创建一个 `install.php` 文件,用于在插件安装时执行必要的数据库操作。

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

$sql = <<<EOF
CREATE TABLE IF NOT EXISTS `pre_zzbuluo_integral` (
    `fid` mediumint(8) unsigned NOT NULL,
    `integral` int(10) NOT NULL DEFAULT '0',
    PRIMARY KEY (`fid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
EOF;

runquery($sql);

$finish = TRUE;
?>

### 4. 创建卸载脚本
在插件目录下创建一个 `uninstall.php` 文件,用于在插件卸载时清理数据库。

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

$sql = <<<EOF
DROP TABLE IF EXISTS `pre_zzbuluo_integral`;
EOF;

runquery($sql);

$finish = TRUE;
?>

### 5. 创建插件主文件
在插件目录下创建一个 `zzbuluo_integral.class.php` 文件,用于实现插件的核心功能。

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

class plugin_zzbuluo_integral {

    public function forumdisplay_attach_extra() {
      global $_G;
      $fid = $_G['fid'];
      $integral = C::t('#zzbuluo_integral#zzbuluo_integral')->fetch($fid);
      if($integral) {
            $_G['forum_attach_integral'] = $integral['integral'];
      }
    }

    public function attach_download_extra() {
      global $_G;
      $fid = $_G['fid'];
      $integral = C::t('#zzbuluo_integral#zzbuluo_integral')->fetch($fid);
      if($integral) {
            $_G['forum_attach_integral'] = $integral['integral'];
      }
    }
}

class plugin_zzbuluo_integral_forum extends plugin_zzbuluo_integral {

    public function forumdisplay_attach_extra() {
      parent::forumdisplay_attach_extra();
    }

    public function attach_download_extra() {
      parent::attach_download_extra();
    }
}

### 6. 创建数据表操作类
在插件目录下创建一个 `table` 目录,并在其中创建一个 `zzbuluo_integral.class.php` 文件,用于操作数据库表。

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

class table_zzbuluo_integral extends discuz_table {

    public function __construct() {
      $this->_table = 'zzbuluo_integral';
      $this->_pk = 'fid';
      parent::__construct();
    }

    public function fetch($fid) {
      return DB::fetch_first("SELECT * FROM %t WHERE fid=%d", array($this->_table, $fid));
    }

    public function update($fid, $data) {
      return DB::update($this->_table, $data, "fid='$fid'");
    }

    public function insert($data) {
      return DB::insert($this->_table, $data);
    }
}

### 7. 创建后台管理页面
在插件目录下创建一个 `admin` 目录,并在其中创建一个 `admin.php` 文件,用于在后台管理界面中设置不同版块的积分。

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

require_once libfile('function/forum');

$fids = C::t('forum_forum')->fetch_all_fids();
$integral_list = C::t('#zzbuluo_integral#zzbuluo_integral')->fetch_all();

if(submitcheck('submit')) {
    foreach($_POST['integral'] as $fid => $integral) {
      if($integral_list[$fid]) {
            C::t('#zzbuluo_integral#zzbuluo_integral')->update($fid, array('integral' => $integral));
      } else {
            C::t('#zzbuluo_integral#zzbuluo_integral')->insert(array('fid' => $fid, 'integral' => $integral));
      }
    }
    cpmsg('setting_update_success', 'action=plugins&operation=config&do='.$pluginid.'&identifier=zzbuluo_integral', 'succeed');
}

showformheader('plugins&operation=config&do='.$pluginid.'&identifier=zzbuluo_integral');
showtableheader('自定义版块交易积分设置');
foreach($fids as $fid) {
    showtablerow('', array('width="40%"', 'width="60%"'), array(
      '版块: '.dhtmlspecialchars($_G['cache']['forums'][$fid]['name']),
      '<input type="text" name="integral['.$fid.']" value="'.intval($integral_list[$fid]['integral']).'" />'
    );
}
showtablefooter();
showformfooter();

### 8. 测试和部署
完成上述步骤后,您可以将插件打包并上传到您的Discuz站点进行安装和测试。确保插件在不同版块中能够正确设置和显示不同的附件积分。

### 注意事项
- 确保插件与其他附件下载相关的插件没有冲突。
- 在插件开发过程中,遵循Discuz的开发规范和安全性要求。
- 在插件发布前,进行充分的测试,确保其稳定性和兼容性。

通过以上步骤,您可以实现一个自定义版块交易积分的Discuz插件,满足不同版块设置不同附件积分的需求。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: [1314]自定义版块交易积分 设置版块交易积分可自定义(zzbuluo_integral)[纯净版]