Pagina 1 van 1

Externe berichten in de layout krijgen.

Geplaatst: 19 jan 2010, 13:59
door hotheaded
  • Adres van je forum: http://www.hotheaded.nl/forum
    Event. modificaties op je forum: Air-Box image resizer,
    Wanneer ontstond het probleem? Vanaf het begin
    phpBB versie: 3.0.6


    Heb je onlangs iets veranderd aan je forum?
    Ik heb de Air-Box image resizer geinstaleerd en ik heb gezorgd dat de url's een ander scherm openen.
    Wat is het probleem?
Ik ben bezig met externe pagina's te maken maar ik loop op dit moment vast dat ik alles in de broncode (de template files) moet veranderen als ik iets wil veranderen.
Ik ben er inmiddels achter gekomen hoe ik posts van het forum extern moet weergeven maar nu wil ik deze posts weergeven in de layout.
Ik heb een php pagina aan de hand van deze tutorial gemaakt: phpbb.com blog
Hoe krijg ik de posts die ik daarmee aanroep netjes in de layout weergegeven zoal ze bijvoorbeeld op deze pagina doen:cricketmx

Ook heb ik inmiddels een html bestand in mijn template map aangemaakt.

Re: Externe berichten in de layout krijgen.

Geplaatst: 19 jan 2010, 14:40
door Ger
hotheaded schreef:Ik ben bezig met externe pagina's te maken maar ik loop op dit moment vast dat ik alles in de broncode (de template files) moet veranderen als ik iets wil veranderen.
Begrijp ik goed dat als je de template wil veranderen, je het een probleem vind dat je de code daarvan moet aanpassen? Dat zal toch hoe dan ook moeten...

Als je andere banden op je auto wil, zul je toch ook echt de banden van de wielen moeten halen en daar een andere band omheen leggen. Een muisklik is dan echt niet voldoende. ;)

Re: Externe berichten in de layout krijgen.

Geplaatst: 19 jan 2010, 15:12
door hotheaded
Ger schreef:
hotheaded schreef:Ik ben bezig met externe pagina's te maken maar ik loop op dit moment vast dat ik alles in de broncode (de template files) moet veranderen als ik iets wil veranderen.
Begrijp ik goed dat als je de template wil veranderen, je het een probleem vind dat je de code daarvan moet aanpassen? Dat zal toch hoe dan ook moeten...

Als je andere banden op je auto wil, zul je toch ook echt de banden van de wielen moeten halen en daar een andere band omheen leggen. Een muisklik is dan echt niet voldoende. ;)
Ik zat meer iets te denken in de richting van viewtopic.php, die haalt ook de info uit de database en propt het netjes in de layout. Dat wil ik ook doen.

Re: Externe berichten in de layout krijgen.

Geplaatst: 19 jan 2010, 16:18
door Ger
Ah, het gaat je dus niet om het aanpassen van de template, maar om het weergeven van actuele informatie binnen die template?

Als je van die tutorial op phpBB.com gebruik maakt, dan zou je dus inderdaad dynamische content moeten hebben. Kun je eens de inhoud van je php-bestand en je template bestand kunnen posten?

Re: Externe berichten in de layout krijgen.

Geplaatst: 19 jan 2010, 16:34
door hotheaded
Mijn index.php bestand:

Code: Selecteer alles

<?php
define('IN_PHPBB', true);
$phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './forum/';
$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');

/* create_where_clauses( int[] gen_id, String type )
* This function outputs an SQL WHERE statement for use when grabbing 
* posts and topics */

function create_where_clauses($gen_id, $type)
{
global $db, $auth;
    $size_gen_id = sizeof($gen_id);

        switch($type)
        {
            case 'forum':
                $type = 'forum_id';
                break;
            case 'topic':
                $type = 'topic_id';
                break;
            default:
                trigger_error('No type defined');
        }

    // Set $out_where to nothing, this will be used of the gen_id
    // size is empty, in other words "grab from anywhere" with
    // no restrictions
    $out_where = '';

    if( $size_gen_id > 0 )
    {
    // Get a list of all forums the user has permissions to read
    $auth_f_read = array_keys($auth->acl_getf('f_read', true));

        if( $type == 'topic_id' )
        {
            $sql     = 'SELECT topic_id FROM ' . TOPICS_TABLE . '
                        WHERE ' .  $db->sql_in_set('topic_id', $gen_id) . '
                        AND ' .  $db->sql_in_set('forum_id', $auth_f_read);

            $result     = $db->sql_query($sql);

                while( $row = $db->sql_fetchrow($result) )
                {
                        // Create an array with all acceptable topic ids
                        $topic_id_list[] = $row['topic_id'];
                }

            unset($gen_id);

            $gen_id = $topic_id_list;
            $size_gen_id = sizeof($gen_id);
        }

    $j = 0;    

        for( $i = 0; $i < $size_gen_id; $i++ )
        {
        $id_check = (int) $gen_id[$i];

            // If the type is topic, all checks have been made and the query can start to be built
            if( $type == 'topic_id' )
            {
                $out_where .= ($j == 0) ? 'WHERE ' . $type . ' = ' . $id_check . ' ' : 'OR ' . $type . ' = ' . $id_check . ' ';
            }

            // 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) )
            {
                $out_where .= ($j == 0) ? 'WHERE ' . $type . ' = ' . $id_check . ' ' : 'OR ' . $type . ' = ' . $id_check . ' ';
            }    

        $j++;
        }
    }

    if( $out_where == '' && $size_gen_id > 0 )
    {
        trigger_error('A list of topics/forums has not been created');
    }

    return $out_where;
}

$search_limit = '';

    $forum_id = array(2);
    $forum_id_where = create_where_clauses($forum_id, 'forum');

//    $topic_id = array(1);
 //   $topic_id_where = create_where_clauses($topic_id, 'topic');
    
$posts_ary = array(
        'SELECT'    => 'p.*, t.*',
    
        'FROM'      => array(
            POSTS_TABLE     => 'p',
        ),
    
        'LEFT_JOIN' => array(
            array(
                'FROM'  => array(TOPICS_TABLE => 't'),
                'ON'    => 't.topic_first_post_id = p.post_id'
            )
        ),
    
        'WHERE'     => str_replace( array('WHERE ', 'forum_id'), array('', 't.forum_id'), $forum_id_where) . '
                        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'];
         $topic_author       = get_username_string('full', $posts_row['topic_poster'], $posts_row['topic_first_poster_name'], $posts_row['topic_first_poster_colour']);
         $topic_date       = $user->format_date($posts_row['topic_time']);
         $topic_link       = append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $posts_row['forum_id'] . '&t=' . $posts_row['topic_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_vars('announcements', array(
         'TOPIC_TITLE'       => censor_text($topic_title),
         'TOPIC_AUTHOR'       => $topic_author,
         'TOPIC_DATE'       => $topic_date,
         'TOPIC_LINK'       => $topic_link,
         'POST_TEXT'         => censor_text($post_text),
         ));
      }
      
      
     page_header('homepage');

    $template->set_filenames(array(
       'body' => 'external_body.html'
    ));

    page_footer();

?>
en de external_body.html

Code: Selecteer alles

<!-- INCLUDE overall_header.html -->

<div class="panel" id="message">
	<div class="inner"><span class="corners-top"><span></span></span>
	<h2>{TOPIC_TITLE}</h2>
	<p>{POST_TEXT}</p>
	<span class="corners-bottom"><span></span></span></div>
</div>

<!-- INCLUDE overall_footer.html -->

Re: Externe berichten in de layout krijgen.

Geplaatst: 19 jan 2010, 16:56
door hotheaded
Ik denk dat ik het gevonden heb.

De oplossing was vrij simpel.
in dit stuk moetst ik het stukje 'announcements', weghalen.

Code: Selecteer alles

$template->assign_vars('announcements', array(
dus dat ik dit kreeg

Code: Selecteer alles

$template->assign_vars(array(

Re: Externe berichten in de layout krijgen.

Geplaatst: 19 jan 2010, 17:03
door Ger
Even gauw (sta op het punt van vertrekken): ik zie dat je geen $search_limit hebt ingevuld. Nu is die leeg, en dat heeft effect op de regel

Code: Selecteer alles

$posts_result = $db->sql_query_limit($posts, $search_limit);
En post_result wordt weer gebruikt om de postgegevens op te halen. Ik kan me goed voorstellen dat je door de lege $search_limit hier vreemde resultaten krijgt. Zet die eens op 5, heeft dat effect?

Je zult iig een limiet willen hebben, want als je forum loopt en je hebt duizenden posts, dan wil je die niet allemaal op 1 pagina laten parsen, als dat al gaat. ;)

Re: Externe berichten in de layout krijgen.

Geplaatst: 19 jan 2010, 18:14
door Ger
Lijkt erop dat het gelukt is?

Re: Externe berichten in de layout krijgen.

Geplaatst: 19 jan 2010, 21:18
door hotheaded
Het is inderdaad gelukt.
Bedankt voor de tips.
Ik was gewoon zo slim om een stukje van de tutorial niet goed door te lezen :oops: