Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tietojen tulostaminen tietämättä tulostuksen määrää

dartvaneri [14.05.2012 22:14:02]

#

Tiedän, että otsikko on huono, ja vielä huonommin kuvaa kysymystäni, mutta muuta en keksinyt.

Minulla on sellainen ongelma, etten keksi miten toteuttaisi seuraavan. Tiedän että pyyntöni vaikuttaa "koodatkaa se minulle", mutta olisin kiitollinen, jos onnistuisitte kertomaan miten toteuttaa, niin että itse oppisin jotain.

Seuraava listaus:

-otsikko
--alaotsikko
-----alaotsikko
--alaotsikko
-otsikko

Nuita otsikoita on maarittelemätön määrä, kuten myös alaotsikoita, ja alaotsikoilla määrittelemätön määrä alaotsikoita.
Olisi tarkoitus saada tulostettua nuot kaikki tiedot, ne haetaan tietokannasta(vain sivu seikka). En vain tiedä miten totettaa se.

Metabolix [14.05.2012 22:18:33]

#

Missä muodossa tiedot ovat, tai siis mistä pitäisi tietää, minkä otsikon alle tietty alaotsikko kuuluu?

dartvaneri [14.05.2012 22:21:17]

#

Aivan, no siis minulla on kenttä, jossa on tieto, minkä otsikon/alaotsikon alle se kuuluu.
Eli jos on:
Jos otsikko olisi Murske, ja sen alaotsikko olisi 0-55mm niin sen äitiotsikko on Murske, ja se tieto on tuossa kentässä.

Metabolix [14.05.2012 23:00:25]

#

Olen esittänyt kyseisen kaltaisen puun tulostamisen toisessa keskustelussa (tämä ja tämä viesti yhteensä). Siellä neuvon kokoamaan uuden taulukon, josta selviävät kunkin otsikon alaotsikot.

Toinen vaihtoehto on kiertää aina kaikki rivit läpi ja katsoa, millä niistä on yläotsikkona juuri äsken tulostettu otsikko. Tämä tapa on ehkä yksinkertaisempi toteuttaa mutta hitaampi, jos otsikoita on suuri määrä.

$rivit = array(
	array("otsikko" => "Murske", "ylempi" => null),
	array("otsikko" => "0–55 mm", "ylempi" => "Murske"),
);
function tulosta($rivit, $ylempi) {
	$tulostettavat = array();
	foreach ($rivit as $rivi) {
		if ($rivi["ylempi"] == $ylempi) {
			$tulostettavat[] = $rivi;
		}
	}
	if (!empty($tulostettavat)) {
		echo "<ul>\n";
		foreach ($tulostettavat as $rivi) {
			echo "<li>", htmlspecialchars($rivi["otsikko"]);
			tulosta($rivit, $rivi["otsikko"]);
			echo "</li>\n";
		}
		echo "</ul>\n";
	}
}

tulosta($rivit, null);

Nykyisen taulusi (ja siten myös tämän mallikoodin) ongelma on, että et voi samaan aikaan tehdä sivuja A/X/Y ja B/X/Y, koska silloin taulussa olisi kaksi X/Y-riviä, joita ei voisi erottaa toisistaan. Siksi kannattaa käyttää viittauksissa otsikon sijaan id-kenttää.

Vastaus

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

Tietoa sivustosta