Dynamická stránka s PHP include (pre absolútnych začiatočníkov s PHP)
Každého z nás, ktorí robíme webové stránky, a hlavne tých z nás, ktorí začali len nedávno, určite zaujíma, či sa obyčajná statická stránka v HTML dá nejak vylepšiť tak, aby s ňou nebolo toľko roboty (zmena rovnakých údajov na mnohých stránkach...).
Úvod
Každého z nás, ktorí robíme webové stránky, a hlavne tých z nás, ktorí začali len nedávno, určite zaujíma, či sa obyčajná statická stránka v HTML dá nejak vylepšiť tak, aby s ňou nebolo toľko roboty (zmena rovnakých údajov na mnohých stránkach...). Je vhodné robiť statické stránky do tých, povedzme 5 podstránok. Tých 5 podstránok je vhodných preto, že keď si napr. dáte nejakých 10 linkov na jednu a potom zistíte, že by ste ich radi mali aj na ostatných piatich, je dosť možné, že pri úprave piatich podstránok si ešte nevytrháte vlasy a hravo to zvládnete. Predstavte si ale, že by ste takto mali pridať tie isté odkazy na 20 stránok, čo potom? Potom už radšej prejdete na dynamický web, avšak, existuje mnoho stránok, ktoré aj pri takýchto, ba možno aj vyšších počtoch stránok stále fungujú staticky.
Už dlhú dobu je tu pre nás PHP, ktoré nám poskytuje možnosti, ktorými je možné robiť naše stránky dynamickými, no a preto si dnes o jednom zo spôsobov, ako urobiť svoju statickú stránku dynamickou, povieme.
PHP include
Z angličtiny vieme, že slovo „include“ v slovenčine znamená zahŕňať, obsahovať atď., čiže tento kód v podstate do stránky, v ktorej je vložený zahrnie obsah určitého súboru. Lepšie však bude, keď si funkciu PHP include vysvetlíme na nejakom praktickom príklade.
Máme vytvorený súbor index.php, ktorý má nejakú hlavičku, menu, sidebar a footer.
<div id="header"> <h1>Nadpis stránky</h1> </div> <ul id="navigation"> <li><a href="#">Nav link 1</a></li> <li><a href="#">Nav link 2</a></li> <li><a href="#">Nav link 3</a></li> </ul> <div id="content"> <p>Obsah stránky</p> </div> <div id="sidebar"> <ul id="partners"> <li><a href="#">Partner 1</a></li> <li><a href="#">Partner 2</a></li> <li><a href="#">Partner 3</a></li> </ul> </div> <div id="footer"> <p> Copyright © 2009 - 2011 Firma s.r.o. </p> </div>
My potrebujeme, aby sme mali na každej stránke rovnaké menu, sidebar a footer. Najprv si musíme vytvoriť tri súbory, osobitne pre každú časť stránky, ktorú chceme includovať. Vytvoríme si teda súbory navigation.php, sidebar.php a footer.php.
Začnime navigáciou. Potrebujeme, aby sa nám linky nášho menu zobrazovali medzi značkami elementu ul, čiže všetkých potomkov (li elementy a ich priamich potomkov a elementy) skopírujeme do súboru navigation.php, ktorý by teraz mal obsahovať toto:
<li><a href="#">Nav link 1</a></li> <li><a href="#">Nav link 2</a></li> <li><a href="#">Nav link 3</a></li>
A teraz miesto elementov li a a do elementu ul vložíme náš php include kód v tomto tvare:
<?php include('navigation.php'); ?>
.
Náš kód by mal teraz vyzerať nasledovne:
<ul id="navigation"> <?php include('navigation.php'); ?> </ul>
Po uložení a spustení súboru vidíme ako nám PHP-čko pekne naincludovalo naše menu linky do úvodnej stránky (index.php).
A teraz si týmto istým spôsobom naincludujeme aj ostatné časti stránky, ktkoré potrebujeme mať dynamické. Postup by vám už mal byť známy, ale pre istotu pridávam kód pre všetky časti stránky.
Include pre sidebar
V našom prípade máme v sidebar-e vložený jeden netriedený zoznam, ktorý je potomkom elementu div s id sidebar, ktorý drží celý náš bočný panel pokope. Čiže, vytvoríme si subor sidebar.php, do ktorého teraz nevložíme len li elementy z netriedeného zoznamu, ale celý netriedený zoznam! Možno sa niekto pýta prečo? Lebo keby sme tam element ul nechali a potom doň náš php include vložili, celý obsah súboru sidebar.php by sa includoval medzi tagy elementu ul, čiže celý sidebar by bol jeden netriedený zoznam a to my nechceme. Teraz by náš kód v súbore index.php mal vyzerať nasledovne:
<div id="sidebar"> <?php include('navigation.php'); ?> </div>
Teraz, keď máme v našom navigation.php súbore vložený náš netriedený zoznam, skúsme si tam pridať ešte nejaký div s textom a triedený zoznam ol. A po stustení nám to PHP-čko znova pekne naincluduje do stránky.
No a nakoniec, týmto istým spôsobom vytvoríme aj include pre footer:
<div id="footer"> <p><?php include('footer.php'); ?></p> </div>
Keď máme toto všetko hotové a všetko nám funguje ako má, skúste vytvoriť ďalšiu stránku, napr. navlink2.php a v súbore navigation.php na ňu do druhého linku pridajte odkaz. Čo sa stalo? Odkaz na súbor navlink2.php teraz nájdete na každej stránke, ktorá ma includovaný súbor navigation.php ako menu. Tým pádom sme sa dopracovali k výsledku tohto tutoriálu, či si už vytvoríte takto stránku s dvomi alebo dvadsiatimi podstránkami, veci, ktoré máte v každej z nich includované pomocou PHP, budete meniť v požadovanom súbore už LEN RAZ, o zvyšok sa postará dynamika :).
Nakoniec ešte jeden screencast ako to celé funguje. Toto video je môj prvý screencast vôbec, tak aj vyzerá (berte to s rezervou :))
23 komentárov k článku:
Komentovať môžu iba prihlásení
Zaregistruj sa cez bezplatnú registráciu alebo použi login cez Facebook (FB Connect)
Prihlás sa tu, ak už máš profil na Zajtra.sk:

Matúš: Zaujímavé chápanie "PHP" ako "templejtovacieho" jazyku. Pokiaľ viem, je to skriptovací a nie templejtovací jazyk a prečo to využívať? Aby si logicky oddelil kód od html.

Smarty som nikdy celkom nepochopil.. veď PHP samotné je templejtovací jazyk. So short tagmi nie je ani rozdiel v počte znakov taký výrazný. Keď napíšeš ten článok, rád by som si prečítal prečo by som mal používať Smarty :)

@Michal Rybár: Ak máš záujem, môžem napísať čo to o stavaní jednoduchého webu za pomoci PHP a SMARTY ;).

nenasiel by sa niekdo kdo by napisal profesionalnejsi clanok ako ma vyzerat kod aby to bolo aspon trochu profesionalnejsie. Kam dat HTML kam dat PHP a pod...

@Róbet: Určite nie je za čo, rád pomôžem keď viem, len som chcel podotknúť, že ak sa niekto chystá spraviť si vlastný web a ešte nevie presne koľko podstránok ten web bude mať, tak je lepšia cesta skúsiť sa poobzerať po hotových riešeniach a na nich sa potom niečo naučiť. Tiež som začínal presne tak ako popisuješ ty sám a je mi jasné, že takto bude začínať väčšina samoukov a práve preto som rád, že tu na Zajtra.sk Vám prinášame radu seriálov o rôznych PHP frameworkoch aj keď to je asi skôr pre pokročilejších... Skúsim však niečo vyhútať...

@František: Diky za comment! Viem, že to nie je najlepšia cesta ako dynamický web vytvoriť. Nehovorím, že treba kadejaké php includy roznahávať po 50 stránkovom webe. Napísal som, že takto je to aj pri 20 stranovom webe lepšie ako mať to celé statické. Keď niekto naozaj vie len to HTML a chce si to s tým webom nejak uľahčiť, bude mu určite ľahšia aj táto cesta nápomocná :) Smarty nepoznám, ale pozriem to. Myslím, že ako "pre abs. zaciatocnikov" posluzi aj tento navod. Este raz dakujem za pripomienky :)

@Robert & @clanok: prepac, mozno je to vecou toho, ze zacinas, mozno je to vecou toho, ze sa asi ucis na kolene, ale pisanie kodu v tomto style: BAD WAY! ... Nie je to najcistejsia forma programovania a stretol som sa s niekolkymi projektmi, ktore boli programovane prave takto a bolo o drzku ponachadzat vsetky mozne a nemozne includy v 50 suboroch. Ak by som ti mohol poradit, skus sa pozriet po roznych weboch a po nastrojoch, ktore ti umoznia a ulahcia pracu. Napr. v tvojom pripade by som skusil hladat nieco v style template - napr.: Smarty Templates. Ale inak drzim paste v uceni.

@andrej & @mph - Aspoň som sa aj ja zas niečo priučil :) Thx vám všem ;)

@mhp ďakujem za linky, máš pravdu, som rád že niekto spravil test so správnou metodikou (tzn. že neincludoval stále ten istý súbor ale vždy vytvoril nový).
škoda že sa tu nedajú opravovať príspevky, opravil by som sa :-/

áno, ako základ je to fajn, 1 funkcia=1 include=1 súbor, ale pri väčších aplikáciach je rozumnejšie si písať funkcie a volať potom tie-> x funckií=1 include= 1 súbor. Samozrejme si funkcie grupovať podľa akéhosi kľúča.

@moderny obcan: jasne, pripajam nizsie.
@andrej: stranka, ktoru uvadzas obsahuje este informacie z obdobia PHP4, takze nie je moc aktualna. nepozeral som ten "kopec odkazov", ale rozdiel v meraniach je dobre vysvetleny tu: http://blog.seeit.org/2010/06/php-the-include-include_once-performance-debate/ .
ja osobne mam toto tvrdenie z tohto zdroja: http://arin.me/blog/php-require-vs-include-vs-require_once-vs-include_once-performance-test .
+ ty si uviedol argument, preco nepouzit "require_once()", takze som reagoval na to. nehovorim o tom, ci to potrebujes overovat. ak to overi a je to rychlejsie, tak to je len plus :).

@mhp v pohode, ja som to nijako netestoval, idem na to len logicky podľa toho, čo by tá funkcia mala robiť. pokiaľ existuje nejaký korektný test, tak sa naň rád pozriem a dám ti za pravdu tým pádom.
evidentne ale nie som jediný, komu sa to nezdá:
http://www.sitepoint.com/forums/php-34/what-makes-include_once-require_once-so-slow-269085.html
plus kopa iných dotazov po hodení "require vs. require_once".
vkladanie hlavičky - hlavička nebude mať v sebe nijaké funkcie, triedy, atď., je to len šablóna. nepotrebujem overovať, či ju vkladám len raz, keďže to nemôže spraviť paseku, preto by som radšej použil require(). to sú už ale naozaj len kozmetické veci.

@mhp a odkaz na ten test je? ked poviem A, zvycajne sa hodi povedat aj B.

@andrej: test hovori, ze je rychlejsi pri jedinom pouziti. uplne v pohode ho mozes pouzit napr. na navigaciu, header atd... "udajne" je v mojom komentari preto, ze som ten test nerobil osobne ja, ale OK, ak mas ine cisla, mozes hodit, naozaj rad sa necham vyviest z omylu :)
edit: a preco sa nehodi na vkladanie hlavicky? podla mna sa hodi prave tam, lebo urcite ju chcem len 1x na stranke.

@Michal Som rád, že ti to pomohlo a všetkým dík za komentáre a pripomienky, mne ako začiatočníkovy v publikovaní článkov to dosť pomáha :).

pre upresnenie, xxx_once() určite nie je "údajne rýchlejšie" v prípade popisovanom v článku, keďže okrem samotného prevedenia kódu ešte aj vykonáva jeho kontrolu pre zistenie duplicity, takže na vkladanie pätičky / hlavičky sa vôbec nehodí.
hodí sa len v prípade, že máme povedzme 10 súborov využívajúcich jeden spoločný súbor s knižnicou, no nevieme, ktoré z tých 10 súborov za behu použijeme. preto na začiatok každého dáme xxx_once('subor_s_kniznicou.php'), ktoré nám zaručí, že sa spoločný súbor nevloží x-krát a nehodí chybu kvôli duplicitnej definícií funkcie / triedy.
tento spôsob je ale dosť náročný na údržbu, takže v takom prípade je lepšie napísať si za pomoci __autoload() vlastný loader.

len tak pre doplnenie: ak by islo o zlozitejsi kod/aplikaciu/cokolvek, pri ktorej je treba ladit performance (napr. pre vlastny framework,atd...), tak include_once()/require_once() je udajne rychlejsie. funguje to skoro rovnako ako include() s tym rozdielom, ze pri "..._once()" sa po prvom "includovani" sa uz viac ten isty subor "neincluduje" a require() vam pri neuspesnom pokuse hodi error. (dufam, ze som to napisal zrozumitelne :) )
Novinky
8 mes.
Aprílové vtípky: Výběr toho nejlepšího kolem počítačů, internetu a techniky
Výběr nejlepších aprílových vtípků 2019
8 mes.
Fotky Google sa učia lepšie pracovať s dokumentmi
Spoločnosť Google prostredníctvom svojho účtu na sociálnej sieti Twitter oficiálne predstavila novú funkciu svojej aplikácie Fotky Google.
8 mes.
Gmail dovoľuje naplánovať poslanie emailu neskôr
Spoločnosť Google dnes oznámila pridanie funkčnej novinky do svojej populárnej webmailovej služby Gmail, možnosť naplánovať poslanie emailu na neskôr.
2 rokmi
Používatelia Chrome začali prechádzať na nový rýchlejší Firefox, avizujú dáta Mozilly
Nový lepší a rýchlejší prehliadač Firefox 57 Quantum vyúsťuje zrejme do viac používateľov prechádzajúcich respektíve vracajúcich sa na tento prehliadač z iných prehliadačov, na osobných počítačoch aj smartfónoch.
2 rokmi
Briti dokončili kúpu SK-NIC-u. Nové .sk domény nechávajú za 8.4 eur
Predaj správcu slovenskej domény .sk, SK-NIC, bol dokončený a novým majiteľom po telekomunikačnej skupine Danubiatel, do ktorej patrí napríklad Swan a 4ka, je britská spoločnosť CentralNic.
Staršie novinky »TOP dlhšie
- 01 SUSE Expert Days 2019 Bratislava (1936x)
- 02 Nové Raspberry Pi 4B je tu! (1612x)
- 03 Gadgety a cestovanie (1147x)
- 04 Diskrétny video filter (796x)
- 05 Bezdrôtová nabíjacia stanica 3v1 pre iPhone, Apple Watch a Airpods (742x)
- Aj ty môžeš byť najčítanejší. Napíš článok »
TOP tento mesiac
- 01 Export videa z kamery v zmysle GDPR (104x)
- Aj ty môžeš byť najčítanejší. Napíš článok »
Nové články:
- 29.Export videa z kamery v zmysle GDPR
nov - 31.Prvý slovenský Maker Faire predstaví domácich „makerov“ z rôznych oblastí
okt - 31.FC Arsenal spustil novú online službu, ktorá má pomôcť fanúšikom so stratou sluchu
okt - 30.Kamera nielen pre Apple Home
okt - 30.Prvá fixná kopula s čipom ARTPEC-7
okt - Viac »
- Aj ty môžeš byť najčítanejší. Napíš článok »
Pekné veci
Pekné veci
Pekné veci
Pekné veci
Posledné komentáre
- Zdravím, prosím info ohľadne ceny.
- a maju dokonca aj ine vyuzitie. Tu pomohli zachranit chlapca https://vosveteit.sk/vdaka-...
- Dobrý prehľad, niečo podobné som čítala na tuším www.newsy.sk. Osobne mám staršiu bezdrô...
- Potrebujete finančnú podporu pre rôzne projekty? Už žiadne starosti. V spolupráci so slo...
- Potrebujete finančnú podporu pre rôzne projekty? Už žiadne starosti. V spolupráci so slo...
Kritika
Vieš ako robiť veci lepšie? Pomôž našim odvážnejším členom a skritizuj im projekty!
Reklama
Slovenská IT komunita
Seriály zo Zajtra.sk
· Ako písať blog
· Ako sa stať PHP ninja s Yii Frameworkom
· Aplikácie pre Facebook
· CSS triky
· iOS vývojára príhody a skúsenosti
· Jednoduché programy, ktoré vám ušetria čas
· Modelovanie webového sídla
· Nauč sa CodeIgniter [HD]
· Nauč sa jQuery [HD]
· Nette PHP framework
· OOP v Javascripte
· Programujeme v Jave
· Programujeme v Lazaruse
· Programujeme v Pythone
· Robíme Eshop v ASP.NET Web Pages
· Slovenskí iOS developeri
· Webdizajn krok po kroku
· Yablkov TurboTip [HD]
@František „SNiPI“ Čaník no to by bolo super. Staci tak kratko aby som vedel akym smerom sa uberat zbytok si uz najdem. Lebo pouzivanie echo "dlhe niekolkoriadkove html"; sa mi nezda ako spravny smer (tak to robim teraz). A ak sa do toho nahodou pustis tak vopred vdaka :)