redakcni system
redakcni system
22. května 2001, 00.00 | Dnes pokračujeme v seriálu o Redakčním Systému. V tomto díle si probereme vytváření rubrik, přidávání
a schvalování krátkých zpráv.
Dnes se po delší odmlce budeme opětovně věnovat vytváření redakčního systému.
Doufám, že Vaše trpělivost vydržela a budete seriál nadále sledovat. V dnešním
pokračování budeme probírat skripty zabývající se editací a správou rubrik, dále
pak skripty, starající se o vkládání a správu krátkých zpráv.
O správu rubrik se nám budou starat celkem tři skripty: rubriky.php,
add_rubrika.php a edit_rubrika.php. První bude zobrazovat seznam všech rubrik
a informace jako počet článků v rubrice. Také se bude starat o výmaz rubriky. Druhý
bude sloužit k přidání nové rubriky a třetí o editaci názvu existujících rubrik.
rubriky.php (/admin/rubriky.php)
Skript nám vytvoří stránku se seznamem rubrik. U každé bude zároveň uveden i počet
článků, které rubrika obsahuje. Dále pak u každé rubriky bude zobrazeno tlačítko pro
editaci a smazání. Stejně jako u autorů, nebude možno smazat rubriku, ve které se
již nachází nějaký článek. Pokud ji tedy budete chtít vymazat, budete muset nejdříve
z rubriky přesunout všechny články do jiných rubrik. Pro selectování seznamu rubrik
a počtů článků, které obsahují použijeme opětovně můj "oblíbený" LEFT JOIN:
@$sql = mysql_query("SELECT R.*,count(C.id) FROM rubriky R LEFT JOIN clanky C
ON R.id = C.id_rubrika GROUP BY R.id ORDER BY rubrika");
Celý skript bude vypadat následovně:
<?
if (!isset($PHP_AUTH_USER)):
echo "Neautorizovaný přístup";
exit;
endif;
include "../conn.php";
include "../function.php";
auth();
if (isset($did) && $did > 0)
{
@$sql = mysql_query("DELETE FROM rubriky WHERE id = $did");
$generuj = "rubriky";
include "./generuj.php";
}
head();
?>
<SCRIPT LANGUAGE="JavaScript">
<!--
function user(zdroj) {
aPopUp = window.open(zdroj,'Detail',
'toolbar=no,location=no,directories=no,status=no,scrollbars=yes,
resizable=no,copyhistory=no,width=400,height=190');
}
// -->
</SCRIPT>
<h3>Rubriky</h3>
<P><A HREF="javascript:user('add_rubrika.php')">Přidat rubriku</A></P>
<?
@$sql = mysql_query("SELECT R.*,count(C.id) FROM rubriky R LEFT JOIN clanky C
ON R.id = C.id_rubrika GROUP BY R.id ORDER BY rubrika");
if (mysql_num_rows($sql) == 0)
{
echo "<h3><b>Není definována žádná rubrika !!!</b></h3>\n";
}
else
{
?>
<table border=0 cellspacing=0 cellpadding=1>
<tr bgcolor=#C0C0C0>
<td bgcolor=#C0C0C0><b> Rubrika</b></td>
<td bgcolor=#C0C0C0 align="center"><b> Článků </b></td>
<td bgcolor=#C0C0C0 align="center"><b> Editovat </b></td>
<td bgcolor=#C0C0C0 align="center"><b> Smazat </b></td>
</tr>
<?
$i = 0;
while ($row = mysql_fetch_row($sql))
{
if ($i%2==0) $bgcolor=''; else $bgcolor=" bgcolor=#C0C0C0";
?>
<tr<? echo $bgcolor; ?>>
<td<? echo $bgcolor; ?>> <b><? echo $row[1];?></b></td>
<td<? echo $bgcolor; ?> align="center"> <? echo $row[2];?></td>
<td<? echo $bgcolor; ?> align="center">
<INPUT TYPE="BUTTON" VALUE="Editovat"
onclick="user('edit_rubrika.php?id=<? echo $row[0]; ?>')">
</td>
<?
// Pokud je v rubrice článek, nelze ji smazat !!!
if ($row[2] > 0)
{
?>
<td<? echo $bgcolor; ?> align="center"> <B>nelze</B> </td>
<?
}
// jinak vložíme formulář k vymazíní rubriky
else
{
?>
<form method="get" action="rubriky.php"><input type="hidden"
name="did" value="<? echo $row[0]; ?>">
<td<? echo $bgcolor; ?> align="center"> <input
type="submit" value="Smazat"
onclick="return confirm('Opravdu chceš rubriku smazat ?')"> </td>
</form>
<?
}
?>
</tr>
<?
// zvýšíme proměnnou i o 1.
$i++;
}
// uvolníme výsledek
mysql_free_result($sql);
echo "</TABLE>\n";
}
?>
<?
foot();
mysql_close($conn);
?>
|
|
add_rubrika.php (/admin/add_rubrika.php)
Tento skript bude volán do popup okna, ve kterém zobrazí formulář pro zadání jména
nové rubriky. Po jeho zadání a odeslání formuláře skript ověří, zda již zadané jméno
rubriky není shodné s jinou rubrikou. Pokud bude vše v pořádku, uloží se nový záznam
do tabulky rubriky. Poté se ještě vygenerují soubory na disk - tyto soubory budou
použity v pozdějších skriptech. Pokud nebude zadáno jméno rubriky nebo bude zadáno
jméno již existující rubriky, zobrazí se opětovně formulář s případnou chybovou
hláškou. Zde je citace php kódu:
<?
// pokud nenproběhla autorizace, ukončíme skript
if (!isset($PHP_AUTH_USER))
{
echo "Neautorizovaný přístup";
exit;
}
include "../function.php";
include "../conn.php";
// autorizace
auth();
$error = ''; // proměnná obsahuje případné chybové hlášení
if ($rubrika != "")
{
@$sql = mysql_query("SELECT * FROM rubriky WHERE rubrika LIKE '$rubrika'");
if (mysql_num_rows($sql) > 0)
{
$rubrika = '';
$error = "<DIV ALIGN=CENTER>Rubrika již existuje !!!</DIV>\n";
}
else
{
// přidáme rubriku
@$sql = mysql_query("INSERT INTO rubriky VALUES (null, '$rubrika')");
$generuj = "rubriky";
include "./generuj.php";
mysql_close($conn);
zavri();
exit;
}
}
// databázi již nebudeme potřebovat
mysql_close($conn);
head()
?
>
<H4 ALIGN="CENTER"><B>Přidání rubriky</B></H4>
<? echo $error; ?>
<FORM METHOD="POST" ACTION="add_rubrika.php">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" ALIGN="CENTER">
<TR>
<TD>Rubrika: * </TD>
<TD><INPUT TYPE="TEXT" NAME="rubrika" MAXLENGTH="50" SIZE="40"
VALUE="<? echo $rubrika; ?>"></TD>
</TR>
<TR>
<TD COLSPAN="2" ALIGN="CENTER">
<INPUT TYPE="SUBMIT" VALUE="Přidat">
<? butonek(); ?>
</TD>
</TR>
</TABLE>
</FORM>
<?
foot();
?>
|
|
edit_rubrika.php (/admin/edit_rubrika.php)
Třetí skript se bude starat o editaci jména stávajících rubrik. Stejně jako
předchozí se bude otevírat do stejného popup okna, ve kterém se zobrazí formulář
s původním názvem rubriky, kde jej lze editovat. Po odeslání skript ověří, zda
zadané jméno v tabulce rubrik existuje. Pokud ne provede se změna. Pokud existuje,
zobrazí se formulář opětovně. Po případném provedení změny se přegenerují soubory
na disku.
<?
// pokud nenproběhla autorizace, ukončíme skript
if (!isset($PHP_AUTH_USER))
{
echo "Neautorizovaný přístup";
exit;
}
include "../function.php";
if (!isset($id))
{
zavri();
exit;
}
include "../conn.php";
// autorizace
auth();
$error = ''; // proměnná obsahuje případné chybové hlášení
if ($rubrika != "")
{
@$sql = mysql_query("SELECT * FROM rubriky WHERE rubrika
LIKE '$rubrika' AND id <> $id");
if (mysql_num_rows($sql) > 0)
{
$rubrika = '';
$error = "
<DIV ALIGN=CENTER>Rubrika již existuje !!!</DIV>\n";
}
else
{
// updatujem rubriku
@$sql = mysql_query("UPDATE rubriky SET rubrika='$rubrika' WHERE id = $id");
$generuj = "rubriky";
include "./generuj.php";
mysql_close($conn);
zavri();
exit;
}
}
@$sql = mysql_query("SELECT * FROM rubriky WHERE id = $id");
if (mysql_num_rows($sql) == 0)
{
zavri();
exit;
}
@$row = mysql_fetch_row($sql);
// databázi již nebudeme potřebovat
mysql_close($conn);
head()
?>
<H4 ALIGN="CENTER"><B>Editace rubriky</B></H4>
<? echo $error; ?>
<FORM METHOD="POST" ACTION="edit_rubrika.php">
<INPUT TYPE="HIDDEN" NAME="id" VALUE="<? echo $id; ?>">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" ALIGN="CENTER">
<TR>
<TD>Rubrika: * </TD>
<TD><INPUT TYPE="TEXT" NAME="rubrika" MAXLENGTH="50" SIZE="40"
VALUE="<? echo $row[1]; ?>"></TD>
</TR>
<TR>
<TD COLSPAN="2" ALIGN="CENTER">
<INPUT TYPE="SUBMIT" VALUE="Editovat">
<? butonek(); ?>
</TD>
</TR>
</TABLE>
</FORM>
<?
foot();
?>
|
|
Pro vygenerování souborů na disk budeme muset provést úpravu skriptu generuj.php,
do kterého přidáme níže uvedenou pasáž.
if ($generuj == "rubriky")
{
// vybereme všechny rubriky a seřadíme výsledek podle jejich názvu.
@$sql = mysql_query("SELECT * FROM rubriky ORDER BY rubrika");
// vyprázníme pomocné proměnné
$data1 = '';
$data2 = '';
// pro každý záznam v databázi vložíme do pomocných proměnných jeden řádek
while ($row = mysql_fetch_row($sql))
{
$data1 .= "<a href=\"index.php?rubrika=".$row[0]."\">".$row[1]."</a><br>\n";
$data2 .= "<option value=\"".$row[0]."\"";
$data2 .= '<? if ($rubrika == $row[0]) echo " SELECTED"; ?>';
$data2 .= ">".$row[1]."</option>\n";
}
// vygenerujeme první soubor
@$f = fopen("../inc/rubriky","w");
fputs($f,$data1);
fclose($f);
// vygenerujeme druhý soubor
@$f = fopen("../inc/rubriky_admin","w");
fputs($f,$data2);
fclose($f);
}
|
|
Krátké zprávy
Krátké zprávy (novinky, bleskovky, kraťasy ap.) má možnost vkládat kterýkoli
uživatel redakčního systému, jejich schvalování je však již jen na
redaktorech/korektorech a šéfredaktorovi. O tyto činnosti se budou starat dva
skripty. Jeden bude určen k přidávání novinek a druhý k jejich administraci
(schvalování a mazání). Pro jednoduchost nebude možno krátké zprávy editovat.
Přidávání kraťasů bude mít na starost skript addnovinka.php a administraci
skript kz.php. Po kliknutí na odkaz Přidat Novinku v navigačním menu se
zobrazí forulář, do nějž budete mít možnost zadat text zprávy. Délku zprávy omezíme,
řekněme na 500 znaků. Po odeslání se novinka vloží do databáze kde čeká na schválení.
Jakmile bude některá z přidaných krátkých zpráv schválena, vygeneruje se na disk
soubor, který se dále bude includovat do dalších skriptů. Do souboru se bude
generovat jen několik posledních krátkých zpráv (v našem příkladu to bude 5,
ale vše záleží čistě na Vás).
addnovinka.php (/admin/addnovinka.php)
Tento skript je dostupný všem členům systému. Skript zobrazí formulář pro vložení
krátké zprávy. Po té co bude zpráva vložena a odešle formulář, skript vloží do
databáze text zprávy. Ta nyní čeká na schválení korektorem. Kód skriptu je
následující:
<?
// pokud nenproběhla autorizace, ukončíme skript
if (!isset($PHP_AUTH_USER))
{
echo "Neautorizovaný přístup";
exit;
}
include "../function.php";
include "../conn.php";
// autorizace
auth();
$error = ''; // proměnná obsahuje případné chybové hlášení
if ($kz != "")
{
// přidáme krátkou zprávu
$cas = time();
@$sql = mysql_query("INSERT INTO novinky VALUES (null, '$kz', $cas, 'n')");
mysql_close($conn);
head();
echo "<H4 ALIGN=\"CENTER\"><B>Zpráva vložena</B></H4>";
}
else
{
head();
?>
<H4 ALIGN="CENTER"><B>Přidání krátké zprávy</B></H4>
<FORM METHOD="POST" ACTION="addnovinka.php">
<TABLE BORDER="0" CELLSPACING="0" CELLPADDING="0" ALIGN="CENTER">
<TR>
<TD>Novinka: * </TD>
<TD><INPUT TYPE="TEXT" NAME="kz" MAXLENGTH="500" SIZE="40" VALUE=""></TD>
</TR>
<TR>
<TD COLSPAN="2" ALIGN="CENTER">
<INPUT TYPE="SUBMIT" VALUE="Přidat">
</TD>
</TR>
</TABLE>
</FORM>
<?
}
foot();
?>
|
|
kz.php (/admin/kz.php)
Tento skript nám zobrazí seznam všech vložených, ale neschválených krátkých zpráv.
U každé položky bude plné znění zprávy a tlačítko schválit a vymazat. Pro jednoduchost
skriptů jsem znemožnil editování zprávy, ale myslím si že v tuto chvíli je to minimální
nedostatek a každý si jej dle potřeby dopíše. Zde je výpis php kódu:
<?
// pokud nenproběhla autorizace, ukončíme skript
if (!isset($PHP_AUTH_USER))
{
echo "Neautorizovaný přístup";
exit;
}
include "../function.php";
include "../conn.php";
// autorizace
auth();
if ($kz != "")
{
// schválíme novinku
@$sql = mysql_query("UPDATE novinky SET stav = 'a' WHERE id = $kz");
// generujeme soubor na disk
$generuj = "kz";
include "./generuj.php";
mysql_close($conn);
head();
echo "<H4 ALIGN=\"CENTER\"><B>Zpráva potvrzena</B></H4>";
}
elseif ($del != "")
{
// mažeme novinku
@$sql = mysql_query("DELETE FROM novinky WHERE id = $del");
mysql_close($conn);
head();
echo "<H4 ALIGN=\"CENTER\"><B>Zpráva smazána</B></H4>";
}
else
{
head();
?>
<H4 ALIGN="CENTER"><B>Schválení krátké zprávy</B></H4>
<?
// select neschválených zpráv
@$sql = mysql_query("SELECT * FROM novinky WHERE stav = 'n'
ORDER BY datum DESC");
@$pocet = mysql_num_rows($sql);
// pokud nejsou žádné neschválené zprávy
if ($pocet <= 0)
{
?>
<H4 ALIGN="CENTER"><B>Žádné krátké zprávy</B></H4>
<?
}
// pokud nějaké existují, zobrazíme jejich seznam
else
{
?>
<table border=0 cellspacing=0 cellpadding=1>
<tr bgcolor=#C0C0C0>
<td bgcolor=#C0C0C0><b> Zpráva</b></td>
<td bgcolor=#C0C0C0 align="center"><b> Schválit </b></td>
<td bgcolor=#C0C0C0 align="center"><b> Smazat </b></td>
</tr>
<?
$i = 0;
while ($row = mysql_fetch_row($sql))
{
if ($i%2==0) $bgcolor=''; else $bgcolor=" bgcolor=#C0C0C0";
?>
<tr<? echo $bgcolor; ?>>
<td<? echo $bgcolor; ?>> <b><? echo $row[1];?></b></td>
<td<? echo $bgcolor; ?> align="center">
<A HREF="kz.php?kz=<? echo $row[0]; ?>">schválit</A> </td>
<td<? echo $bgcolor; ?> align="center">
<A HREF="kz.php?del=<? echo $row[0]; ?>">smazat</A> </td>
</tr>
<?
$i++;
}
echo "</TABLE>\n";
}
}
foot();
?>
|
|
Po potvrzení krátké zprávy vygenerujeme na disk soubor, obsahující posledních 5 zpráv.
Pro tuto činnost opět upravime skript generuj.php tak, že přidáme následující
pasáž:
if ($generuj == "kz")
{
// vybereme posledních 5 krátkých zpráv.
@$sql = mysql_query("SELECT novinka FROM novinky WHERE stav = 'a'
ORDER BY datum DESC LIMIT 0,5");
// pro každý záznam v databázi vložíme do pomocné proměnné jeden řádek
while ($row = mysql_fetch_row($sql))
{
$data .= "<LI>".$row[0]."</LI>\n";
}
// vygenerujeme soubor
@$f = fopen("../inc/kz","w");
fputs($f,$data);
fclose($f);
}
|
|
Dnešní pokračování bylo sice o něco delší než predešlá, ale určitě to není na škodu.
Příště Vám ukáži, jak zařídit správu článků - přidávání, korektury, mazání
a schvalování.