Autor Zpráva
trancemaniac
Profil *
Zdravím, právě řeším pro mně složitější věc, mám v databázi tabulku pages (id, nazev, url, id_dir) a tabulku directory (id, dir_parent, url). A potřebuji pro sitemapu vygenerovat kompletní url s tím, že v podstatě adresář může být např. až ve stý větvi.
Jak by se to tedy dalo udělat. Dotaz na DB asi nebude moc složitý, ale je potřeba zřejmě sestrojit nějakou funkci, která by mi vrátila i tuto adresu www.example.cz/dir1/dir2/dir3/dir4/neco.html.
Díky za rady
WertriK
Profil
Myslíš použití rekurzivní funkce?
trancemaniac
Profil *
V případě, že to nebude příliš náročné pro server. Stránek může být až tisíc, možná i více, takže je třeba, aby pro stránky umístěné v jednom adresáři se nevolala funke x krát, ale jen jednou. Jdu to vyzkoušet......
ninja
Profil
trancemaniac: pokud se hodlate casto dotazovat na hlubokou stromovou strukturu, nevybral jste si dobre zpusob jejiho ulozeni do relacni databaze. Pokud jeste muzete, navrhuji vam zmenit zpusob ukladani na nejaky vhodnejsi pro caste "hluboke" dotazy.
trancemaniac
Profil *
Bohužel s databází nemohu nic dělat, musí to fungovat na této struktuře :(
Aesir
Profil
trancemaniac:
S takovou strukturou se bez rekurze neobejdete. Kešujte si to např. do statického souboru na filesystém a ten přegenerujte jen, pokud se v administraci udělá změna ve struktuře stránek. Sekce se snad tak často nepřidávají, aby to složilo server a v sitemapě koncové stránky (neco.html) stejně asi nemáte.
joe
Profil
Dá se to udělat několika způsoby. Volil bych asi podle toho, kolik řádků je v tabulkách a jak často se bude sitemapa generovat. Je možné buď do dvou polí uložit všechny řádky z pages a directory a ty pak pomocí cyklu while pospojovat. Nebo opět pomocí while, že pro každý řádek z pages zavolám nový dotaz(y) a tak při jednom průchodu hlavním while cyklem vytvořím celou cestu k souboru z pages.
Rekurzi bych volil až na třetím místě, takže určitě to jde udělat jinak než s ní. Navíc všechno co je rekurzí by mělo jít přepsat na nerekurzivní.
trancemaniac
Profil *
Tak zatím jsem ryhle vytvořil složení cesty z adresářů, připojit nakonec odpovídající stránky by snad neměl být problém. Menší věc je, že mi to, když to není root, vrací na začátku 2 lomítka, ale to je jen detail.
function create_url($id_dir)
{ // BEGIN function create_url

$select = "SELECT * from directory where id = $id_dir  order by id";

$res = mysql_query($select);
$row = mysql_fetch_assoc($res);
	
$url = $row['url'];
$dir_parent = $row['dir_parent'];

  // neni url = root
  if ($url == NULL) {
  	return "/";
  }
  
  if ($dir_parent == $id_dir) {
  	return $url;
  }
  
  $fullurl = create_url($dir_parent)."/".$url;
  return $fullurl;
  
} // END function create_url
	

$select = "SELECT * from directory order by id";

$res = mysql_query($select);
while ($row = mysql_fetch_assoc($res)) {
	$dirid_array[] = $row['id'];
}

//echo $url_array[0];

$index = 3;
echo create_url($dirid_array[$index]);



Chci se zeptat zda jsem to napsal dobře nebo jsou tam nějaké mouchy?
joe Tabulka directory má cca 10-15 řádků, tabulka pages může mít od 100 do 1000 a kldině i víc. Ještě tedy prozkoumám tvoje řešení.

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: