如何在 vbulletin v4 的插件中获取线程的页码?

How can I get page number of thread in my plugin in vbulletin v4?

我需要在 vbulletin 的插件中获取线程的页码。我的插件代码是:

global $vbulletin, $threadinfo, $bloginfo, $pagetitle;
if (THIS_SCRIPT == 'showthread'){
   $customTitle = $pagetitle.'-'.$pagenumber;
}
$rows = <<<ROW
<meta property="og:title" content="$customTitle" />
ROW;
$template_hook['headinclude_bottom_css'] .= $rows;

如何获取 set $pagenumber 的线程值的页码? 我知道模板如下:

{vb:rawphrase page_x, {vb:raw pagenumber}}

但是我需要这个插件。

你也应该声明 $pagenumber 全局

global $pagenumber;
if (THIS_SCRIPT == 'showthread'){
    echo '<!-- pageNumber: ' . $pagenumber . ' -->';
}

放置在 showthread_start 钩子中,这给了我以下输出:<!-- pageNumber: 9 -->

但请注意,如果您在某些全局可用的挂钩中加载插件代码,例如 global_start,这些线程变量可能不可用,因为它们稍后在 vBulletin 的代码中被初始化。在这种情况下,请尝试选择其他运行较早的挂钩。在这里,尝试错误会有所帮助。

我建议在 showthread_start 中尝试一些 POC 代码以确保其有效。然后更改挂钩以找出哪个对您的计划操作足够早并且包含所有必需的变量。有时查看钩子周围的 vB 代码也很有用。

您可以使用例如在 vB 公告安装的根目录中进行 grep 查找执行 global_start 的位置:

# grep -rn --include \*.php "fetch_hook('global_start')" .
./global.php:29:($hook = vBulletinHook::fetch_hook('global_start')) ? eval($hook) : false;

也可以使用 Notepad++(在文件中搜索)等工具在 Windows 系统上进行搜索。