Autor Zpráva
bestik_63
Profil
Ahoj měl bych dotaz.
Nedávno jsem viděl web administraci, kde bylo možné měnit u stránek např. title, meta name="keyword" apod. Hlavně mě zaujala změna url stránky pro případ, že by chtěl vlastník webu upravit klíčové slova pro SEO.

uvedu příklad.
mám adresu www.server.cz/svatby
po čase vlastník webu chce změnit název URL na :
www.server/foto-svatby

Jelikož používám mvc tak url adresa mi identifikuje název třídy a podle ní se vygeneruje příslušná stránka. Pokud bych chtěl uživateli dát možnost měnit název url, musel by přejmenovat za chodu webu název třídy (soubor i název třídy), což určitě není dobrý nápad. Nebo mě napadlo vytvořit v databázi tabulku, kde bude k URL přiřazen název třídy a při změně URL se aktualizuje tato tabulka. Router by pak z databáze zjistil jakou třídu načíst.
Nicméně by mě zajímalo jestli neexistuje nějaký elegantnější postup jak podobnou administraci vytvořit.
Martin02
Profil
bestik_63:
Ukládej ty stránky do databáze. V tabulce si udělej tolik sloupců, kolik chceš informací o stránce (title, keywords, url, content...) a vlastník si potom jednoduše může změnit url v administraci. Router se podívá, jestli v db existuje stránka s danou url a pokud ano, tak zavolá něco jako PageController, který bude zobrazovat stránky - podle requestu si zjistí, jaká je url a na základě ní zjistí z databáze, co má vypsat. Pokud máš jiný typ obsahu (fotogalerie apod.), tak si pro to vytvoř další třídu, třeba GalleryController.

Obecně nedoporučuji mít co stránku, to kontroller. Tedy alespoň ne na "běžné weby". Pak si vlastník vzpomene, že chce udělat web v jiných jazycích, přidávat, odebírat stránky... a je s tím problém. Něco jiného je, když tvoříš administraci nebo něco takového - tam ale asi nikdy nikdo nebude chtít měnit url adresy...
bestik_63
Profil
Martin02:
jj přesně tak jsem to chtěl dělat. Jen jsem si nebyl jist. :-)
Keeehi
Profil
Mapování mezi URL a controlery zajišťuje router. To odkud bere data je jeho věc. Může být založen jen čistě na informacích z URL a pak se s adresou nemůže moc hýbat ale také může obsahovat převodní tabulku. Tu samozřejmě si může ulochovávat v databázi, souboru nebo jakkoli jinak.
bestik_63
Profil
ještě otázečka. Pokud bude uživatel měnit název URL, řeší se aby stará adresa nějakou dobu fungovala? Např. pro uživatele, kteří mají staré stránky načetlé i se starými odkazy a při změně URL by jim to vyhodilo zbytečně chybu.
Joker
Profil
bestik_63:
Mně v první řadě připadá jako hloupý nápad jen tak z rozmaru měnit adresy stránek na webu.

Snažil bych se klientovi vysvětlit, že mj. i z pohledu SEO jsou potenciální rizika mnohem větší, než potenciální výhody.

Ale jinak pokud už je z nějakého důvodu nutné adresu změnit, staré adresy by měly přesměrovávat na nové přes HTTP 301. A to ideálně ne „nějakou dobu“, ale trvale.
bestik_63
Profil
Joker:
jenže toto přesměrování se řeší v htacces ne? To je spíše pro několik málo adres a navíc aby toto dělal správce webu, ne uživatel.
Mě šlo o to aby staré adresy na webu fungovali těm, kteří právě serfují na zmíněném webu a byla provedena změna URL u některé stránky. Sice je to spíše teorie, zvlášť pro weby s malou návštěvností, ale myslím že by stálo za zmínku to řešit nebo ne? Pravděpodobnost že administrátor změní url některé ze stránek právě v době kdy na webu někdo serfuje moc velká není. S větším webem tam pravděpodobnost samozřejmě stoupá.
juriad
Profil
bestik_63:
Když použiješ Řešení některých častějších problémů (FAQ) » Univerzální obecné pravidlo, nebudeš vůbec nic řešit v .htaccess, ale vše bude v PHP. A v PHP můžeš pomocí funkce header klidně poslat i to přesměrování 301.

Můžeš mít v databázi tabulku stránek a jejich adres:
adresy (stránka, adresa, datum)

Vždy budeš hledat nejnovější záznam pro adresu.
Nenalezneš -> pošleš hlavičku 404
Nalezneš a datum není NULL -> přesměruješ na adresu stejné stránky s datum je NULL pomocí hlavičky 301
Nalezneš a datum je NULL -> zobrazíš stránku

Takto je možné mít trvalé adresy; každá změna URL jen způsobí přidání záznamu a nastavení datum tomu, který doposud měl datum NULLový. Zádný záznam z databáze nikdy nezmizí.
bestik_63
Profil
juriad:
Díky moc, tohle jsem hledal :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: