Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: treeview, polku taulukkoon

manninen [01.02.2014 17:39:56]

#

Hei!

Aikoinaan kysyin putkassa, miten kannattaisi lähteä rakentamaan puumaistarakennetta, miten luoda tietokanta yms. Hyviä ideoita tulikin ja niiden pohjalta aloin etsimään lisää materiaalia netistä.

Löysinkin hyvän, toiminvan esimerkin josta räätälöin yhdessä jQueryn kanssa itselleni kaipaamani version.

http://phpflow.com/php/how-to-create-dynamic-tree-view-menu/

Tuossa linkki esimerkkiin, jonka nappasin. Kansiorakenne muodostuu juuri kuten pitääkin.

Sain kuitenkin aikaan itselleni toisenlaisen ongelman. Haluaisin koko polun talteen aina kansiolle asti, 0,2,6,15 jne.. Nämä kaipaisin taulukkoontai sessioon. Kunan saisin ne :). Viitsisikö kukaan neuvoa miten minun kannattaa nämä lähteä hakemaan. Olen koittanut ne taulukkoon saada napattua. En kuitenkaan saa logiikkaa ymmärtämään, milloin kyseinen taulukkoonon lopetettava ja milloin aloitettava uudelleen, jotta jokaiselle kansiolle tulee oma polkunsa kokonaisuudessaa. Kiitos

Metabolix [01.02.2014 17:44:39]

#

Miksi sinun pitäisi laittaa polku valmiiksi talteen istuntoon? Kun tiedät, missä ollaan, voit selvittää polun helposti silmukalla kulkemalla takaperin juurta kohti.

manninen [02.02.2014 11:30:24]

#

Tarvitsisin polun toiselle sivulle.

Valittuani valintaruudusta, esim kansion neljä. Siirryn toiselle sivulle, jonne kuljettaisin taulukon mukanani myöhempää käyttöä varten.

Metabolix [04.02.2014 22:56:42]

#

Voisitko vielä selittää, mikä tässä on ongelma? Siis mitä tietoa sinulla on ja mitä siitä pitäisi muodostaa?

Yksittäisen paikan polku muodostetaan rekursiolla kätevästi näin:

function polku($p) {
	return array_merge(juuri($p) ? [] : polku(ylempi($p)), [$p]);
}
// function juuri($p): palauta, onko $p puun juuri.
// function ylempi($p): palauta $p:tä ylempi solmu.

Esimerkki toiminnasta keinotekoisella puulla, jossa i:n lapset ovat 2*i ja 2*i+1:

function juuri($i) {
	return $i == 1;
}
function ylempi($i) {
	return intval($i / 2);
}
echo "10 @ ", implode(",", polku(10)), "\n";

Puun tulostusvaiheessa taas polkua voi ylläpitää näin:

function tulosta($puu, $polku = []) {
	$polku[] = $puu;
	echo $puu, " @ ", implode(",", $polku), "\n";
	foreach (lapset($puu) as $lapsi) {
		tulosta($lapsi, $polku);
	}
}
// function lapset($p): palauta $p:n lapset.

Esimerkki toiminnasta keinotekoisella puulla, jossa i:n lapset ovat 2*i ja 2*i+1:

function lapset($i) {
	return ($i < 5) ? [$i*2, $i*2+1] : [];
}
tulosta(1);
1 @ 1
2 @ 1,2
4 @ 1,2,4
8 @ 1,2,4,8
9 @ 1,2,4,9
5 @ 1,2,5
3 @ 1,3
6 @ 1,3,6
7 @ 1,3,7

manninen [04.02.2014 23:48:43]

#

Perehdyn huomenna asiaan paremmin ja ilmoitan jos ongelmia on. Kiitoksia tästä esimerkistä.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta