![]() |
|||
|
|
|
Weblog v PHP – administrační
rozhraní V dnešním článku vám ukáži administrační
rozhraní weblogu, tedy stránku, na které může autor vložit nový článek
a mazat, případně upravovat již napsané články. Na začátku souboru index.php načteme všechny potřebné soubory, důležitý je především checklogin.php, který zkontroluje, zda je uživatel skutečně přihlášen. Podrobnosti týkající se přihlašování a souboru checklogin.php byly popsány v minulém článku. Protože ne všichni mají zapnuté cookies, musíme pomocí funkce ini_set() zapnout konfigurační direktivu session.use_trans_sid a zajistit tak přenos session identifikátoru prostřednictvím parametru v URL či skryté položky ve formuláři. require "checklogin.php"; // je
autor prihlasen ?
require "../db.php"; // pripoji k databazi require "../function.php"; // nacte soubor s dulezitymi funkcemi require "msg.php"; // chybove hlasky a zpravy ini_set('session.use_trans_sid', 1); // zajisti prenos session id Hned pod nadpisem vypíšeme informace o přihlášeném autorovi a odkaz umožňující snadné odhlášení. Proměnné $name a $email i způsob odhlášení byly popsány v předchozím článku. Při vypisování chybových hlášek je použit soubor msg.php, taktéž podrobněji popsán minule. Pod dalším nadpisem "Vložit článek" se pak objeví formulář umožňující přidání nového článku. <h2 class="heading">Weblog -
administrace</h2>
<?php // prihlaseny autor echo '<p class="authorinfo">' . $name . ' /' . $email . '/ '; echo '<a href="login.php?logout=yes">odhlásit</a></p>'; // chybove hlasky a zpravy if(IsSet($_GET['error'])) $error = $_GET['error']; if(IsSet($_GET['message'])) $message = $_GET['message']; if(IsSet($error) && IsSet($msg_error[$error])) echo '<p class="error">' . $msg_error[$error] . '</p>'; if(IsSet($message) && IsSet($msg_message[$message])) echo '<p class="message">' . $msg_message[$message] . '</p>'; ?> <h3 class="heading">Vložit článek</h3> <?php // vlozi formular pro pridani clanku require "form.php"; ?> Formulář pro přidání článkuFormulář (form.php) je celkem malý, od autora vyžadujeme pouze název (title) a text článku (article_text) a jeho datum vydání. Přesto je však vytvoření formuláře poněkud komplikovanější. K rozlišení toho, co bude skript provádět, použijeme proměnnou $action. Pokud bude obsahovat "post", článek se přidá, pokud "delete", článek se smaže. <form action="index.php"
method="post">
<input type="hidden" name="action" value="post"> <div class="form"> <div class="formrow"> <div class="formdesc">Nadpis</div><div class="forminput"><input type="text" name="title" size="30" value="<?php if(IsSet($_POST['title'])) echo StripSlashes($_POST['title']); ?>" maxlength="150"></div> </div> <div class="formrow"> <div class="formdesc">Text</div><div class="forminput"><textarea cols="20" rows="5" name="article_text"><?php if(IsSet($_POST['article_text'])) echo StripSlashes($_POST['article_text']); ?></textarea></div> </div> Protože chceme, aby datum vydání bylo standardně nastaveno na aktuální datum, musíme k vytvoření této části formuláře použít PHP. Do proměnných si nejprve uložíme informace o aktuálním datu a času převedené na celočíselnou hodnotu. Následně pomocí krátkých cyklů vytvoříme jednotlivé položky toho kterého SELECTu. Pomocí jednoduché podmínky nastavíme aktuální datum a čas na selected. <div
class="formrow">
<div class="formdesc">Vydat</div> <div class="forminput"> <select name="from_day" size="1" class="ultranarrow"> <?php // vlozi SELECTY a nastavi aktualni datum a cas na "selected" // dnesni datum $from_day = (int)Date("j"); $from_month = (int)Date("n"); $from_year = (int)Date("Y"); $from_hour = (int)Date("H"); $from_minute = (int)Date("i"); // den for($i=1;$i<=31;$i++) { echo '<option value="' . $i . '"'; if($from_day==$i) echo " selected"; echo ">" . $i . "</option>\n"; } ?> </select> <select name="from_month" size="1" class="wide"> <?php // mesic $month = Array(1=> "ledna", "února", "března", "dubna", "května", "června", "července", "srpna", "září", "října", "listopadu", "prosince"); for($i=1;$i<=12;$i++) { echo '<option value="' . $i . '"'; if($from_month==$i) echo " selected"; echo ">" . $month[$i] . "</option>\n"; } ?> </select> <select name="from_year" size="1" class="narrow"> <?php // rok for($i=2001;$i<=2004;$i++) { echo '<option value="' . $i . '"'; if($from_year==$i) echo " selected"; echo ">" . $i . "</option>\n"; } ?> </select> <select name="from_hour" size="1" class="ultranarrow"> <?php // hodina for($i=0;$i<=23;$i++) { echo '<option value="' . $i . '"'; if($from_hour==$i) echo " selected"; if(StrLen($i) == 1) $i = "0" . $i; echo ">" . $i . "</option>\n"; } ?> </select> <select name="from_minute" size="1" class="ultranarrow"> <?php // minuta for($i=0;$i<=59;$i++) { echo '<option value="' . $i . '"'; if($from_minute==$i) echo " selected"; if(StrLen($i) == 1) $i = "0" . $i; echo ">" . $i . "</option>\n"; } ?> </select> </div> </div> <div class="formrowsubmit"> <input type="submit" name="send" value="Vložit" class="submit"> </div> </div> </form> Výpis článků a stránkováníPod formulář vypíšeme pomocí funkce Select_Articles() již napsané články, které bude autor moci mazat či upravovat. <h3 class="heading">Administrace
článků</h3>
<?php // zobrazi clanky echo Select_Articles(); MySQL_Close(); ?> V proměnné $limit nastavíme počet článků na stránce, v proměnné $page_number je pak číslo stránky, která se má zobrazit. $limit = 10; // pocet clanku na
strance
$page_number = IsSet($_GET['page_number']) ? $_GET['page_number'] : 1; // stranka, ktera se zobrazi Na základě proměnných $user_id a $user_type, které byly popsány minule, sestavíme podmínku pro výběr článků. Vybrané články zpracujeme funkcí Article(), jež byla popsána v druhém článku. Ke každému článku přidáme odkazy umožňující daný článek smazat či upravit. Na závěr pomocí funkce Page_Links() přidáme ještě odkazy na stránky s dalšími články. // vybere clanky
function Select_Articles() { global $page_number, $limit, $user_id, $user_type; // na zaklade typu autora sestavi podminku (A = admin - ma prava ke vsem clankum, U = autor - ma prava pouze k vlastnim clankum) if($user_type=="A") $sql = ''; if($user_type=="U") $sql = "AND author = $user_id"; $start = ($page_number-1)*$limit; // prvni clanek, ktery se zobrazi $query = @MySQL_Query("SELECT article.id AS article_id, title, message, author, publish_date, name, email FROM article, author WHERE author = author.id $sql ORDER BY publish_date DESC LIMIT $start,$limit") or Weblog_Error(2); if(MySQL_Num_Rows($query)!=0) { $article = ''; while($result = MySQL_Fetch_Array($query)) { $article .= Article($result, false); // ke kazdemu clanku prida odkazy "Smazat" a "Upravit" $article .= '<div class="articlemenu">'; $article .= '<a href="update.php?article_id=' . $result['article_id'] . '">Upravit</a>'; $article .= '<a href="index.php?action=delete&article_id=' . $result['article_id'] . '">Smazat</a>'; $article .= "</div>\n"; } $article .= Page_Links(); // na zaver se vlozi odkazy na dalsi stranky } else { $article = '<p class="message">Ještě jste nenapsal žádný článek.</p>'; } return $article; } Abychom mohli vypsat odkazy na další stránky, musíme nejprve zjistit počet článků, ke kterým má autor práva a následně vypočítat počet stran, na kterých se články zobrazí. Aby to nebylo příliš jednoduché, pokusíme se vypsat vždy pouze 10 dalších odkazů, tedy 5 před a 5 za právě zobrazenou stránkou. Ne vždy to však jde tak jednoduše, po prvním výpočtu se totiž do proměnných $start_page a $end_page často vloží záporné či příliš velké hodnoty. Pomocí několika dalších podmínek a výpočtů však docílíme toho, že se v proměnných $start_page a $end_page objeví korektní hodnoty. Můžeme tedy vytvořit odkazy na stránky v intervalu $start_page - $end_page, na první a poslední stránku a také odkazy vpřed a vzad posouvající uživatele vždy jen o jednu stránku. // vytvori odkazy na jednotlive
stranky s clanky
function Page_Links() { global $user_type, $user_id, $limit, $page_number; // Admin muze pracovat se vsemi clanky, aUtor pouze s vlastnimi if($user_type=="A") $sql = ''; if($user_type=="U") $sql = "WHERE author = $user_id"; $query = @MySQL_Query("SELECT count(id) FROM article $sql") or Weblog_Error(2); $result = MySQL_Fetch_Array($query); $pages = Ceil($result['count(id)']/$limit); // pocet stranek $link = '<div class="articlemenu">Zobrazit stranu: '; // vypocet pocatecni a koncove stranky (snazime se vypsat vzdy 10 odkazu) $start_page = $page_number-5; $end_page = $page_number+5; // pri prvnim vypoctu mohly byt do promennych vlozeny nekorektni (zaporne nebo prilis velke) hodnoty proto musime provest dodatecnou kontrolu if($start_page < 1) $end_page += Abs($start_page) + 1; if($end_page > $pages) { $start_page = $start_page - ($end_page-$pages); $end_page = $pages; } if($start_page < 1) $start_page = 1; // odkazy if($start_page > 1) $link .= '<a href="index.php?page_number=1">' . 1 . '</a> ... '; // odkaz na prvni stranku for($x = $start_page;$x <= $end_page;$x++) $link .= '<a href="index.php?page_number=' . $x . '">' . $x . '</a> '; // odkazy na sranky v intervalu $start_page - $end_page if($end_page < $pages) $link .= '... <a href="index.php?page_number=' . $pages . '">' . $pages . '</a>'; // odkaz na posledni stranku if($page_number > 1) $link .= ' <a href="index.php?page_number=' . ($page_number-1) . '"><<</a>'; // odkaz vpred if($page_number < $pages) $link .= ' <a href="index.php?page_number=' . ($page_number+1) . '">>></a>'; // odkaz vzad $link .= '</div>'; return $link; } Hotovou aplikaci si můžete prohlédnout a vyzkoušet. V příštím článku, který tuto sérii prozatím ukončí, bude popsán způsob přidávání, mazání a úpravy článků. |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
| © Zoner software, s.r.o., všechna práva vyhrazena, tento server dodržuje právní předpisy o ochraně osobních údajů. |