Redakční systém - tisk - 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:



PHP

Redakční systém - tisk

21. srpna 2001, 00.00 | Článek navazující na seriál o Redakčním systému od Jirky Kocmana. Stávající systém tak rozšíříme o možnost tisku článku.

Stejně jako mnoho z vás, tak i mě zaujal seriál s názvem Redakční systém. A jako nenasytnému uživateli internetu, který chce stále něco zlepšovat, jsem se donutil k doplňkům do několika scriptů. V tomto seriálu bych vás chtěl seznámit s tím, jak si snadno vylepšit stávající verzi RS. Nejprve si předvedeme jak článek vytiskout, dále vám ukáži generování článku na disk tak, aby nezabíraly místo v databázi, fulltextové vyhledávání a na konec ještě něco pro zlepšení grafické podoby. Doplníme stránku CSS styly, uvítáním podle denní doby, akuálním časem, datem, názem dne a ještě zobrazíme jméno toho, kdo má ten den svátek. Všechny scripty se budu snažit psát tak, abyste nemuseli čekat na další díl a ihned fungovali. Možná, že budou potřebné ještě místní úpravy. Myslím, že je toho dost, tak s chutí do toho.

První script který tu proberu je ten, který návštěvníkovi umožní vytisknout si článek.

Je to velice jednoduché. Ve skutečnosti stačí pouze vzít script nahled.php (./admin/nahled.php) a přidat tam "pár drobností", aby vypadal takto:

<?
Header("Pragma: No-cache");
Header("Cache-Control: no-cache");
Header("Expires: ".GMDate("D, d M Y H:i:s")."GMT");

// includneme funkce a spojíme se s databází
include "./conn.php";
include "./function.php";

// select článku a informací o autorovi a rubrice
$sql = mysql_query("SELECT C.nadpis,A.jmeno,A.email,R.rubrika,C.datum, C.anotace,
C.clanek FROM clanky C, rubriky R, autori A WHERE C.id_autor = A.id 
AND C.id_rubrika = R.id AND C.id= $id");

// načtení výsledku z databáze
@$data = mysql_fetch_row($sql);
mysql_close($conn);

// zobrazíme stránku a v ní získaná data
head();
?>

<H3 ALIGN="CENTER"><? if($data[0]==""): include "./clanky/n_$id.dat"; 
else: echo $data[0]; endif; ?></H3> 
// tady se něco děje

<P><? if($data[5]==""): include "./clanky/a_$id.dat"; else: echo $data[5]; endif; 
?></P> // tady taky 
<? if($data[6]==""): include "./clanky/c_$id.dat"; else: echo $data[6]; endif; ?>
// a tady 
též
<P>
Publikováno: <B><? echo date("d.m.Y",$data[4]); ?></B>
v rubrice <B><? echo $data[3]; ?></B>.
<B>Autor:</B>
<A HREF="mailto:<? echo $data[2]; ?>"><? echo $data[1]; ?></A>
</P>

<?
tisk(); // tady taky pozor
foot(); 
?>

Ve zdrojovém kódu byly označeny řádky, ve kterých se něco dělo. Vezmu na vysvětlenou jen jeden, protože všechny tři pracují na stejném principu.

<? if($data[0]==""): include "./clanky/n_$id.dat"; else: echo $data[0]; endif; ?>

Je to vlastně jen podmínka. Pokud není v poli data s indexem 0 nic, načte se z adresáře clanky soubor n_$id.dat, jinak se zobrazí obsah $data[0]. Jistě by vás zajímal ten includ souboru. Příkaz (nikoliv funkce) include slouží k načtení souboru z umístění, které je udáno v uvozovkách (!!!). Je to ekvivalent příkazu expires, jen má trochu jiné vlastnosti. A proč zrovna takhle? Adresář clanky ve verzi pana Kocmana přece vůbec nebyl?! A co ten divný název souboru? Vše vysvětlím. Vezmu to do začátku. Pokud se podívámem na SELECT z datatabáze zjistíme, že $data[0] obsahuje nadpis článku, $data[5] anotaci a $data[6] samotný článek. Později, až budeme generovat články na disk, se článek, anotace a nadpis budou uchovávat jako soubor a nikoliv jako položka databáze, odkud budou vymazány, aby nezabíraly místo. Sami už jste asi pochopili, že n_$id.dat znamená nadpis, c_$id.dat je článek a $a_$id.dat anotace. Proměnná $id v názvech souborů je nahrazena číslem článku. Takže pro článek číslo tři to bude n_3.dat, a_3.dat a c_3.dat. Více si o tom povíme v díle věnovaném generování těchto souborů.

Aby to bylo úplné musíme do scriptu index.php přidat ještě řádku. Ta vypadá takto:

<A HREF="nahled.php?id=<? echo $clanek ?>" TARGET="_blank">Náhled pro tisk</A>

Tu přidáme do podmínky která se zobrazuje pokud je vybrán k zobrazení jen jeden určitý článek ( if($clanek>0) ). Kam to umístíte, tam se to zobrazí. Já to mám na místě mezi jménem autora a tím co je v tabulce Autori v položce oautorovi.

Ještě vysvětlím, co řádek zanmená. Odkaz na stránku nám říká, že v novém okně (TARGET="_blank") se zobrazí článek, který má číslo jako právě zobrazený článek (id=<? echo $clanek ?>). V tomto okně pak v proměnné $id máme číslo článku, který se má zobrazit.

Proč ale otevírám nové okno? Pokud jste studovali script index.php, víte, že je vše poskládáno v tabulce. Tím způsobem, jakým to mám uděláno já by se tedy vytiskly i krátké zprávy nebo jméno toho, kdo má ten den svátek. To myslím čtenáře nezajímá, stejně jako něco o autorovi.

Jak jste si také všimli, je na konci scriptu funkce tisk(). Ta se načte ze scriptu function.php a vypadá následovně:

function tisk()
{
echo "<center><FORM><INPUT TYPE=\"button\" VALUE=\" TISK \" 
onClick=\"isIE=navigator.appName=='Microsoft 
Internet Explorer'; isNN=navigator.appName=='Netscape'; ver=navigator.appVersion;
if ((isNN && 
parseInt(ver)==4)||(isIE && ver.charAt(ver.indexOf('MSIE')+5)==5))
 { window.print(); }
else { 
alert('Máte starou verzi WWW klienta. Tiskněte z menu ...');
}\"></FORM></center>";
}

Funkce zobrazí formulářové tlačítko, na kterém je napsáno TISK. Pokud na něj kliknete a máte prohlížeč IE ver. 5.0 a vyšší nebo Netscape Navigator ver. 4.0 a vyšší, zobrazí se okno pro potvrzení tisku, jinak se vypíše hláška, že uživatel musí tisknout pomocí nabídky Soubor nebo File.

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: