1

PHPBB3 フォーラムのフォーラム フィードを外部の Frontpage に統合しようとしています。

このために、phpbbwiki の例を使用して います。コードは次のとおりです。

私の問題は、ユーザーがフォーラムで既に認証されている場合にのみ機能することですが、PHPBB のデフォルト (空白) ページではなく、ゲスト ユーザーに公開されているトピックをユーザーに表示したいと考えています。

この場合、JSON でトピックを返すために ajax を使用していますが、これはここでの私の問題にはあまり関係ありません。

PHPBB が提供できる範囲内でこれが達成可能かどうか、また、これがより複雑な問題である場合はどこから調べればよいかを知っておくとよいでしょう。

これがあなたの一部にとって簡単な問題である場合、私は助けに感謝します.

ありがとうございました!

アップデート

ユーザーに読み取り権限がないように見えるため、投稿を取得するための SQL ステートメントは作成されません。失敗する条件は (関数: 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 は現在のフォーラム ID です。

ユーザー データ オブジェクトの一部を次に示します。

  ["user_id"]  => string(1) "1"
  ["user_type"]=> string(1) "2"
  ["group_id"] => string(1) "1"

このユーザーは GUESTS グループに属し、そのタイプはデフォルトで IGNORE です。user_type を 0=NORMAL に設定しようとしましたが、役に立ちませんでした。

PHPBB3 フォーラムの通常の訪問者として、開いているすべてのフォーラムを読むことができますが、この一般的なゲスト ユーザーがフォーラムにアクセスできないのはなぜだろうかと思います。

更新と解決策

私を軌道に乗せてくれた答えに感謝したい. 私が犯した元の間違いが単なるコピー/貼り付けの問題であった場合、PHPBBのユーザー管理の奥深くで解決策を無限に検索したでしょう...

$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');

これらの 2 つの行は、チュートリアルから取得したものであり、「すべての」フォーラムとトピックからデータを取得しようとするときにまだ有効です。ちなみに、これらのフォーラム Id は、登録ユーザーに公開され、認証されていないユーザーには公開されていません。上記のコンテンツ制限を解除すると、スクリプトは再び正常に実行されます。

繰り返しになりますが、アンディに感謝します。

4

1 に答える 1

1

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 : './';

コード ブロックを変更する場所を示す 2 行は、表示される内容の中心です。上記では、提供されたリンクから例 4を投稿しました。他の例のコード ブロック全体を置き換えることも同様に機能します。

最後に、テンプレートを変更するときに ACP からキャッシュをクリアする必要がある場合があります。

于 2013-02-15T20:50:45.323 に答える