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ánku
Formulář (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ů.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Doména .io v ohrožení: Co přinese předání Čagoských ostrovů?
10. října 2024 -
Windows App: Pracujte odkudkoliv, kdykoliv
3. listopadu 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024
Vopiat
Dub 21, 2010 v 17:55Hm bylo by dobrý napsat kam a jakej script patří
a né napsat toto bude v index.php a pak dlouho dlouho nic.Jsem z toho z maten a nevim kam to dát.Fakt dobrej popis „v azbuce bych to snáz pochopil“