Temat: Miniportal
Część 1: Dodawanie strony portalu
Na stronie głównej będzie wyświetlana wiadomość oraz newsy-posty z wybranego forum.
Krok 1: Zmień nazwę index.php
Zmień nazwę index.php na forum.php.
Krok 2: Stwórz nowy index.php
Stwórz nowy index.php bazując na poniższym kodzie.
<?php
define('PUN_ROOT', './');
define('PUN_QUIET_VISIT', 1);
require PUN_ROOT.'include/common.php';
$page_title = pun_htmlspecialchars($pun_config['o_board_title']);
define('PUN_ALLOW_INDEX', 1);
require PUN_ROOT.'header.php';
require PUN_ROOT.'include/parser.php';
function pun_news($fid='', $show=15, $truncate=1)
{
global $lang_common, $db, $pun_config, $db_prefix;
$max_subject_length = 30;
$show_max_topics = 50;
$fid = intval($fid);
$order_by = 't.posted';
$forum_sql = '';
// Was a forum ID supplied?
if ( $fid ) $forum_sql = 'f.id='.$fid.' AND ';
$show = intval($show);
if ($show < 1 || $show > $show_max_topics)
$show = 15;
$saveddate="";
// Fetch $show topics
$result = $db->query('SELECT t.id, t.poster, t.subject, t.posted, t.last_post, f.id AS fid, f.forum_name FROM '.$db_prefix.'topics AS t INNER JOIN '.$db_prefix.'forums AS f ON t.forum_id=f.id WHERE f.id='.$fid.' AND t.moved_to IS NULL ORDER BY '.$order_by.' DESC') or error('Unable to fetch topic list', __FILE__, __LINE__, $db->error());
$show_count = 0;
if ( !$db->num_rows($result) ) return $output;
while ( ($show_count < $show) && ($cur_topic = $db->fetch_assoc($result)) ) {
$temp = '';
if ($pun_config['o_censoring'] == '1')
$cur_topic['subject'] = censor_words($cur_topic['subject']);
if (pun_strlen($cur_topic['subject']) > $max_subject_length)
$subject_truncated = trim(substr($cur_topic['subject'], 0, ($max_subject_length-5))).' ...';
else
$subject_truncated = $cur_topic['subject'];
$newsheading = '<a href="'.$pun_config['o_base_url'].'/viewtopic.php?id='.$cur_topic['id'].'&action=new" title="'.pun_htmlspecialchars($cur_topic['subject']).'">'.pun_htmlspecialchars($subject_truncated).'</a> - <em>Posted by '.$cur_topic['poster'].' at '.date('h:i A', $cur_topic['posted']).'</em><br>';
// Group posts by date
$thisdate = date('l, d F Y', $cur_topic['posted']);
if ($thisdate != $saveddate)
{
if ($saveddate)
{
$temp .= "</div></div>";
}
$temp .= '<div class="block"><h2><span>'.$thisdate.'</span></h2><div class="box"><div class="inbox"><p>';
$saveddate = $thisdate;
}
else {
$temp .= '<div class="inbox"><p>';
}
$temp .= $newsheading.'</p><p>';
$id = $cur_topic['id'];
$msg = $db->query('SELECT id, poster, poster_id, poster_ip, poster_email, message, posted, edited, edited_by FROM '.$db_prefix.'posts WHERE topic_id='.$id.' LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
if ( !$db->num_rows($msg) ) continue;
$cur_post = $db->fetch_assoc($msg);
// Display first paragraph only (comment out next four lines to turn off)
if ($truncate == 1)
{
$paragraph = preg_split("/s*n+/", $cur_post['message']);
if (isset($paragraph[1])) {
$cur_post['message'] = $paragraph[0] . "...";
}
}
$cur_post['message'] = parse_message($cur_post['message'], 0);
$temp .= $cur_post['message'];
$temp .= "</p></div>";
if (isset($output)) {
$output .= $temp;
}
else {
$output = $temp;
}
++$show_count;
} // end of while
$output .= "</div></div>";
return $output;
}
?>
<div class="block">
<h2><span>Welcome</span></h2>
<div class="box">
<div class="inbox">
<p>
Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Praesent augue. Nulla facilisi. Fusce bibendum accumsan erat. Quisque sollicitudin mattis neque. Sed dapibus. Integer a lectus eu sem consequat pellentesque. Morbi rhoncus nulla. Duis adipiscing interdum velit. Fusce ante. Ut vitae enim sit amet magna sodales hendrerit. In sed tortor at sapien convallis eleifend. Proin mauris. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Ut metus. Cras ac arcu et arcu porttitor blandit. Nam vitae lectus eget mauris sollicitudin placerat. Suspendisse vestibulum. Donec varius libero. Duis velit tellus, euismod vitae, consequat sed, consectetuer ut, purus.
</p>
<p>
Praesent viverra venenatis magna. Etiam in dolor. Ut in justo ac nibh malesuada cursus. Duis urna arcu, aliquam vitae, consequat nec, tincidunt non, mi. Nunc lobortis. Nunc pharetra. Sed porttitor. Maecenas turpis tortor, blandit nec, dignissim in, porttitor eu, odio. In hac habitasse platea dictumst. Suspendisse augue odio, ornare a, elementum ac, tincidunt varius, orci. Nulla libero ante, hendrerit ac, consectetuer eu, sollicitudin et, eros. Duis sapien. Suspendisse ornare enim sit amet dui. Donec ullamcorper diam.
</p>
</div>
</div>
</div>
<?php
echo pun_news(1, 5, 0);
require PUN_ROOT.'footer.php';W wiadomości powitalnej (welcome block) możesz umieścić dowolny kod html.
?pun_news(1, 5, 0)? jest generatorem newsów o następującej składni: pun_news(id forum, liczba newsów, okrojone newsy);
Krok 3: Dodaj forums.php do linków nawigacji
Dodaj forums.php do menu:
otwórz functions.php
znajdź (linia 235):
$links[] = '<li id="navindex"><a href="index.php">'.$lang_common['Index'].'</a>';pod tym dodaj:
$links[] = '<li id="navforum"><a href="forum.php">'.$lang_common['Forum'].'</a>';Krok 4: Zmiana linków forum
Zmień linki z index na index forum.
Otwórz viewforum.php oraz viewtopic.php i zamień każdy (minimum 2 powinny być) index.php na forum.php.
Już masz pseudoportal z systemem newsów ![]()
Część 2: Dodawanie bloków
Jak dodać boczne bloki (nie musisz wykonywać pierwszej części aby je dodać)
Krok 1: Edycja main.tpl
Zamień cały main.tpl (znajdujący się w katalogu includes/templates) na:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html dir="<pun_content_direction>">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<pun_char_encoding>" />
<pun_head>
<style type="text/css">
#left {
width: 120px;
float: left;
}
#main {
margin-left: 130px;
}
#container {
width: 100%;
float: right;
margin-left: -120px;
}
</style>
</head>
<body>
<div id="punwrap">
<div id="pun<pun_page>" class="pun">
<div id="brdheader" class="block">
<div class="box">
<div id="brdtitle" class="inbox">
<pun_title>
<pun_desc>
</div>
<pun_navlinks>
<pun_status>
</div>
</div>
<div id="container">
<div id="main">
<pun_announcement>
<pun_main>
</div>
</div>
<div id="left">
<div class="block">
<h2><span>Menu</span></h2>
<div class="box">
<pun_sidelinks>
</div>
</div>
<div class="block">
<h2 class="block2"><span>More Links</span></h2>
<div class="box">
<div class="inbox">
<ul>
<li><a href="index.php">Link 1</a></li>
<li><a href="index.php">Link 2</a></li>
<li><a href="index.php">Link 3</a></li>
<li><a href="index.php">Link 4</a></li>
</ul>
</div>
</div>
</div>
</div>
<div class="clearer"></div>
<pun_footer>
</div>
</div>
</body>
</html>Krok 2: Otwórz header.php
Otwórz header.php
Znajdź:
// START SUBST - <pun_navlinks>
$tpl_main = str_replace('<pun_navlinks>','<div id="brdmenu" class="inbox">'."nttt". generate_navlinks()."ntt".'</div>', $tpl_main);
// END SUBST - <pun_navlinks>Poniżej dodaj:
// START SUBST - <pun_sidelinks>
$tpl_main = str_replace('<pun_sidelinks>','<div class="inbox">'."nttt". generate_navlinks()."ntt".'</div>', $tpl_main);
// END SUBST - <pun_sidelinks>Po tych krokach na Twoim forum zostanie wygenerowana lista dwóch bloków (jeden z linakmi nawigacji a drugi z dodatkowymi).
Dodatkowe Bloki
Poniżej znajdują się poradniki jak dodać nowe bloki. Aby wykonać te czynności musisz ukończyć część 2!
Kto jest Online
Krok 1: otwórz header.php
Otwórz header.php
Znajdź kod który dodałeś wcześniej:
// START SUBST - <pun_sidelinks>
$tpl_main = str_replace('<pun_sidelinks>','<div class="inbox">'."nttt". generate_navlinks()."ntt".'</div>', $tpl_main);
// END SUBST - <pun_sidelinks>Poniżej dodaj:
// START SUBST - <pun_online>
$tpl_main = str_replace('<pun_online>','<div class="inbox">'."nttt". generate_whosonline()."ntt".'</div>', $tpl_main);
// END SUBST - <pun_online>Krok 2: dodaj do functions.php
Dodaj to do functions.php (najlepiej na końcu)
//
// Generate the whos online block
//
function generate_whosonline()
{
global $pun_config, $lang_common, $pun_user, $db;
if ($pun_user['is_guest'])
{
require PUN_ROOT.'lang/'.$pun_user['language'].'/login.php';
return 'Witaj Go?ciu!<br />
Zaloguj się poniżej...<br />
<form id="login" method="post" action="login.php?action=in" onsubmit="return process_form(this)">
<input type="hidden" name="form_sent" value="1" />
<input type="hidden" name="redirect_url" value="index.php" />
<label><strong>Login</strong><br /><input type="text" name="req_username" size="13" maxlength="25" tabindex="1" /><br /></label>
<label><strong>Hasło</strong><br /><input type="password" name="req_password" size="13" maxlength="16" tabindex="2" /><br /></label>
<p><a href="register.php" tabindex="4">'.$lang_login['Not registered'].'</a><br />
<a href="login.php?action=forget" tabindex="5">'.$lang_login['Forgotten pass'].'</a></p>
<p><input type="submit" name="login" value="Login" tabindex="3" /></p>
</form>';
}
else
{
require PUN_ROOT.'lang/'.$pun_user['language'].'/index.php';
$result = $db->query('SELECT COUNT(id)-1 FROM '.$db->prefix.'users') or error('Unable to fetch total user count', __FILE__, __LINE__, $db->error());
$stats['total_users'] = $db->result($result);
$result = $db->query('SELECT id, username FROM '.$db->prefix.'users ORDER BY registered DESC LIMIT 1') or error('Unable to fetch newest registered user', __FILE__, __LINE__, $db->error());
$stats['last_user'] = $db->fetch_assoc($result);
$result = $db->query('SELECT SUM(num_topics), SUM(num_posts) FROM '.$db->prefix.'forums') or error('Unable to fetch topic/post count', __FILE__, __LINE__, $db->error());
list($stats['total_topics'], $stats['total_posts']) = $db->fetch_row($result);
if ($pun_config['o_users_online'] == '1')
{
// Fetch users online info and generate strings for output
$num_guests = 0;
$users = array();
$online = array();
$result = $db->query('SELECT user_id, ident FROM '.$db->prefix.'online WHERE idle=0 ORDER BY ident', true) or error('Unable to fetch online list', __FILE__, __LINE__, $db->error());
while ($pun_user_online = $db->fetch_assoc($result))
{
if ($pun_user_online['user_id'] > 1)
$users[] = "\n\t\t\t\t".'<a href="profile.php?id='.$pun_user_online['user_id'].'">'.pun_htmlspecialchars($pun_user_online['ident']).'</a><br />';
else
++$num_guests;
}
$num_users = count($users);
$online[] = "\t\t\t\t".$lang_index['Users online'].': <strong>'.$num_users.'</strong><br />'."\n\t\t\t\t".$lang_index['Guests online'].': <strong>'.$num_guests.'</strong>'."\n\t\t\t"."\n";
if ($num_users > 0 && $num_users < 10)
$online[] = "\t\t\t"."\n\t\t\t\t".'<strong>'.$lang_index['Online'].': </strong>'."\t\t\t\t".implode($users)."\n";
else
$online[] = "\t\t\t".'<div class="clearer"></div>'."\n";
}
return 'Witaj <strong>'.$pun_user['username'].'</strong><br /><br />
'.implode($online,'').'<br />
Użytkowników: <strong>'. $stats['total_users'].'</strong><br />
W?tków: <strong>'.$stats['total_topics'].'</strong><br />
Postów: <strong>'.$stats['total_posts'].'</strong><br />';
}
}Krok 3: otwórz main.tpl
Wewnątrz kodu:
<div id="left">
.....[tu!]
</div>W main.tpl dodaj
<div class="block">
<h2 class="block2"><span>Whos Online?</span></h2>
<div class="box">
<pun_online>
</div>
</div>Musisz także zwiększyć szerokość bloków w main.tpl(na samej górze):
<style type="text/css">
#left {
width: 140px;
float: left;
}
#main {
margin-left: 150px;
}
#container {
width: 100%;
float: right;
margin-left: -140px;
}
</style>Blok będzie wyglądał mniej więcej tak:
Witaj Nick
Zarejestrowanych online: 1
Gości online: 0Online:
ConnorhdUżytkowników: 1
Wątków: 3
Postów: 3
Treść nowej podstrony
<?php
define('PUN_ROOT', './');
define('PUN_QUIET_VISIT', 1);
require PUN_ROOT.'include/common.php';
//Set the page title here
$page_title = pun_htmlspecialchars($pun_config['o_board_title']) . ' / New page 1';
define('PUN_ALLOW_INDEX', 1);
require PUN_ROOT.'header.php';
require PUN_ROOT.'include/parser.php';
?>
<div class="block">
<h2><span>Tytuł</span></h2>
<div class="box">
<div class="inbox">
(Treść lub kod html, php itd.)
</div>
</div>
</div>
<?php
require PUN_ROOT.'footer.php';Mateusz Wojnarowski

