Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Miten kannattaisi toteuttaa?

Sivun loppuun

JyKKemus [30.07.2007 10:35:44]

#

Eli miten kannattaisi toteuttaa sillanen että jos sivulle tulee vaikka 100 eri linkkiä ja haluat jakaa ne aiheisiin niin miten sen saa php:lla että ne tulostuu siten että aihe alueen alle aina sen linkit ja sit tulostuu uusi aihe alue ja sen linkit siihen?

Olga [30.07.2007 11:07:01]

#

Jotenki seuraavasti, olettaen että jostain on saatu vastaavanlainen kategorian mukaan järjestetty linkkitaulukko:

<?php
$categories = array("zup" => "Category_1", "zap" => "Category_2", "zep" => "Category_3");
$links = array(
  array("url" => "http://www.google.com/", "cat" => "zup"),
  array("url" => "http://www.altavista.com/", "cat" => "zup"),
  array("url" => "http://www.zorro.fi/", "cat" => "zep"),
  array("url" => "http://paavi.com/", "cat" => "zap"));

$tempCat = null;

print "<dl>";

foreach ($links as $link)
{
  if ($tempCat != $link['cat'])
    print "<dt>" . $categories[$link['cat']] . "</dt>";

  print "<dd><a href='" . $link['url'] . "'>" . $link['url'] . "</a></dd>";
  $tempCat = $link['cat'];
}

print "</dl>";
?>

Ei varmaan toimi suoraan, mutta idean saanee selville.

JyKKemus [31.07.2007 10:17:46]

#

vielä pitäis mysql tehä tollanen

Olga [31.07.2007 10:35:26]

#

Vähän oma-aloitteisuutta kehiin jo.

<?php
$query = "SELECT li.url, cat.category " .
         "FROM link li " .
         "LEFT JOIN category cat " .
         "ON li.category_id = cat.id " .
         "ORDER BY cat.category ASC";

$result = mysql_query($query, $dbConn);
$links  = array();

while ($row = mysql_fetch_assoc($result))
  $links = array("url" => $row['url'], "category" => $row['category']);

$tempCat = null;

print "<dl>";

foreach ($links as $link)
{
  if ($tempCat != $link['category'])
    print "<dt>" . $link['category'] . "</dt>";

  print "<dd><a href='" . $link['url'] . "'>" . $link['url'] . "</a></dd>";
  $tempCat = $link['category'];
}

print "</dl>";
?>

Edelleen, ei varmaankaan toimi suoraan, mutta idean saanee selville.

JyKKemus [31.07.2007 11:17:45]

#

no kiitos mut ei olisi tarvinnut tehdä koodia

JyKKemus [01.08.2007 06:58:16]

#

Eipä onnistunut multa koodin tekeminen, käytän kahta taulukkoa, toisesta tulee linkkien tiedot ja kategorian id ja toisessa on kategoriat ja niiden numerot

ajv [01.08.2007 07:34:39]

#

No niinhän tuossa Olgan esimerkissäkin haetaan samanlailla kahdesta taulusta. Tuossa MySQL-versiossa ei tarvita kahta silmukkaa, mutta jääköön kotitehtäväksi sen ensimmäisen poistaminen...

JyKKemus [01.08.2007 08:30:21]

#

Millasia tauluja muka on tuossa käytetty kun en osaa käyttää LEFT JOINia, ymmärtääkseni taulujen nimet ovat category ja cat

ajv [01.08.2007 08:33:27]

#

Tuossa Olgan esimerkissä taulujen nimet ovat link ja category, joille muodostetaan aliakset li ja cat (FROM link li LEFT JOIN category cat). Tuon voi kirjoittaa selkeyden vuoksi myös FROM link AS li LEFT JOIN category AS cat

JyKKemus [01.08.2007 08:55:26]

#

miten mä saan ne sillee et jos on sama kategoria niin tulostuu linkki siihen ja jos taas eri niin tulostuu linkki

ajv [01.08.2007 08:58:38]

#

Täh? :)

JyKKemus [01.08.2007 09:00:29]

#

siis et ne ulostuu kategorioittain

ajv [01.08.2007 09:05:01]

#

No tuossahan on esimerkki siihen, ei tota ton selkeemmin voi selittää. Jos perusteet on hukassa, niin kannattaa lukea noita oppaita ja tehdä yksinkertaisempia harjotuksia ensin.

JyKKemus [01.08.2007 09:29:25]

#

<?php

include('files/yhteys.php');

$query = "SELECT li.url, li.nimi, li.info, cat.name " .
         "FROM linkit li " .
         "LEFT JOIN linkit_category cat " .
         "ON li.category_id = cat.id " .
         "ORDER BY cat.name ASC";

$result = mysql_query($query, $yhteys);
$link  = array();

while ($row = mysql_fetch_assoc($result)) {

	$link = array("url" => $row['url'], "url_nimi" => $row['nimi'], "url_info" => $row['info'], "category" => $row['name']);

$tempCat = null;

print "<dl>";

	if ($tempCat != $link['category'])

	print "<dt>" . $link['category'] . "</dt>";

	print "<dd><a href='" . $link['url'] . "' title='" . $link['url_info'] . "'>" . $link['url_nimi'] . "</a></dd>";

$tempCat = $link['category'];

print "</dl>";}
?>

En tiedä mikä tost puuttuu/on väärin

Olga [01.08.2007 10:52:13]

#

Tuo $link-taulukko on turha, samalla tavoin voit lukea arvot suoraan $row-taulukosta, joka saa arvonsa while-silmukan jokaisen kierroksen alkaessa. Tuo $tempCat-muuttujan alustus pitäisi siirtää silmukan ulkopuolelle, sillä nythän $tempCat on taatusti joka kerralla eri kuin kategoria, sillä se on aina null. Samoin listan avaustagin tulostus pitää siirtää silmukan ulkopuolelle, sillä eihän sitä pidä jokaiselle linkille tehdä erikseen. If-lauseen muotoilu on vähän kummallinen. Joko laitat kaarisulkeet sen vaikutusalueen ympärille, tai laita edes tuo print-lause sen jälkeiselle riville ja sisennä hieman. Ja myöskään lopettavaa dl-tagia ei tarvi tulostaa jokaisella kierroksella, vaan ainoastaan linkkilistan lopuksi. Varmaan on vielä muutakin hämminkiä, mutta nuo nyt pisti aluksi silmään.

Edit: Ja tosiaan tuossa edellisessä esimerkissä se yksi silmukka on turha, mutta halusin vain havainnollistaa, miten saat tietokannan avulla (suunnilleen) ensimmäistä esimerkkiä vastaavan tilanteen aikaan. Eli tilanteen, jossa sinulla on taulukossa nuo kaikki linkit ja kategoriat.

JyKKemus [01.08.2007 11:19:31]

#

Nyt sain toimimaan, ISO KIITOS TEILLE JOTKA AUTOITTE MUA


Sivun alkuun

Vastaus

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

Tietoa sivustosta