Translations of this page: en bg cs de fi fr hu it ja pl ru tr zh

This is an old revision of the document!


PunBB 1.3:n upottaminen

Keskustelualueen upottaminen on todella kätevää, kun haluat käyttää samaa tietokantaa verkkosivustollesi ja keskustelualueellesi, tai jos haluat suorittaa joitakin tehtäviä, jotka vaativat käyttäjää kuuluumaan tiettyyn käyttäjäryhmään. Alta löydät joitakin upotusmahdollisuuksia.

Yleistä

Käyttääksesi PunBB:tä käyttäjien tunnistukseen skripteissäsi tai käyttääksesi kirjautuneen käyttäjän tietoja, sinun pitää sisällyttää common.php, joka löytyy include/ -kansiosta. Sinun pitää myös määrittää FORUM_ROOT -muuttuja skriptissäsi. Se voidaan tehdä tällä tavalla:

<?php
 
// Lisää nämä rivit mahdollisimman ylös koodissasi
define('FORUM_ROOT', 'forum/');
require FORUM_ROOT.'include/common.php';
 
?>

URL-kaavat

PunBB 1.3 tukee luonnostaan URL-uudelleenkirjoitusta, sisältäen hakukoneystävälliset osoitteet.

Kuinka ottaa URL-uudelleenkirjoitus käyttöön:

  1. Nimeä tiedosto .htaccess.dist keskustelualueesi päähakemistossa nimellä .htaccess.
  2. Siirry kohtaan Ylläpito ⇒ Asetukset (/admin/settings.php?section=setup), etsi URL-kaava -kohta.
  3. Valitse haluamasi URL-kaava ja tallenna muutokset.

Tietokanta-avustajat

include/common.php -tiedostossa yleisin toteutus tietokantataso -luokasta . Esimerkiksi tämä tietokantataso nimeltään $forum_db on luotu tietokanta-avustajien globaaliin tutkimiseen.

Miten kyselyn voi suorittaa

  • Suora kysely. Voit yksinkertaisesti kirjoittaa SQL-kyselyn ja suorittaa sen.
 $result = $forum_db->query('SELECT * FROM topics WHERE id = 10');

Varmista, että SQL-koodi sopii kaikkien PunBB:n tietokantatyyppien kanssa.

  • Kyselyntekijän käyttäminen. Voit suorittaa tietokantakyselyitä läpinäkyvästi. Kaikki tietokantatyypit ja tietokantarakenteet otetaan automaattisesti huomioon. Esimerkki käytöstä (Korjaatko kirjoita tähän enemmän tietoa):
$query = array(
   'SELECT'  => '*',
   'FROM'    => 'topics',
   'WHERE'   => 'id = 10'
);
$result = $forum_db->query_build($query);

Katso kyselyntekijä -sivu saadaksesi lisätietoja.

Kyselyn tuloksien hallinta

Meillä on esimerkiksi tämä kysely:

  $query = array(
    'SELECT' => 't.id, t.poster, t.subject, t.posted',
    'FROM'   => 'topics AS t',
    'WHERE'  => 't.forum_id = 1'
  );
  $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
  • Voidaksemme tietää, kuinka monta riviä tämä palauttaa, voimme käyttää tätä:
  $forum_db->num_rows($result);
  • Hakeaksemme nykyisen rivin assosiatiiviseen array'hun:
  $data = $forum_db->fetch_assoc($result);
  // Esimerkki topic_id:n hakemisesta
  $topic_id = $data['id'];
  • Hakeaksemme nykyisen rivin numeeriseen array'hun:
  $data = $forum_db->fetch_row($result);
  // Esimerkki topic_id:n hakemisesta
  $topic_id = $data[0];
  • Hakeaksemme vain joitakin arvoja nykyiseltä riviltä:
  // Tämä koodi hakee vain aiheen id:n ja otsikon
  list($id,, $subject,) = $forum_db->fetch_row($result);
  • Käsitelläksesi kaikki rivit, voit käyttää tätä koodia:
  while ($cur_row = $forum_db->fetch_assoc($result))
  {
    // $cur_row:n kanssa tehtävät toiminnot
  }

Teeman mukauttaminen

Miten voin sisällyttää tiedostoni *.tpl:n?

Käytä forum_include “file.ext” -korviketta sisällyttääksesi tiedoston <FORUM_ROOT>/include/user/file.ext:

<!-- forum_include "file.ext" -->

Yleiset tehtävät

Viimeisimmän 10:n viestin haku

<?php
 
header('Content-type: text/html; charset=utf-8');
 
define('RECENT_POSTS_SHOW_POST', true); // Aseta arvoksi false näyttääksesi vain aiheen
define('RECENT_POSTS_MAX_POST_LENGTH', 20); // Montako ensimmäistä merkkiä viesteistä näytetään
 
if (!defined('FORUM_ROOT'))
	define('FORUM_ROOT', './');
 
require FORUM_ROOT.'include/common.php';
 
// Haetaan 10 viimeisintä viestiä
$query = array(
	'SELECT'	=> 'p.id, p.message, t.subject',
	'FROM'		=> 'posts AS p',
	'JOINS'		=> array(
		array(
			'LEFT JOIN'		=> 'topics AS t',
			'ON'			=> 'p.topic_id = t.id'
		)
	),
	'ORDER BY'	=> 'p.posted DESC',
	'LIMIT'		=> '0,10'
);
 
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
 
$recent_posts = array();
while ($cur_post = $forum_db->fetch_assoc($result))
	$recent_posts[] = $cur_post;
 
// Tulostetaan viestit
if (!empty($recent_posts))
{
	?>
	<ul>
	<?php
	foreach($recent_posts as $cur_post)
	{
 
		echo '<li><a href="', forum_link($forum_url['post'], $cur_post['id']), '">', $cur_post['subject'], '</a>';
 
		if (RECENT_POSTS_SHOW_POST)
		{
			if (utf8_strlen($cur_post['message']) > RECENT_POSTS_MAX_POST_LENGTH)
				$cur_post['message'] = utf8_substr($cur_post['message'], 0, RECENT_POSTS_MAX_POST_LENGTH).'…';
 
			echo '<br />', "\n", $cur_post['message'];
		}
 
		echo '</li>';
	}
	?>
	</ul>
	<?php
}
 
?>

Kaikkien aiheiden näyttäminen

<?php
 
header('Content-type: text/html; charset=utf-8');
 
if (!defined('FORUM_ROOT'))
	define('FORUM_ROOT', './');
 
require FORUM_ROOT.'include/common.php';
 
// Haetaan kaikki aiheet
$query = array(
	'SELECT'	=> 't.id, subject, t.last_post, forum_id',
	'FROM'		=> 'topics AS t',
	'JOINS'		=>	array(
		array(
			'INNER JOIN'	=>	'forums AS f',
			'ON'		=>	'f.id = t.forum_id'
		)
	),
	'ORDER BY'	=> 'last_post DESC',
);
 
$result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
 
if (!$forum_user['is_guest'])
	$tracked_topics = get_tracked_topics();
 
?>
<ul>
<?php
 
while ($cur_topic = $forum_db->fetch_assoc($result))
{
	echo '<li>';
 
	if (!$forum_user['is_guest'] && $cur_topic['last_post'] > $forum_user['last_visit']
		&& (!isset($tracked_topics['topics'][$cur_topic['id']]) || $tracked_topics['topics'][$cur_topic['id']] < $cur_topic['last_post'])
		&& (!isset($tracked_topics['forums'][ $cur_topic['forum_id'] ]) || $tracked_topics['forums'][ $cur_topic['forum_id'] ] < $cur_topic['last_post']))
		echo '[lukematon]&nbsp;';
	else
		echo '[luettu]&nbsp;';
	echo '<a href="', forum_link($forum_url['topic'], $cur_topic['id']), '">', $cur_topic['subject'], '</a>';
 
	echo '</li>';
}
 
?>
</ul>

Aktiivisten aiheiden näyttäminen

<?php
 
header('Content-type: text/html; charset=utf-8');
 
define('FORUM_ROOT', './');
require FORUM_ROOT.'include/common.php';
 
require FORUM_ROOT.'lang/'.$forum_user['language'].'/index.php';
require FORUM_ROOT.'lang/'.$forum_user['language'].'/forum.php';
 
$topics_count = 5;
$query_active_topics= array(
    'SELECT'    => 't.id AS tid, t.poster, t.subject, t.posted AS has_posted, t.last_post, t.last_post_id, t.num_replies, t.num_views, t.closed, t.sticky,
 t.forum_id, t.last_poster',
    'FROM'        => 'topics AS t',
    'JOINS'        => array(
        array(
            'INNER JOIN'    => 'forums AS f',
            'ON'            => 'f.id=t.forum_id'
        ),
        array(
            'LEFT JOIN'     => 'forum_perms AS fp',
            'ON'            => '(fp.forum_id=f.id AND fp.group_id='.$forum_user['g_id'].')'
        )
    ),
    'ORDER BY'    => 't.last_post DESC',
    'LIMIT' => $topics_count
);
$result_active = $forum_db->query_build($query_active_topics) or error(__FILE__, __LINE__);
 
if ($forum_db->num_rows($result_active) == 0) {
 
?>
    <div class="main-content main-message">
        <p>Ei viestejä.</p>
    </div>
<?php
 
} else {
    require_once FORUM_ROOT.'lang/'.$forum_user['language'].'/forum.php';
 
?>    
    <div class="main-subhead">
            <p class="item-summary">
                <span>
                    <strong class="subject-title"><?php echo $lang_index['Topics']; ?></strong>
                    <strong class="info-replies"><?php echo $lang_forum['Replies']; ?></strong>
                    <strong class="info-views"><?php echo $lang_forum['Views']; ?></strong>
                    <strong class="info-lastpost"><?php echo $lang_index['last post']; ?></strong>
                </span>
            </p>                                                
        </div>
    <div class="main-content main-forum">                    
    <?php
 
        $item_num = 1;
 
        while ($cur_set = $forum_db->fetch_assoc($result_active))
        {
           // Start from scratch
            $item_subject = $item_body = $item_status = $item_nav = $item_title = array();
            $item_indicator = ''; 
 
            if (!$forum_user['is_guest'] && $forum_config['o_show_dot'] == '1' && $cur_set['has_posted'] > 0)
            {
                $item_title['posted'] = '<span class="posted-mark">'.$lang_forum['You posted indicator'].'</span>';
                $item_status['posted'] = 'posted';
            }
 
            $item_title['link'] = '<a href="'.forum_link($forum_url['post'], $cur_set['last_post_id']).'">'.forum_htmlencode($cur_set['subject']).'</a>';
 
            if (!empty($item_nav))
                $item_title['nav'] = '<span class="item-nav">'.sprintf($lang_forum['Topic navigation'], implode('&#160;&#160;', $item_nav)).'</span>';
 
            $item_body['subject']['title'] = '<h3 class="hn"><span class="item-num">'.forum_number_format(++$item_num).'</span> '.implode(' ', $item_title).'</h3> <em>, lähettäjä '.forum_htmlencode($cur_set['poster']).'</em>';
            if ($cur_set['sticky'] == '1')
            {
                $item_subject_status['sticky'] = $lang_forum['Sticky'];
                $item_status['sticky'] = 'sticky';
            }
 
            if ($cur_set['closed'] != '0')
            {
                $item_subject_status['closed'] = $lang_forum['Closed'];
                $item_status['closed'] = 'closed';
            }
            // Does this topic contain posts we haven't read? If so, tag it accordingly.
            if (!$forum_user['is_guest'] && $cur_set['last_post'] > $forum_user['last_visit'] && (!isset($tracked_topics['topics'][$cur_set['tid']]) || $tracked_topics['topics'][$cur_set['tid']] < $cur_set['last_post']) && (!isset($tracked_topics['forums'][$cur_set['forum_id']]) || $tracked_topics['forums'][$cur_set['forum_id']] < $cur_set['last_post']))
            {
                $item_status['new'] = 'new';
            }
 
            if (!empty($item_subject_status))
                $item_subject['status'] = '<span class="item-status">'.sprintf($lang_forum['Item status'], implode(' ', $item_subject_status)).'</span>';
 
            $item_body['subject']['desc'] = implode(' ', $item_subject);
            if (empty($item_status))
                $item_status['normal'] = 'normal';
 
            $item_style = (($item_num % 2 != 0) ? ' odd' : ' even').(($item_num == 1) ? ' main-first-item' : '').((!empty($item_status)) ? ' '.implode(' ', $item_status) : '');
 
            $item_body['info']['replies'] = '<li class="info-replies"><strong>'.forum_number_format($cur_set['num_replies']).'</strong> <span class="label">'.(($cur_set['num_replies'] == 1) ? $lang_forum['Reply'] : $lang_forum['Replies']).'</span></li>';
            $item_body['info']['views'] = '<li class="info-replies"><strong>'.forum_number_format($cur_set['num_views']).'</strong> <span class="label">'.(($cur_set['num_views'] == 1) ? $lang_forum['View'] : $lang_forum['Views']).'</span></li>';
            $item_body['info']['last_post'] = '<li class="info-lastpost"><span class="label">'.$lang_index['Last post'].'</span> <strong><a href="'.forum_link($forum_url['post'], $cur_set['last_post_id']).'">'.format_time($cur_set['last_post']).'</a></strong> <cite>'.sprintf($lang_index['Last poster'], forum_htmlencode($cur_set['last_poster'])).'</cite></li>';
 
            ?>
                <div class="main-item<?php echo $item_style ?>">
                    <span class="icon <?php echo implode(' ', $item_status) ?>"><!-- --></span>
                    <div class="item-subject">
                        <?php echo implode("\n\t\t\t\t", $item_body['subject'])."\n" ?>
                    </div>
                    <ul class="item-info">
                        <?php echo implode("\n\t\t\t\t", $item_body['info'])."\n" ?>
                    </ul>
              </div>
    <?php
 
       }
 
}

Login form outside the forum

<?php
 
// Define the path to the forum root
define('FORUM_ROOT', './forum/');
require FORUM_ROOT.'include/common.php';
 
// Where will we go after login?
$forum_page['redirect_url'] = 'http://your_site.com/forum/';
 
$forum_page['form_action'] = forum_link($forum_url['login']);
 
$forum_page['hidden_fields'] = array(
	'form_sent'		=> '<input type="hidden" name="form_sent" value="1" />',
	'redirect_url'	=> '<input type="hidden" name="redirect_url" value="'.forum_htmlencode($forum_page['redirect_url']).'" />',
	'csrf_token'	=> '<input type="hidden" name="csrf_token" value="'.generate_form_token($forum_page['form_action']).'" />'
);
 
?>
<form method="post" action="<?php echo $forum_page['form_action'] ?>">
	<?php echo implode("\n\t\t", $forum_page['hidden_fields'])."\n" ?>
 
	Username:
	<input type="text" id="fld1" name="req_username" value="" />
	<br />
 
	Password:
	<input type="password" id="fld2" name="req_password" value="" />
	<br />
 
	<input type="checkbox" id="fld3" name="save_pass" value="1" />
	<label for="fld3">Log me in automatically each time I visit.</label>
	<br />
 
	<input type="submit" name="login" value="Login" />
</form>

Personal Tools