Jump to content
php.lv forumi

par n leveļu navigācijas veidošanu


ezs

Recommended Posts

  • Replies 35
  • Created
  • Last Reply

Top Posters In This Topic

Ļoti šaubos vai tas pāatrina darbošanos ar to koku (ja tiek runāts par šādu vienkāršu hierarhisku izvadīšanu).

Pie tam, ja koks būs daaaudz lielāks, tad visu datu izvilkšana tā vai tā iebremzēs un būs relatīvi ilgāka nekā tā apstrāde.

Link to comment
Share on other sites

bubu

 

ja funckija iekļauj sevī queriju un, ja viņa ir rekursīva, tad kveriju skaits = ierakstu skaitu :)

 

pietam pamēģini paskatīties cik laika aizņem ierakstu selectošana un izvadīšana. piemēram tīri praktisks piemērs no dzīves: viens selects uz 400 ierakstiem aizņem ~0.002sec, bet izvade ~0.03sec. nu ok pie izvades tur nedaudz if`i samesti pēc vajadzības :)

Link to comment
Share on other sites

Paldies ohmygod.

Mazliet pielaboju Tavi kodu, daudz neko namīnīju, bet man neizdodas izdomāt kā šamo piedzīvināt tas ir lai tiktu atlasīti visi dati hierarhiskā secībā no pirmās līdz pēdējai

 

Kā $hierarchy padodam pamatkategorijas kārtas numuru. $id un $parent_id abi vienādi - pamatkategorija.

mēģināju man nesanāk :( jo piemēram nav zināms $hierarchy sākumā 0 tak :)

vai lūdzu varētu bik apstāstīt par savu kodu bik vairāk

Paldies jau iepriekš te manis pārveidotais kods:

<?
 function getParents($id, $parent_id, $hierarchy)
{
	$ide = $id;
	$sql = "SELECT id, name FROM main where sadid = '".$id."'";
	echo $sql;
	$query = mysql_query($sql) or die(mysql_error());
	$i = 0;
	while ($row = mysql_fetch_array($query)) {
		$i++;
		$hierarchy2 = $hierarchy . '.' . $i;
		$this->groupHierarchy[$parent_id][] = array('id' => $row['id'], 'hierarchy' => $hierarchy2, 'name' => $row['name']);
		getParents($row['id'], $parent_id, $hierarchy2);
	}
}

$id = '1';
$parent_id = '0';
$hierarchy = '';
echo getParents($id, $parent_id, $hierarchy);
?>

Link to comment
Share on other sites

Kas vainas vecajam kodam? (tas kas pirmajā postā parādīts)

Pievienojot to, ko es teicu te http://php.lv/f/index.php?s=&showtopic=336...indpost&p=26455 dabū šo:

<?php
function show_menu($id=0, $path="") {
	$all = mysql_query("SELECT id, name FROM main WHERE parent_id=$id ORDER BY id ASC");
	if (!$all) { 
		echo mysql_error();
	} else {
		if (mysql_num_rows($all)) {
			echo '<ul class="id_nav"'.($id==0?'id="tree"':'').'>';
			$i=0;
			while ($row = mysql_fetch_array($all)) {
				$i++;
				$newPath = $path .($path==''?'':'.'). $i;
				echo '<li>'.$newPath.'<a class="nav" href="?id='.$row['id'].'">'.$row['name'].'</a>';
				show_menu($row['id'], $newPath);
				echo '</li>';
			}
			echo '</ul>';
		}
	}
}
show_menu();
?>

Link to comment
Share on other sites

mēģināju man nesanāk :( jo piemēram nav zināms $hierarchy sākumā 0 tak :)

vai lūdzu varētu bik apstāstīt par savu kodu bik vairāk

Paldies jau iepriekš te manis pārveidotais kods:

tev sākumā ir kverijs, kurš atlasa pamatkategorijas. Lai arī kā tās tev būtu iezīmētas. Piemēram

SELECT * from cat WHERE parent_flag ='Y'

vai

SELECT * from cat WHERE child_id = parent_id

nu da pēc jebkādas pazīmes, kas tev izdos pašu pirmo kategoriju pakāpi!

Un tad jamās pārlasot

tu ar

$i=1

WHILE(blaa blaa blaa){

getParents($row['id'], $row['id'], $i);

$i++;

}

 

iegūsti visu kategoriju koku!

getParents iegūst tikai apakškategorijas visam, kas ir sākot no otrās pakāpes. Pirmā tev jāiegūst pa priekšu!!

Link to comment
Share on other sites

  • 3 years later...

Kāds moš var palīdzēt...

tauta.. a kā izskatīsies funkcija kura izmet ara "bernus" kadi noteiktai sadalai un tad turpina vadit ara 1. limena menu...

 

Piem....

 

1. menu

2. menu

2.1 menu

2.2 menu

2.3 menu

3. menu

4. menu

Edited by zimulis
Link to comment
Share on other sites

Nedaudz papildinot bubu senrakstīto kodu, viens no iespējamajiem variantiem, kā tas varētu izskatīties, ir aptuveni šādi:

...
<?php
function show_menu($id=0, $path="") {
	global $izvelnes_elements_kuram_jarada_berni;
	$all = mysql_query("SELECT id, name FROM main WHERE parent_id=$id ORDER BY id ASC");
	if (!$all) {
		echo mysql_error();
	} else {
		if (mysql_num_rows($all)) {
			echo '<ul class="id_nav"'.($id==0?'id="tree"':'').'>';
			$i=0;
			while ($row = mysql_fetch_array($all)) {
				$i++;
				$newPath = $path .($path==''?'':'.'). $i;
				echo '<li>'.$newPath.'<a class="nav" href="?id='.$row['id'].'">'.$row['name'].'</a>';
				if($izvelnes_elements_kuram_jarada_berni == $row['id'] ){
					show_menu($row['id'], $newPath);
				}
				echo '</li>';
			}
			echo '</ul>';
		}
	}
}
$izvelnes_elements_kuram_jarada_berni = 2;//tā menu elementa id, kas jārāda paplašināts
show_menu();
?>

Šis kods gan darbosies tikai sarakstam ar diviem līmeņiem, manuprāt.

Link to comment
Share on other sites


×
×
  • Create New...