Předem se omlouvám za své dotazy. Naposledy jsem programoval v PHP před sedmi lety a teď bych opět něco menšího potřeboval udělat. Pro zájmový kroužek potřebuji udělat web s databází, kde budou uloženy seznamy úkolů, uživatelé si je budou moci zobrazovat a přebírat si z těchto společných seznamů jednotlivé úkoly do svých seznamů úkolů, čímž si je mezi sebou rozdělí.
Snažil jsem se zorientovat v tom, co se od té doby objevilo a co je teď standard. Na grafiku použiju Bootstrap - ten se mi líbí, na takovou tu interakci s uživatelem jQuery a možná AJAX, na databázi MySQL a celé to oživím a propojím díky PHP. A teď mé dotazy:
1. jQuery a AJAX jsou pěkné věci, ale jakmile bude mít někdo vypnutý Javascript tak stejně musím ještě udělat klasickou verzi webu jako za starých dobrých časů - čisté HTML s CSS a k tomu PHP, je to tak?
2. Je obecně lepší použít odkazy typu domena.cz/seznam_ukolu_254 nebo typu domena.cz/zobraz_seznam.php?id254 ? Na stránkách bych chtěl využít lokální vyhledávání Google.
3. Jsem zvyklý používat na každou funkci jeden php skript, např. kdybych chtěl naprogramovat program pro knihovnu, tak bych měl index.php, registrace_ctenare.php, vypis_ctenarskeho_konta.php, zobrazeni_knihy.php, vypujceni_knihy_ctenarem.php atd. Pamatuju si že před těmi lety se doporučovalo, aby vše bylo v jednom PHP skriptu a uvnitř byl case přepínač a jednotlivé jeho větve dělaly požadované funkce. Teď zase frčí MVC architektura, ale ta mi přijde na můj úkol zbytečně složitá. Existuje něco mezi? Něco elegantního, ale ne příliš složitého?
4. Míchání PHP kódu a HTML značek výstupu. Jsem zvyklý to prostě míchat a zajišťovat HTML výstup v PHP skriptu. Elegantnější je určitě MVC anebo nějaké ty šablonovací nástroje typu SMARTY, ale to mi přijde taky zbytečně složité - je něco podobně elegantního, ale ne tak složitého?
Budu vděčný za každý postřeh, názor, připomínku nebo nasměrování na dobré články, videa či knihu. Děkuji!
Fórum › PHP
Ujel mi vlak ve webovém programování
#1 Karel Matoušek
1. Ano, je to tak. Stránka bez JS by měla mít alespoň základní funkčnost. Na druhou stranu je dnes spousta webů bez JS nepoužitelných.
2. Byl bych pro variantu "domena.cz/seznam-ukolu-254", protože podtržítka nemají vyhledávače rády. Myslím si, že i to číslo je zbytečné, databáze si to přebere i bez něho, tedy "domena.cz/seznam-ukolu". Pokud bych šel cestou REST, tak se to ještě zjednoduší na "domena.cz/ukoly", resp. "domena.cz/ukol/254"
3. registrace_ctenare.php, vypis_ctenarskeho_konta.php apod. jistě měly problém v tom, že se spousta HTML opakovala mezi skripty. Při změně vzhledu to musel být horror. MVC má za úkol zjednodušit strukturu - šablona může být pro všechny výstupy jednotná, logicky se umístí do komponenty View. Prezentační web vůbec nepotřebuje Controller - ten je potřebný pouze při modifikacích. Naopak web určený ke sběru dat vůbec nepotřebuje View. Rozhodně se dnes nedává celý web do jednoho skriptu, ale dělá se jeden skript jako univerzální vstupní bod (index.php), ve kterém se nakonfiguruje spojení s databází, model a podle parametrů v URL se vytvoří instance vhodné třídy, které se tohle všechno předá.
4. Do PHP už žádné HTML ani XML značky nedávám, ale byl to u mne delší proces. Když už, tak pouze do komponenty View - nikam jinam. SMARTY neuznávám, strká HTML přímo do PHP a je líné. Jako šablonovací jazyk používám dnes už výhradně XSLT, i když je to jazyk pro začátečníka poměrně obtížně zvládnutelný. Zato má bezkonkurenční rychlost a svým způsobem garantuje validitu výstupního nejen HTML, ale i dalších formátů.
Programujes to ty, udelej si to, jak ti to vyhovuje.
1. Nemusis, ale bylo by to lepsi. Kdyz to bude mit nekdo vypnute, zakazane, nemusi byt soucasti tve skupiny zakazniku.
3. Vzdycky je lepsi vsechny spolecne veci ulozit do jednoho php, treba konfig databaze + funkce pro login a pod. Ten pak naincludujes do vseho ostatniho. Stranky muzes ulozit do slozky pages/ a pak je includovat do sablony v index.
index.php?page=aaa
$page = array('aaa');
$page = isset($_GET['page']) ? $_GET['page'] : '';
$page = in_array($page,$pages)? $page : '';
$path = './pages/';
<html> ...
if ($page!=='' && fileexists($path.$page) {include $path.$page;}
else {echo 'error 404';}
</html>
4. "Míchání PHP kódu a HTML značek výstupu."
Tvuj program. V mem to nikdy nenajdes. Nejdriv zpracuji php a pak jej zobrazuji. Rychlost zobrazeni me a tve stranky za jinak stejnych podmink bude citelne lepsi u me. Pocitis to, az budes zobrazovat tabulku 1000 radku radek po radku. U mne to udela blik a tobe to se to bude zobrazovat radek po radku.
Nicmene, kdyz uz si takhle komplikujes prehlednost kodu, aspon pouzivej ob_start();. Rychlost zobrazeni pak bude podobne rychla.
5. Kdyz muzes, je dobre pouzivat kesovani. Treba, jestli znas hru rd2.cz, tak v dobe, kdy jsem to hraval, tak se tam kazdou noc generovali statistiky hracu a souboju. To by bylo ok. Ale kdyz pak statistiky prohlizis, tak vsem se zobrazuje stejnych treba 30 stranek se seznamem hracu a oni to cele soukali z db. Kdyby to ulozili do souboru a jen hledani resili pres php, tak se to zobrazuje asi 100x rychleji a nezatezuje tolik server. (Tam jsi proste dal listovat doprava doleva a on celou dalsi stranku resil pres db a php. dal jsi vyhledat sam sebe. Vyhledal pres db a opet stranku generoval z php a db. Silene. A ted si predstav, ze tech 2000 hracu, bylo treba 100 online a vsichni si prohlizeli statistiky. Protoze, to byl zaklad informaci. Sledavat nepratelzke tymi, jak si vedou, kdo je silny a slabi souper, ztrati valkou prilis uzemi a tak.)
#3 peter
Abych do proměnné $page dával seznam všech podstránek - to bych se z toho musel zbláznit. Moment, ty ten obsah proměnné $page na následujícím řádku přepisuješ na něco úplně jiného? Z takového WTF bych se zbláznil podruhé.
Kit - Ja to delam vzdycky po svem! :) Nebranim ti napsat lepsi reseni. Kde nic, tu nic, jen fura reci, ze to mam spatne... Seznam stranek vylouci, ze se tam dostane stranka, ktreu tam nechces, aby hacker videl. Samozrejme, je to reseni pomale, kdyz mas treba 1000 stranek. Na druhou stranu, kontrolovat to se seznamem stranek v db, no to je uplne stejne reseni, jen db je rychlejsi a musi se napsat vic prikazu. Pro 20 stranek se mi to nevyplatilo rozepisovat.
#6 peter
Dobrá, tady je můj zjednodušený router k architektuře MVC. Z konfiguráku si vyzvedne přihlašovací údaje k databázi, kterou předá konstruktoru modelu. Z URL vezme název třídy a kombinací s REQUEST_METHOD zavolá controller nebo view, předá mu model a spustí ho.
<?php
$configFile = '.htconfig.ini';
$dbConfig = parse_ini_file($configFile , true);
$db = new MyPDO($dbConfig);
$model = new Model($db);
$url = @$_SERVER['REQUEST_URI'] ?: 'Home';
$method = @$_SERVER['REQUEST_METHOD'] ?: 'GET';
$request = parseURL($url);
$class = $request[0] . "_" . $method;
echo new $class($model, $request);
V reálné verzi tam mám použit namespace, ošetření výjimek, práci s přihlašováním a session, což v této fázi nepotřebujeme. Stránku, kterou nechci, tam nedostaneš a přitom ji proti DB kontrolovat nemusím - stačí mi souborový systém, ve kterém skript s třídou je nebo není. Jednotlivé články mám v databázi - není nutné udržovat další seznam. Na všechno jsem aplikoval techniku DRY, aby vzniklo co nejméně chyb a každá nová položka se přidávala pouze do jednoho místa.
Takze to kontrolujes vuci db. Nic tak prevratneho pod sluncem. Db je jen rychlejsi nez in_array. A ten seznam do in_array muzu vlozit taky pres f_open. Takze nemusim taky udrzovat cely seznam v php.
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Podobná vlákna
Vlak - remake retro hry pro Android a iOS — založil MixedApps.cz
Pomoc se soutezni ulohou - na PC normalne, ale na webovem rozhrani s… — založil power1000
Síťové programování pod Windows a programování internet — založil Hanzis
Programování her — založil Michalek
Programování her — založil Gh0st
Moderátoři diskuze