Draudzīgas saites būvēšana

16
Dec
2

Kā jau ierasts, runa ir par informācijas meklētājiem draudzīgām saitēm, izmantojot mod_rewrite moduli. Principā saites ģenerēšana vairumā gadījumu nav sarežģīts process, šī lieta tiek sarežģīta brīdī, kad izejot no vienas lapas, nepieciešams saražot lielu daudzumu citu saišu – visbiežāk meklēšana vai lapas karte.

Iepriekš savos rakstos esmu parādījis, kā nevajadzētu darīt, diemžēl, šoreiz tas izpaliks, jo rakstīšana ar savu jauno mini-datoru nebūt nav tik viegla. Biežāk izmantotais risinājums šai problēmai saistās ar pieprasījumu veidošanu uz datubāzi ciklā, patiesībā cikls ciklā – tiek atrasti vajadzīgie ieraksti datubāzē, ciklējot caur ierakstiem tiek izsaukta saites ģenerēšanas funkcija, kas arī satur ciklu.

Mans risinājums. Atkal pieņemam, ka strādājam ar klasisko koka struktūru.

+----+-----------+----------+----------+
| id | parent_id | name     | url      |
+----+-----------+----------+----------+
| 1  | 0         | Sākums   | home     |
+----+-----------+----------+----------+
| 2  | 0         | Kontakti | contacts |
+----+-----------+----------+----------+
| 3  | 1         | Raksti   | news     |
+----+-----------+----------+----------+
| 4  | 1         | Foto     | photo    |
+----+-----------+----------+----------+
| 5  | 2         | Karte    | map      |
+----+-----------+----------+----------+

Lai mums katru reizi nevajadzētu pieprasīt sadaļu sarakstu no jauna, saglabājam vajadzīgo masīvā, izejot no funkcijai padotās sadaļas id, izveidosim saiti.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?
  function url($id){
    global $urldata;
	if(!is_array($urldata)){
	  return false;
	}elseif(!array_key_exists($id,$urldata)){
	  return "";
	}
	$url=$urldata[$id][0];
	$url.=$urldata[$id][1];
	return $url;
  }
  $urldata=array();
  $sql="SELECT id, parent_id, url FROM `topics`";
  $res=mysql_query($sql);
  while($row=mysql_fetch_object($res)){
    $urldata[$row->id]=array($row->parent_id,$row->url);
  }
?>

Pēc tam jau viss notiek vienkārši :)