Redakční systém V. - Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:

Soutěž

Sponzorem soutěže je:

IDIF

 

Kde se koná výstava fotografií Luďka Vojtěchovského?

V dnešní soutěži hrajeme o:



PHP

Redakční systém V.

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í.

Obsah seriálu (více o seriálu):

Tématické zařazení:

 » Rubriky  » PHP  

 » Rubriky  » Web  

 

 

 

Nejčtenější články
Nejlépe hodnocené články

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: