Externe berichten in de layout krijgen.

Hulp nodig bij je installatie of kom je ergens niet uit? Probeer phpBB3! Problemen lossen we samen met je op.
phpBB 3.0 is End of support per 1 januari 2017. Dit forum is hier enkel ter archief. Het wordt aangeraden te upgraden naar phpBB 3.2
Forumregels
phpBB 3.0 is End of support per 1 januari 2017. Dit forum is hier enkel ter archief. Het wordt aangeraden te upgraden naar phpBB 3.2
Gesloten
hotheaded
Berichten: 5
Lid geworden op: 19 jan 2010, 13:44

Externe berichten in de layout krijgen.

Bericht door hotheaded » 19 jan 2010, 13:59

  • 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.

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: Externe berichten in de layout krijgen.

Bericht door Ger » 19 jan 2010, 14:40

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. ;)

hotheaded
Berichten: 5
Lid geworden op: 19 jan 2010, 13:44

Re: Externe berichten in de layout krijgen.

Bericht door hotheaded » 19 jan 2010, 15:12

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.

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: Externe berichten in de layout krijgen.

Bericht door Ger » 19 jan 2010, 16:18

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?

hotheaded
Berichten: 5
Lid geworden op: 19 jan 2010, 13:44

Re: Externe berichten in de layout krijgen.

Bericht door hotheaded » 19 jan 2010, 16:34

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 -->

hotheaded
Berichten: 5
Lid geworden op: 19 jan 2010, 13:44

Re: Externe berichten in de layout krijgen.

Bericht door hotheaded » 19 jan 2010, 16:56

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(

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: Externe berichten in de layout krijgen.

Bericht door Ger » 19 jan 2010, 17:03

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. ;)

Gebruikersavatar
Ger
Berichten: 4864
Lid geworden op: 03 jan 2006, 22:23
Locatie: 192.68.1.100
Contacteer:

Re: Externe berichten in de layout krijgen.

Bericht door Ger » 19 jan 2010, 18:14

Lijkt erop dat het gelukt is?

hotheaded
Berichten: 5
Lid geworden op: 19 jan 2010, 13:44

Re: Externe berichten in de layout krijgen.

Bericht door hotheaded » 19 jan 2010, 21:18

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:

Gesloten