Nápady na rozšíření : phpRS Fórum
Napadlo vás zajímavé rozšíření? Myslíte si, že phpRS systému chybí nějaká důležitá funkce? Pokud ano, tak neváhejte a napište nám!
phpRS - redakční a informační systém
Routování odkazů v phprs: Vytvoření funkce na správu a generování odkazů
Zaslán uživatelem/kou: ZdenekPNJ (IP adresa zaznamenána)
Datum: 2015-03-16, 16:48

Zdravím všechny,
pracuji na kompletním předělání redakčního systému phpRS a napadlo mně, že by bylo dobré si vytvořit funkci, díky které bych měl možnost jednoduše spravovat a generovat veškeré odkazy.
Chtěl byl znát názor zkušenějších, jestli je to správná cesta či existuje lepší možnost jak zajistit níže uvedené.

Příklad:
Namísto současné podoby, kdy je v kódu
<a href="view.php?cisloclanku=123&retema=4&seonazev=nadpis-clanku-vygenerovany-z-nadpisu-v-db" title="Název článku">Název článku</a>
či
<a href="search.php?rstema=4&idpodrubriky=5" title="Vyhledávání v rubrice 4 a podrubrice 5">Vyhledávání v rubrice 4 a podrubrice 5</a>

bych chtěl, aby tam bylo něco podobného:

PRO VIEW:
-------------
<a href="<?php function clanekURL('$cisloclanku'); ?>" title="Název článku">Název článku</a>....zde by se rstema apod generovalo z databáze dle umístění článku v rubrice

FUNKCE:
function clanekURL($NumArticle = 0)
{
$str='';
$NumArticle=phprs_sql_escape_string($NumArticle); // bezpecnostni korekce
if ($NumArticle!=0):
$dotazclanek=mysql_query("select link, seo_link, titulek, tema from ".$GLOBALS["rspredpona"]."clanky where link='".$NumArticle."'",$GLOBALS["dbspojeni"]);
if ($dotazclanek!=0&&phprs_sql_num_rows($dotazclanek)>0):
$pole_data=phprs_sql_fetch_assoc($dotazclanek);
$str.= 'clanky/'.RubrikaNazevSEO($pole_data['tema']).'/'.$pole_data['link'].'-'.$pole_data['seo_link'].'.html'; //view
else:
$str.= ''; // chyba
endif;
else:
$str.= ''; // chyba
endif;
return $str;
}

PRO SEARCH:
----------------
<a href="<?php function searchURL('4', '5', '', ''); ?>" title="Vyhledávání v rubrice 4 a podrubrice 5">Vyhledávání v rubrice 4 a podrubrice 5</a>.... zde ještě nevím, jestli by stačilo jen jeden parametr, protože nelze dopředu vědět následující:
např. když by bylo:
search.php?rsvelikost=sab&amp;rstext=all-phpRS-all&amp;rstema='.$NumTema.'&amp;idpodrubriky='.$NumTema2.'
tak už nelze generovat automaticky, protože rstema může být třeba rubrika sport a idpodrubriky např. Srředočeský kraj a třeba ještě idpodrubriky2 např. Beroun a pokud bych chtěl výpis článků ze sport/Stredocesky/Beroun/ není to to samé jako sport/Stredocesky/
.
Proto by fukce měla obsahovat více polí, např:
function searchURL($NumTema = 0, $NumTema2 = 0, $NumTema3 = 0 atd....)
{
$str='';
$NumTema=phprs_sql_escape_string($NumTema); // bezpecnostni korekce
if ($NumTema!=0):
$str.= ' href="search.php?rsvelikost=sab&amp;rstext=all-phpRS-all&amp;rstema='.$NumTema.'&amp;idpodrubriky='.$NumTema2.'&amp;idpodrubriky2='.$NumTema3.'"';
else:
$str.= ' href="search.php?rsvelikost=sab&amp;rstext=all-phpRS-all"'; // vypsat vše
endif;

return $str;
}


Proč to chci udělat?
------------------------
1. Dalo by se pomocí funkce clanekURL($cisloclanku) či searchURL($NumTema = 0, $NumTema2 = 0, $NumTema3 = 0 atd....) jednoduše zajistit, aby v celém red. systému byly adresy ve stejném tvaru
2. Při jakékoliv změně v budoucnu by veškerá editaci byla mnohem rychlejší, než všude přepisovat původní podobu a href.

Je to správná cesta?

Budu vděčný za každou radu.

LinkedIn - Zdeněk Pikulík

Regiony ČR.cz - 1. responzivní zpravodajství z regionů ČR
Medializujeme ČESKO.cz - Revoluční program podpory a modernizace obcí ČR
Obce2020.cz - Moderní řešení profesionálního webu pro obce



Celkem upraveno 1×. Poslední úprava ZdenekPNJ v 16.03.2015 16:49.

Re: Routování odkazů v phprs: Vytvoření funkce na správu a generování odkazů
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2015-03-16, 21:08

Myšlienka je to myslím v princípe správna, no bachol by som to to triedy trclanek, kde sú presne tieto záležitosti. Kódy odkazov zo šablón sa potom presunú to trclanek.php kde miesto generovania častí url ukaz->cisloclanku , ukaz->seo_link budú generovať kompletné url článkov/rubrík. Pre zachovanie spätnej kompatibility je vhodné tú triedu rozšíriť, nie natvrdo prepísať. Mohli by tak teoreticky fungovať aj staršie layouty, ktoré tie URL skladajú z častí.

Re: Routování odkazů v phprs: Vytvoření funkce na správu a generování odkazů
Zaslán uživatelem/kou: ZdenekPNJ (IP adresa zaznamenána)
Datum: 2015-03-16, 21:26

Citace:
no bachol by som to to triedy trclanek

Nejsem si jistý, zda-li by umístěním do trclanek daly nahradit všechny <a href="něco"> na celém webu včetně pluginů apod.

Citace:
Pre zachovanie spätnej kompatibility je vhodné tú triedu rozšíriť, nie natvrdo prepísať

Přiznám se, tomu jsem trochu neporozumněl, můžeš mi prosím Patriku přiblížit, jak jsi to myslel?


LinkedIn - Zdeněk Pikulík

Regiony ČR.cz - 1. responzivní zpravodajství z regionů ČR
Medializujeme ČESKO.cz - Revoluční program podpory a modernizace obcí ČR
Obce2020.cz - Moderní řešení profesionálního webu pro obce

Re: Routování odkazů v phprs: Vytvoření funkce na správu a generování odkazů
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2015-03-16, 21:41

ZdenekPNJ napsal/a:
-------------------------------------------------------
> Citace:no bachol by som to to triedy trclanek
> Nejsem si jistý, zda-li by umístěním do
> trclanek daly nahradit všechny <a
> href="něco"> na celém webu včetně pluginů
> apod.

Samozrejme, ak si nejaký plugin generuje odkazy vo vlastnej réžii, môžeš to jedine fixnúť rewrite pravidlami, vygenerovaný kód pluginu (ak je to obsah bloku) nahradiť pred jeho vypísaním, alebo taký plugin jednuducho prepísať aby používal tvoju verziu generovania odkazov.

Citace:Pre zachovanie spätnej kompatibility je
> vhodné tú triedu rozšíriť, nie natvrdo
> prepísať
> Přiznám se, tomu jsem trochu neporozumněl,
> můžeš mi prosím Patriku přiblížit, jak jsi
> to myslel?

No myssô som to tak, ze by si nemazal ukaz->cisloclanku, ukaz->seo_link a dalšie ale vytvoril novú metódu, ukaz->kompletny_link_clanku napríklad, pričom zachováš aj to staré

Re: Routování odkazů v phprs: Vytvoření funkce na správu a generování odkazů
Zaslán uživatelem/kou: ZdenekPNJ (IP adresa zaznamenána)
Datum: 2015-03-16, 22:09

Teď to v podstatě mám tak, že mám přepsané všechny view.php odkazy na celém webu

z tvaru
<a href="view.php?cisloclanku=123&retema=4&seonazev=nadpis-clanku-vygenerovany-z-nadpisu-v-db" title="Generovaný název článku">

na ten tvar např:
<a href="'.clanekURL($line['id - cisloclanku']).'" title="Generovaný název článku">... u pluginů a pod.
<a href="'.clanekURL($GLOBALS["clanek"]->Ukaz("link")).'" title="Generovaný název článku"> ... u šablon

a funkci clanekURL mám uloženu ve specfce.php a zde s pomocí .htaccess generuji takovéto odkazy:
clanky/'.RubrikaNazevSEO($pole_data['tema']).'/'.$pole_data['link'].'-'.$pole_data['seo_link'].'.html
clanky/sport/1234-Titulek-clanku.html

Tím jsou všechny odkazy na view.php ovládány z jednoho místa. Jenže u search.php je to právě komplikovanější, protože nelze vytáhnout jediněčné údaje z databáze a zde narážím na problém právě s tímto
---
...rstema může být třeba rubrika sport a idpodrubriky např. Srředočeský kraj a třeba ještě idpodrubriky2 např. Beroun a pokud bych chtěl výpis článků ze sport/Stredocesky/Beroun/ není to to samé jako sport/Stredocesky/...

Možná by se dalo inspirovat v Nette, ale nevím, jak by to bylo nejlepší

Viz příklad z Nette a Latte:
<a n:href="Product:show $productId">detail produktu</a>.....vytvořit odkaz na Presenter Product, akci (metoda třídy) show a předat jí parametr $productId.

LinkedIn - Zdeněk Pikulík

Regiony ČR.cz - 1. responzivní zpravodajství z regionů ČR
Medializujeme ČESKO.cz - Revoluční program podpory a modernizace obcí ČR
Obce2020.cz - Moderní řešení profesionálního webu pro obce



Celkem upraveno 1×. Poslední úprava ZdenekPNJ v 16.03.2015 22:14.

Re: Routování odkazů v phprs: Vytvoření funkce na správu a generování odkazů
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2015-03-16, 22:50

Takže potrebuješ z id rubriky, ktorá je koncovým uzlom, vytiahnuť cestu od koreňa k poslednej vetve s čo najmenšou záťažou na databázu ak to chápem správne. Čisto v mod_rewrite to nespravíš, pretože potrebuješ prípadné chyby presmerovať podľa vetiev z databázy… tiež by bolo vhodné mať ošetrené aj prípadné zmeny názvov rubrík a správne zachytávanie aj starých odkazov mimo webu a ich presmerovanie na nové verzie ;-)

Osobne to riešim tak, že do URL dám idéčko poslednej vetvy a jej textový názov. Nadradené rubriky neriešim, pretože mi to píde komplikované. Cez idéčko poslednej vetvy si vyriešim aj to presmerovanie v prípade premenovania témy, takže fungujú aj staré odkazy. Odporúčal by som niekde to idéčko do url zakomponovať, čiže výsledok by vzeral nejak takto:

/rubrika/15/sport/Stredocesky/Beroun/
/rubrika/12/sport/Stredocesky/

v prípade, že premenuješ rubriku, podľa jej ídéčka môžeš url presmerovať na správnu verziu.

No ak si si sitý, že názvy kategórií nikdy meniť nebudeš :) kľudne to routuj tak, že budeš prechádzať URL podľa uzlov rubrík. Zobrať do úvahy len poslednú nemôžeš, pretože môže existovať kultura/Stredocesky/Beroun/
Kľudne si kompletné cesty niekde ulož (nacachuj) a porovnávaj celú cestu…



Celkem upraveno 1×. Poslední úprava pa3k v 16.03.2015 22:54.

Re: Routování odkazů v phprs: Vytvoření funkce na správu a generování odkazů
Zaslán uživatelem/kou: ZdenekPNJ (IP adresa zaznamenána)
Datum: 2015-03-16, 23:04

>Zobrať do úvahy len poslednú nemôžeš, pretože môže existovať kultura/Stredocesky/Beroun/

Proto mne napadlo tu funkci řešit takto, ikdyž se mi to zdá kostrbaté
function searchURL($NumTema = 4, $NumTema2 = 5, $NumTema3 = 6 atd....)
odkaz:
<a href="'.searchURL('4', '5', '6', '').'">

kdy to může vygenerovat tohle
www.domena.cz/search.php?rstema=4&idpodrubriky=5&idpodrubriky=6
či pomocí rewrite
kdy to může vygenerovat tohle
www.domena.cz/kultura/Stredocesky/Beroun/

Patrně by to nezatěžovalo databázi, ale nějak tomu nemůžu stále přijít na chuť, protože je to opravdu hooodně krkolomné. Jinak samozřejmě změnou názvu rubriky bych si nikdy nemohl být jistý:-)




LinkedIn - Zdeněk Pikulík

Regiony ČR.cz - 1. responzivní zpravodajství z regionů ČR
Medializujeme ČESKO.cz - Revoluční program podpory a modernizace obcí ČR
Obce2020.cz - Moderní řešení profesionálního webu pro obce

Re: Routování odkazů v phprs: Vytvoření funkce na správu a generování odkazů
Zaslán uživatelem/kou: pa3k (IP adresa zaznamenána)
Datum: 2015-03-27, 14:24

ZdenekPNJ napsal/a:
-------------------------------------------------------
> >Zobrať do úvahy len poslednú nemôžeš,
> pretože môže existovať
> kultura/Stredocesky/Beroun/
>
> Proto mne napadlo tu funkci řešit takto, ikdyž
> se mi to zdá kostrbaté
> function searchURL($NumTema = 4, $NumTema2 = 5,
> $NumTema3 = 6 atd....)
> odkaz:
> <a href="'.searchURL('4', '5', '6', '').'">
>
> kdy to může vygenerovat tohle
> www.domena.cz/search.php?rstema=4&idpodrubriky
> =5&idpodrubriky=6
> či pomocí rewrite
> kdy to může vygenerovat tohle
> www.domena.cz/kultura/Stredocesky/Beroun/
>
> Patrně by to nezatěžovalo databázi, ale nějak
> tomu nemůžu stále přijít na chuť, protože
> je to opravdu hooodně krkolomné. Jinak
> samozřejmě změnou názvu rubriky bych si nikdy
> nemohl být jistý:-)

Tak to je teda dosť kostrbaté. Neviem si predstaviť ako bude vyzerať mod_rewrite v .htaccess. A ako sa vysporiadaš s obmedením počtu podrubrík.

Osobne by som to riešil inak. V mod_rewrite hodím všetko na index a v ňom si routovanie zabezpečím rozparsovaním adresy a odovzdaním takto vzniknutých parametrov príslušným modulom.

Čiže: /zobraz-rubriku/15/nazov/podnazov/podpodnazov/
zobraz-rubriku - modul, ktorý budem volať, všetko dalšie odovzdám modulu, ktorý si to ošetrí
15-id koncovej rubriky ktoru chcem zobrazit
/ / / - zvyšok je cesta od koreňa k poslednej (aktuálnej) vetve

Modul pre zobrazenie obsahu rubriky zoberie id, cestu ako parametre, ktoré dostane. Dôležité je tie údaje validovať - ak je v URL niečo iné ako v databáze, presmeruje pomocou header - príslušnej HTTP hlavičky na strávnu adresu. Ak cesta v URL sedí s obsahom databázy, načíta články a vypíše, alebo čokolvek iné čo má ten modul robiť.

Ísť sa na to dá aj inak, no toto mi príde najjednoduchšie a najčistejšie riešenie, ktoré zabezpečí aj fungovanie starých odkazov v prípade zmeny názvov v názvoch rubrík/kategórií.

Stačí nať na to pole, kde indexom bude id koncového bodu rubriky a obsah budú prvky - názvy rubrík od koreňa ku koncu stromu. Celú cestu pre odkontrolovanie dostaneš veľmi rýchlo a databázu tým nemusíš zaťažovať vobec. Toto pole niekde uložíš a vygeneruješ znova pri akejkoľvek zmene v administrácii rubrík. Vznikne ti niečo ako cache.



Lituji, ale pouze registrovaní uživatelé mohou zasílat příspěvky do této sekce.
This forum powered by Phorum and designed by STaNBoSS.