Ujel mi vlak ve webovém programování – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Ujel mi vlak ve webovém programování – PHP – Fórum – Programujte.comUjel mi vlak ve webovém programování – PHP – Fórum – Programujte.com

 

Karel Matoušek
~ Anonymní uživatel
1 příspěvek
2. 8. 2015   #1
-
0
-

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!

Nahlásit jako SPAM
IP: 78.102.39.–
Kit+15
Guru
3. 8. 2015   #2
-
0
-

#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ů.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
3. 8. 2015   #3
-
0
-

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

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:b90f:84...–
ondrej39+1
Věrný člen
3. 8. 2015   #4
-
0
-

#3 peter
Config je prostě config a do něho žádné funkce nepatří. Od toho je to konfigurační soubor.

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Kit+15
Guru
3. 8. 2015   #5
-
0
-

#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é.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
4. 8. 2015   #6
-
0
-

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.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f9ac:3b...–
Kit+15
Guru
4. 8. 2015   #7
-
0
-

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

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
4. 8. 2015   #8
-
0
-

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.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f9ac:3b...–
peter
~ Anonymní uživatel
3981 příspěvků
4. 8. 2015   #9
-
0
-

*opendir - teda, opendir, jakoze precist soubory slozky. A pak uz je to presne tvuj model, bez db.

Nahlásit jako SPAM
IP: 2001:718:2601:1f7:f9ac:3b...–
Kit+15
Guru
4. 8. 2015   #10
-
0
-

#8 peter
Nekontroluji. Prostě z DB vyzvednu článek, o který uživatel požádal prostřednictvím URL. Kde vidíš jakou kontrolu? A co do toho pleteš opendir?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý