我想一个。中文论坛论坛动态集成到外部头版。
为此,我正在使用从phpbbwiki一个例子: 这里是代码
我的问题是,如果用户在论坛认证的媒体链接这只是工作,但我想用户看到的不是一个PHPBB默认值(空白字符)页面打开的guest用户的话题。
在这种情况下,我使用AJAX的JSON返回话题,但这不应该真正的问题我的问题在这里。
这将是很好的知道这是什么PHPBB能够提供的范围和从哪里开始寻找,如果这是一个比较复杂的问题中实现的。
如果这是一些你一个简单的问题,我会寻求帮助表示感谢。
谢谢!
更新
有关的职位检索的SQL语句未创建,因为用户似乎并不具有读取权限。 失败的条件是(funnction:create_where_clauses):
// If the type is forum, do the check to make sure the user has read permissions
else if( $type == 'forum_id' && $auth->acl_get('f_read', $id_check) )
其中id_check是当前forum_id。
下面是用户数据对象的一部分:
["user_id"] => string(1) "1"
["user_type"]=> string(1) "2"
["group_id"] => string(1) "1"
该用户是Guests组,其类型为默认不容忽视。 I'have尝试设置USER_TYPE 0 = NORMAL - 无济于事。
作为对。中文论坛正常的访客,我可以读取所有开放的论坛,我不知道为什么这个通用的guest用户不能访问论坛。
更新和sollution
我要感谢你再次给我带来了正轨答案。 我会不断地searchted在PHPBBs用户管理的深处时,我原来的错误只是一个愚蠢的复制/粘贴问题sollution ...
$forum_id = array(2, 5);
$forum_id_where = create_where_clauses($forum_id, 'forum');
$topic_id = array(20, 50);
$topic_id_where = create_where_clauses($topic_id, 'topic');
这两条线从教程地方正在尝试从“全能”论坛和主题数据时采取的地方,仍然。 顺便说一下这些论坛标识的地方开放给注册用户和关闭,以非认证用户。 当lifiting上述内容限制脚本再次执行,因为它应该是。
所以,再一次 - 额外的感谢送给安迪。
该空白页是因为你没有一个external_body.html
在您的文件style/prosilver/templates
目录。
一个非常基本的external_body.html
会是这个样子。 很显然,你必须这样集成到你的主页的主题。
<!-- BEGIN announcements -->
Title: {announcements.TOPIC_TITLE}<br />
Post author: {announcements.POST_AUTHOR}<br />
Post date: {announcements.POST_DATE}<br />
Last post text: {announcements.POST_TEXT}<br />
Post link: {announcements.POST_LINK}
<!-- END announcements -->
然后,使用由phpBB.com MOD团队battye提供的文件,并把它在你的论坛的根,可以显示最近的帖子。
external_page.php
<?php
/*
* Description: example file for displaying latest posts and topics
* by battye (for phpBB.com MOD Team)
* September 29, 2009
* Modified for StackOverflow Question: http://stackoverflow.com/questions/14723578/phpbb3-forum-feed-on-external-page-for-non-authenticated-users
*/
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);
include($phpbb_root_path . 'includes/bbcode.' . $phpEx);
include($phpbb_root_path . 'includes/functions_display.' . $phpEx);
// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('viewforum');
$search_limit = 5;
// ----- Change between HERE -----
$posts_ary = array(
'SELECT' => 'p.*, t.*, u.username, u.user_colour',
'FROM' => array(
POSTS_TABLE => 'p',
),
'LEFT_JOIN' => array(
array(
'FROM' => array(USERS_TABLE => 'u'),
'ON' => 'u.user_id = p.poster_id'
),
array(
'FROM' => array(TOPICS_TABLE => 't'),
'ON' => 'p.topic_id = t.topic_id'
),
),
'WHERE' => $db->sql_in_set('t.forum_id', array_keys($auth->acl_getf('f_read', true))) . '
AND t.topic_status <> ' . ITEM_MOVED . '
AND t.topic_approved = 1',
'ORDER_BY' => 'p.post_id DESC',
);
$posts = $db->sql_build_query('SELECT', $posts_ary);
$posts_result = $db->sql_query_limit($posts, $search_limit);
while( $posts_row = $db->sql_fetchrow($posts_result) )
{
$topic_title = $posts_row['topic_title'];
$post_author = get_username_string('full', $posts_row['poster_id'], $posts_row['username'], $posts_row['user_colour']);
$post_date = $user->format_date($posts_row['post_time']);
$post_link = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "p=" . $posts_row['post_id'] . "#p" . $posts_row['post_id']);
$post_text = nl2br($posts_row['post_text']);
$bbcode = new bbcode(base64_encode($bbcode_bitfield));
$bbcode->bbcode_second_pass($post_text, $posts_row['bbcode_uid'], $posts_row['bbcode_bitfield']);
$post_text = smiley_text($post_text);
$template->assign_block_vars('announcements', array(
'TOPIC_TITLE' => censor_text($topic_title),
'POST_AUTHOR' => $post_author,
'POST_DATE' => $post_date,
'POST_LINK' => $post_link,
'POST_TEXT' => censor_text($post_text),
));
}
// --- and HERE ---
page_header('External page');
$template->set_filenames(array(
'body' => 'external_body.html'
));
page_footer();
?>
如果你不希望这样到你的论坛的根呢,你需要修改此行中使用适当的路径指向您的论坛根目录:
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './';
这两条线,它指示了改变的代码的块是什么获取显示的心脏。 以上,我已经张贴例4从您提供的链接。 从其他实施例的替换码的整个块将正常工作。
最后,您可能需要清除从ACP缓存,当你做模板更改。