迪巴拉 发表于 2022-1-12 13:12:37

插件钩子没有生效

<p class="p1" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 80, 50);"><span class="s1" style="color: rgb(127, 0, 85);">class </span>plugin_test<span class="s2" style="color: rgb(0, 0, 0);"> {</span></p><p class="p2" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; min-height: 15px; color: rgb(0, 0, 0);"></p><p class="p3" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(85, 127, 95);"><span class="s2" style="color: rgb(0, 0, 0);"><span class="Apple-tab-span" style="white-space: pre;">      </span></span>/*</p><p class="p3" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(85, 127, 95);"><span class="Apple-tab-span" style="white-space: pre;">      </span> * 贴内用户信息标记,返回值为标记显示内容</p><p class="p3" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(85, 127, 95);"><span class="Apple-tab-span" style="white-space: pre;">      </span> * "界面 ? 界面设置 ? 帖内用户信息" 用户信息模板中的标记</p><p class="p3" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(85, 127, 95);"><span class="Apple-tab-span" style="white-space: pre;">      </span> * 文档: http://open.discuz.net/?ac=document&page=plugin_hook (搜索"profile_node")</p><p class="p3" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(85, 127, 95);"><span class="Apple-tab-span" style="white-space: pre;">      </span> */</p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-tab-span" style="white-space: pre;">      </span><span class="s1" style="color: rgb(127, 0, 85);">function</span> profile_node(<span class="s3" style="text-decoration-line: underline;">$post</span>, <span class="s3" style="text-decoration-line: underline;">$start</span>, <span class="s3" style="text-decoration-line: underline;">$end</span>) {</p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-tab-span" style="white-space: pre;">      </span><span class="Apple-tab-span" style="white-space: pre;">      </span><span class="s1" style="color: rgb(127, 0, 85);">return </span><span class="s3" style="text-decoration-line: underline;">$start</span>.<span class="s4" style="color: rgb(0, 0, 192);">'我是插件'</span>.<span class="s3" style="text-decoration-line: underline;">$end</span>;</p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-tab-span" style="white-space: pre;">      </span>}</p><p class="p2" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; min-height: 15px; color: rgb(0, 0, 0);"><span class="Apple-tab-span" style="white-space: pre;">      </span></p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-converted-space">    </span><span class="s5" style="color: rgb(34, 128, 76);">public </span><span class="s1" style="color: rgb(127, 0, 85);">function</span> global_test()</p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-converted-space">    </span>{</p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-converted-space">      </span><span class="s1" style="color: rgb(127, 0, 85);">global </span>$_G;</p><p class="p2" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; min-height: 15px; color: rgb(0, 0, 0);"></p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-converted-space">      </span><span class="s1" style="color: rgb(127, 0, 85);">if</span>(isset(<span class="s1" style="color: rgb(127, 0, 85);">$_GET</span>[<span class="s4" style="color: rgb(0, 0, 192);">'mod'</span>], <span class="s1" style="color: rgb(127, 0, 85);">$_GET</span>[<span class="s4" style="color: rgb(0, 0, 192);">'ac'</span>]) && <span class="s1" style="color: rgb(127, 0, 85);">$_GET</span>[<span class="s4" style="color: rgb(0, 0, 192);">'mod'</span>] == <span class="s4" style="color: rgb(0, 0, 192);">'spacecp' </span>&& <span class="s1" style="color: rgb(127, 0, 85);">$_GET</span>[<span class="s4" style="color: rgb(0, 0, 192);">'ac'</span>] == <span class="s4" style="color: rgb(0, 0, 192);">'avatar'</span>){</p><p class="p2" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; min-height: 15px; color: rgb(0, 0, 0);"><span class="Apple-converted-space">            </span></p><p class="p3" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(85, 127, 95);"><span class="s2" style="color: rgb(0, 0, 0);">         </span>// die('ok1');</p><p class="p2" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; min-height: 15px; color: rgb(0, 0, 0);"><span class="Apple-converted-space">            </span></p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-converted-space">      </span>}</p><p class="p2" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; min-height: 15px; color: rgb(0, 0, 0);"></p><p class="p2" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; min-height: 15px; color: rgb(0, 0, 0);"></p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-converted-space">    </span>}</p><p class="p2" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; min-height: 15px; color: rgb(0, 0, 0);"></p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);">}</p><p class="p2" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; min-height: 15px; color: rgb(0, 0, 0);"></p><p class="p1" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 80, 50);"><span class="s1" style="color: rgb(127, 0, 85);">class </span>plugin_test_home<span class="s2" style="color: rgb(0, 0, 0);"> </span><span class="s1" style="color: rgb(127, 0, 85);">extends </span>plugin_test<span class="s2" style="color: rgb(0, 0, 0);">{</span></p><p class="p2" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; min-height: 15px; color: rgb(0, 0, 0);"><span class="Apple-converted-space">    </span></p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-converted-space">    </span><span class="s1" style="color: rgb(127, 0, 85);">function</span> spacecp_testxx()</p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-converted-space">    </span>{</p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-converted-space">      </span>die(<span class="s4" style="color: rgb(0, 0, 192);">'ok2'</span>);</p><p class="p5" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(127, 0, 85);"><span class="s2" style="color: rgb(0, 0, 0);">      </span>return false<span class="s2" style="color: rgb(0, 0, 0);">;</span></p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);"><span class="Apple-converted-space">    </span>}</p><p class="p4" style="font-variant-numeric: normal; font-variant-east-asian: normal; font-stretch: normal; font-size: 11px; line-height: normal; font-family: Monaco; color: rgb(0, 0, 0);">}</p>
根据教程https://open.dismall.com/?ac=document&page=plugin_hook
function CURMODULE_USERDEFINE()

当访问
/home.php?mod=spacecp&ac=avatar时,这个 spacecp_testxx() 为什么没有被调用(global_test能被正常调用)?

浅生 发表于 2022-1-12 13:13:01

class plugin_test {      /*         * 贴内用户信息标记,返回值为标记显示内容         * "界面 ? 界面设置 ? 帖内用户信息" 用户信息模板中的标记         * 文档: http://open.discuz.net/?ac=document&page=plugin_hook (搜索"profile_node")         */      function profile_node($post, $start, $end) {                return $start.'我是插件'.$end;      }            public function global_test()    {      global $_G;      if(isset($_GET['mod'], $_GET['ac']) && $_GET['mod'] == 'spacecp' && $_GET['ac'] == 'avatar'){                     // die('ok1');                  }    }}class plugin_test_home extends plugin_test{      function spacecp_testxx()    {      die('ok2');      return false;    }}

上面乱码里,没权限编辑,代码在这里

Discuz智能体 发表于 2025-3-16 14:36:57

根据你提供的代码和问题描述,`spacecp_testxx()` 方法没有被调用的原因可能是由于钩子没有正确绑定或者钩子的触发条件没有满足。以下是一些可能的原因和解决方法:

### 1. 钩子绑定问题
确保你在插件的配置文件中正确绑定了钩子。通常,插件的配置文件(如 `config.xml`)中需要定义钩子的触发点和对应的类方法。

例如,如果你希望在 `spacecp` 模块的 `avatar` 操作时触发 `spacecp_testxx()` 方法,你需要在 `config.xml` 中添加如下配置:

<hooks>
    <hook id="spacecp_avatar" filename="plugin_test_home" class="plugin_test_home" method="spacecp_testxx" />
</hooks>

### 2. 钩子触发条件
确保你访问的 URL 和钩子触发的条件一致。你提到访问 `/home.php?mod=spacecp&ac=avatar` 时,`spacecp_testxx()` 没有被调用。请确保以下几点:

- `mod` 参数的值是 `spacecp`。
- `ac` 参数的值是 `avatar`。

### 3. 类和方法命名问题
确保类名和方法名的拼写正确,并且大小写一致。Discuz 对类名和方法名是区分大小写的。

### 4. 钩子优先级
如果存在多个插件或钩子,可能会存在优先级问题。确保你的钩子优先级设置正确,避免被其他插件覆盖。

### 5. 调试方法
你可以通过在 `spacecp_testxx()` 方法中添加调试信息来确认是否被调用。例如:

function spacecp_testxx() {
    die('ok2');
    return false;
}

如果 `die('ok2');` 被执行,说明钩子被正确触发。

### 6. 检查插件是否启用
确保你的插件已经正确安装并启用。如果插件未启用,钩子自然不会生效。

### 7. 检查缓存
有时候 Discuz 的缓存可能会导致钩子不生效。尝试清除缓存后再次测试。

### 8. 检查插件目录结构
确保插件的目录结构和文件命名符合 Discuz 的规范。通常,插件的目录结构如下:

source/plugin/plugin_test/
├── plugin_test.class.php
├── plugin_test_home.class.php
└── config.xml

### 9. 检查插件版本兼容性
确保你的插件版本与当前 Discuz 版本兼容。如果插件是为旧版本开发的,可能需要进行一些适配。

### 10. 检查插件冲突
如果安装了多个插件,可能存在插件冲突。尝试禁用其他插件,单独测试当前插件。

### 总结
通过以上步骤,你应该能够找到 `spacecp_testxx()` 方法没有被调用的原因。如果问题仍然存在,建议逐步排查,确保每个环节都正确配置。

如果你有其他问题或需要进一步的帮助,请随时提问!
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
页: [1]
查看完整版本: 插件钩子没有生效