Autor Zpráva
H13
Profil
Ahoj, potřeboval bych poradit, jaký způsob mám vybrat pro automatické tvoření url

Mám vlastní třídu, která tvoří url (pouze zjednodušený náčtrt)

class Url

metoda:

function vratUrl ($url, $action, ...) {
$vrat_url = '<a href="' . $url . '?id=VALUE&action=' . $action . '"></a>';
return $vrat_url;
}



a teď jaký způsob mám použít (kvůli rychlosti, paměti, atd...)

1. způsob - vytvořím nový objekt $akce. Do něj se vloží nově vytvořený url. Pak při výpisu z databáze (např. 50 různých id) změní v cyklu while hodnotu "VALUE" na konkrétní "id"

$akce = new Url;
$url = $akce->vratUrl('index.php', 'edit');
cyklus while (výpis id z databáze)
$url_id = str_replace ("VALUE", $row[0], $url);


2. způsob - Přímo ve třídě Url , v metodě vratUrl vytvořím parametr "$id". Vytvořím nový objekt, při výpisu z databáze se bude provádět u každého "id" metoda vratUrl
function vratUrl ($url, $action, $id...) {
$vrat_url = '<a href="' . $url . '?id=$id&action=' . $action . '"></a>';
return $vrat_url;
}


$akce = new Url;
cyklus while (výpis id z databáze)
$url = $akce->vratUrl('index.php', 'edit', $row[0]);

Takže jde o to jestli je v cyklu, který vypisuje z databáze třeb 50 různých id, mám prohnat

1. funkci str_replace -> [i]$url_id = str_replace ("VALUE", $row[0], $url);

nebo
2. metodu vratUrl -> $url = $akce->vratUrl('index.php', 'edit', $row[0]);
K
Profil *
tak tohle vubec nechapu.. asi to bude tim ze si uvedl blby priklad..
jelikoz ty volas fci ktery predas sice parametry ale ty prece ty parametry kdyz je znas muzes zapsat rovnou do toho url <a href="' . $url . '?id=$id&action=' . $action . '"> a nemusis na to mit zvlast fci.

Spis bych dal ten sql dotaz do ty fce vratUrl() a posilal bych ji porametry potrebne k ziskani id. pac ten sql dotaz tak budes mit napsanej jen jednou a budes mit celkove kratsi kod a bude to u prehlednejsi..

function vratUrl ($url, $action, parametry_pro_query) {
$id=$this->db_vratID(parametry_pro_query);
$vrat_url = '<a href="' . $url . '?id=$id&action=' . $action . '"></a>';
return $vrat_url;
}

function db_vratID (parametry_pro_query) {
DB::QUERY("xxx"); //nakej dotaz vratis id
return $id;
}

$akce = new Url;
$url = $akce->vratUrl('index.php', 'edit', 'parametry_pro_query');
H13
Profil
jelikoz ty volas fci ktery predas sice parametry ale ty prece ty parametry kdyz je znas muzes zapsat rovnou do toho url <a href="' . $url . '?id=$id&action=' . $action . '"> a nemusis na to mit zvlast fci.

proměnné $url, $action se mění v průběhu běhu skriptu, kdyby šlo o jednu url a o jednu akci, samozřejmě bych nevymýšlel novou třídu (metodu). Tato metoda prostě vytvoří url pro každý vypsaný řádek z databáze:

vytvořená tabulka z databáze:
hlavicka ==> |popis | popis | akce1 | akce2| atd
1.radek ==> |data | data | <a href=$url?$action=smazat> | < a href=$url?$action=upravit> | atd

Vhodit to přímo do funkce bych asi nezvládl, protože při běhu skriptu vytvářím objekty pro:
- Smarty
- MDB2
- HTML_Quick_Form
- HTML_Table
- Auth

S mým znalostma nedokážu propojit vytvořené objekty s novou třídou, takže místo abych vypisoval url ručně při tvorbě nového objektu, chci si pomoct jednoduchou třídou, která prostě tvoří url z proměnných, jejíchž obsah se tvoří v průběhu skriptu
H13
Profil
Zajímalo by mě taky všeobecně, zda je rychlejší přístup k funkci php, nebo k metodě ve vlastní třídě, díky
K
Profil *
Nevim to 100% ale logicky je rychlejsi pristup k phpovske fci nez k tvy. Jakym zpusobem ted teda vypisujes url v templejte? {co?} jelikoz z toho predchoziho sem moc nepochopil co chces rict(ale muj mozek ted pracuje hodne pomalu takze to muze byt tim:-D)
H13
Profil
skript: $smarty->assign("outcome", $table->toHtml())
tpl: {$outcome}


: - ) do template se dostavaji kompletni data az na konci, mezi tim projdou vytvorenim objektu "smarty", zjistenim, zda je uzivatel prihlasen "auth, mdb2, html_quick_form", vytvorenim dotazu "mdb2", zjistenim vysledku "mdb2_result", prirazenim k vysledkum akce (třída vratUrl) no a nakonec se výsledky "vpusti" do šablony.

asi tedy použiji:
$url_id = str_replace ("VALUE", $row[0], $url);
protože tady mám jeden výsledek v jedné proměnné, kterou v cyklu proženu funkcí str_replace - to znamená např. 50 x str_replace, než použít následující řádek, kde bych cyklem while proháněl metodu vratUrl např. 50 x...

$url = $akce->vratUrl('index.php', 'edit', $row[0]);//$row[0] ... id řádku, ke kterému se přiřadí jednotlivé akce.

Myšlenku, vypsat do funkce řetězec "VALUE" a poté ho nahradit ve skriptu dle potřeb (tedy místo VALUE vložit hodnotu "id" z databáze) mám z Velký knihy PHP5 MySQL od Gilmoreho - samozřejmě může platit, že jsem použil správnou metodu na nesprávným místě
Toto téma je uzamčeno. Odpověď nelze zaslat.