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:
- Nimeä tiedosto
.htaccess.dist
keskustelualueesi päähakemistossa nimellä.htaccess
. - Siirry kohtaan Ylläpito ⇒ Asetukset (
/admin/settings.php?section=setup
), etsiURL-kaava
-kohta. - 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] '; else echo '[luettu] '; 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('  ', $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>