PHPBB添加隐藏标签,回复可见隐藏内容
来到默认模板中找到template/postring_buttons.html找到var bbtags = new Array(你可以看到,里面的内容就是你平常编辑帖子用的 butt标签按钮来到末尾添加你想要添加的标签我的替换成:var bbtags = new Array('[b]','[/b]','[i]','[/i]','[u]','[/u]','[quote]','[/quote]','[code]','[/code]','[list=a][li]','[/li][/list]','[list=]','[/list]','','[url]','[/url]','[flash=]', '[/flash]','','[/size]','[krabs=]','[/krabs]', {custom_tags.BBCODE_NAME});
可以看到 后面我添加了 '[krabs=]','[/krabs]'然后来到<input type="button" accesskey="d" name="addbbcode18" value="Flash" onclick="bbstyle(18)" title="{L_BBCODE_D_HELP}" />
在后面添加 (注意 是在后面添加 不是替换!!)<input type="button" accesskey="d" name="addbbcode18" value="设置隐藏内容" title="添加一个隐藏内容(用户回复后即可浏览)" onclick="bbstyle(22)" title="{L_BBCODE_D_HELP}" />
模板中使用中文 请将文件保存为UTF8 添加完毕 保存文件即可!
清除缓存可以看到 编辑帖子有这个选项
接下来,我们要解析这个内容,来到根目录下的viewtopic.php
首先我们要知道这个规则!
用户访问或者游客访问 是不允许看见的!
必须回复帖子才可以看见!
游客使用的是 游客用户的SID
用户则使用自己用户的SID
我们获取到 访问者的SID 与 USER_ID
来到viewtopic.php后,找到$postrow = array(
我们在上面添加以下内容! 注意是在上面
(这里是百度经验 如果你看到的代码格式有问题 请到我的博客查看 Krabs)
$csid = (isset($_COOKIE['phpbb3_itw5b_sid'])) ? $_COOKIE['phpbb3_itw5b_sid'] : '';
$cid = (isset($_COOKIE['phpbb3_itw5b_u'])) ? $_COOKIE['phpbb3_itw5b_u'] : '';
//这里大家要注意: phpbb3_itw5b_sid 与 phpbb3_itw5b_u 这两个cookie可以在你的论坛设置中设置,如果你没设置过那么保留我现在提供的即可! 大家可以看看下面这张图就知道了!
//此时我们拥有了 客户的sid与user id 我们要进行数据库匹配
$cb = false; //在此我们建立一个bool 用于确认用户是否回复了帖子
$con = mysql_connect('localhost','username','password'); //这里是数据库哈~!
if($con) //数据库连接成功
{
if(mysql_select_db("localhost", $con)) //连接库名 你的论坛使用的数据库名称
{
$result = mysql_query("SELECT * FROM phpbb_posts"); //phpbb_posts 既是文章的表段了!
//循环这次得到当前文章匹配的topic_id与poster_id
//在这里 phpbb_posts 表中的 topic_id = 帖子ID forum_id 忘记是啥了 poster_id = userid
while($row = mysql_fetch_array($result))
{
if($row['topic_id'] == $topic_id && $row['forum_id'] == $forum_id && $row['poster_id']==$cid )
{
//$tid = $row['forum_id'];
//$userid = $row['poster_id'];
$cb = true; //如果3个条件成立 用户回复过帖子!
break;
}
//echo "<br />";
}
}
}
mysql_close($con);
//这个匹配有个bug 如果客户将cookie的 poster_id 伪装成 已经回复过帖子的用户id 那么久查看到帖子内容了! 我个人就不多写了 个人不在乎这个
$message = ' ' . $message; //message 就是帖子内容了 也是用户回复内容!
//可以看到 这里我加了一个空格,这是为什么呢? 原因就是strpos返回值 如果找不到返回false 也就是 = 0 如果隐藏内容的标签 出现在 0 第一个匹配 那么就会出现一些问题 strpos 为何返回值不是 -1 呢 真是郁闷了!
$ts1 = '[krabs=]';
$ts2 = '[/krabs]'; //刚才添加的标签!
$ps = strlen($message);
$ts3 = '<p class="rules">
<img src="./styles/Cynthia/imageset/icon_topic_unapproved.png" width="16" height="16" alt="浏览该内容需要回复帖子" title="浏览该内容需要回复帖子"> <a href="#"><strong>浏览该内容需要回复帖子</strong></a><br>
</p>'; //将隐藏内容替换 这里我用到我主题的一个框架
$t2 = 1;
$t1 = 1;
$ms = '';
$ii=0;
$cout = count(explode($ts1,$message)) -2;
//echo $cout;
if($cb == false)
{
$t1 = strpos($message,$ts1,$t2);
$t2 = strpos($message,$ts2,$t1) + strlen($ts2);
while($t1 != false && $t2 != false)
{
$t1 = strpos($message,$ts1,0);
$t2 = strpos($message,$ts2,$t1) + strlen($ts2);
$message = substr($message,0,$t1) . $ts3 . substr($message,$t2,$ps);
//echo $ms . '<br>';
if($ii == $cout)
break;
$ii++;
//echo $ti;
//echo $t2;
//if($t1 != false && $t2 != false)
// $message = substr_replace($message,$ts3,$t1,$t2-$t1+strlen($ts3)-1);
}
//$message = $ms;
}