> ## Documentation Index
> Fetch the complete documentation index at: https://discuz.p.cafe/llms.txt
> Use this file to discover all available pages before exploring further.

# 页面嵌入

## **页面嵌入类型脚本格式**

```php theme={null}
<?php
​
//全局嵌入点类（必须存在）
class plugin_identifier {
​
    function HookId_1() {
        ......
        return ...;
    }
​
    function HookId_2() {
        ......
        return ...;
    }
​
    ......
​
}
​
//脚本嵌入点类
class plugin_identifier_CURSCRIPT extends plugin_identifier {
​
    function HookId_1() {
        ......
        return ...;
    }
​
    function HookId_2() {
        ......
        return ...;
    }
​
    ......
​
}
​
?>
```

### **命名规则说明**

**plugin\_** 前缀：普通版脚本中的类名以 `plugin_` 开头。手机版脚本中的类名以 `mobileplugin_` 开头。

**identifier：** 插件的唯一标识符，在插件设置中设置。

**CURSCRIPT：** 嵌入点位于的脚本名，如 forum.php 为 forum。X3.4 最新版本开始支持 plugin.php 为 CURSCRIPT 的插件之间的 hook 调用，CURSCRIPT 值为 plugin。

### **HookId 函数类型**

| **函数名**                               | **调用位置**               | **声明位置**        | **参数含义**                                                                                              |
| :------------------------------------ | :--------------------- | :-------------- | :---------------------------------------------------------------------------------------------------- |
| HookId()                              | 所有模块执行前被调用             | 脚本嵌入点类          | -                                                                                                     |
| HookId\_output(\$value)               | 模块执行完毕，模板输出前被调用        | 脚本嵌入点类          | \$value: array('template' => 当前要输出的模版, 'message' => showmessage 的信息内容, 'values' => showmessage 的信息变量) |
| global\_HookId()                      | 模块执行完毕，模板输出前被调用        | 全局嵌入点类          | -                                                                                                     |
| HookId\_message(\$value)              | showmessage() 执行时调用    | 脚本嵌入点类          | \$value: array('param' => showmessage() 函数的参数数组)                                                      |
| ad\_adId(\$value)                     | 相应的广告位中调用              | 全局嵌入点类/脚本嵌入点类   | \$value: array('params' => 广告位参数, 'content' => 当前广告位原本将要显示的内容)                                        |
| common()                              | 所有模块执行前被调用             | 全局嵌入点类          | -                                                                                                     |
| discuzcode(\$value)                   | discuzcode() 函数执行时调用   | 全局嵌入点类          | \$value: array('param' => caller 函数的参数数组, 'caller' => caller 函数)                                      |
| deletethread(\$value)                 | deletethread() 函数执行时调用 | 全局嵌入点类          | \$value: array('param' => deletethread() 函数的参数数组, 'step' => 删除的步骤)                                    |
| deletepost(\$value)                   | deletepost() 函数执行时调用   | 全局嵌入点类          | \$value: array('param' => deletepost() 函数的参数数组, 'step' => 删除的步骤)                                      |
| avatar(\$value)                       | avatar() 函数执行时调用       | 全局嵌入点类          | \$value: array('param' => avatar() 函数的参数数组)                                                           |
| profile\_node(\$post, \$start, \$end) | 贴内用户信息标记               | 全局嵌入点类          | \$post: 当前帖子信息数组，\$start: 前置字符，\$end: 后置字符                                                            |
| identifier\_\_hookid(\_output)()      | 插件的hook调用              | 脚本嵌入点类/应用互动嵌入点类 | 参考 HookId() 及 HookId\_output()                                                                        |

## **自定义嵌入点**

要查看所有的预定义嵌入点，请打开 config/config\_global.php 文件，将文件结尾添加的设计者模式值改成"2"，然后更新缓存即可。在页面源码中查找`<hook>`可搜索到嵌入点。

```php theme={null}
$_config['plugindeveloper'] = 2;
```

预定义的嵌入点会在页面预置好的位置输出函数返回的内容。函数返回值类型如果是 array 且是空值的，必须输出一个空数组，如：

```php theme={null}
return array();
```

函数名并不限于上面列表，您可以自定义，只要符合以下规则，函数就会在适当的地方被调用：

```php theme={null}
function CURMODULE_USERDEFINE[_output]()
```

**CURMODULE** 指明了此函数在哪个模块执行，可通过常量 CURMODULE 得到当前页面的 CURMODULE 值。

**USERDEFINE** 可自定义，如果函数名以"\_output"结尾则会在模板输出前调用，否则会在模块执行前调用。

例如：`attachment_test()` 函数会在论坛的下载附件的时候执行。

"\_output"结尾的函数的第一个参数为数组，含义为 `array('template' => 要输出的模板名, 'message' => showmessage 的文字)`。

以下函数将在登录的时候输出调试文字：

```php theme={null}
function logging_test_output($a) {
    print_r($a);
    print_r($_POST);
}
```

## **辅助函数**

plugin\_identifier 类中的其它函数为了便于阅读建议以"\_"开头，如：

```php theme={null}
<?php
​
class plugin_sample {
​
    function _updatecache() {
        ......
        return ...;
    }
​
}
​
class plugin_sample_forum extends plugin_sample {
​
    function viewthread_posttop() {
        ......
        return ...;
    }
​
    ......
​
}
​
?>
```
