Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Valittu linkki paksuksi

Sivun loppuun

JyKKemus [31.01.2008 16:21:58]

#

Miten kannattaisi tehdä menu jossa näkyisi paksunnettuna se linkki jonka on valinnut?

Lähin kehittää sitä täl tavalla

<?php

$linkit = array("Etusivu", "Henkilökunta", "Kuvia", "Tapahtumat", "Yhteystiedot");

for($i=0; $i<count($linkit); $i++){

	echo "<a href=\"?page=$linkit[$i]\">$linkit[$i]</a> ";}

?>

Merri [31.01.2008 17:03:05]

#

<?php

$linkit = array("Etusivu", "Henkilökunta", "Kuvia", "Tapahtumat", "Yhteystiedot");

$page = stripslashes($_GET['page']);
if( !in_array($page, $linkit) ) { $page = $linkit[0]; }

?>
<h1>Valikkotesti</h1>
<ul>
<?php for($i=0; $i<count($linkit); $i++){ ?>
    <li><a href="?page=<?php echo rawurlencode($linkit[$i]); ?>"<?php echo ($page == $linkit[$i] ? ' id="valittu"' : ''); ?>><?php echo htmlspecialchars($linkit[$i]); ?></a></li>
<?php } ?>
</ul>

En testaillut, mutta idea selvinnee.

JyKKemus [01.02.2008 10:32:03]

#

Tein oman version tosta

<?php

$linkit = array("Etusivu", "Toiminta-ajatus", "Henkilökunta", "Kuvia", "Yhteystiedot");

for($i=0; $i<count($linkit); $i++){

	$teksti=str_replace("ä","a",$linkit[$i]);
	$teksti=str_replace("ö","o",$linkit[$i]);
	$teksti = strtolower($linkit[$i]);

if($_GET[page] == $teksti) {

	echo "<a href=\"?page=$teksti\"><b>$linkit[$i]</b></a> ";}

else

	echo "<a href=\"?page=$teksti\">$linkit[$i]</a> ";}

?>

EDIT: Vielä kun keksisi miten saa että, jos $_GET[page] on tyhjä niin pakunnetaan etusivu linkki.

Olga [01.02.2008 14:10:16]

#

Ihan ok että teit oman version, mutta kannattaa silti ottaa oppia tuosta Merrin esimerkistä. Ja kysymykseen:

if (!isset($_GET['page'])) $_GET['page'] = "Etusivu";

HeadCheese [01.02.2008 14:53:30]

#

Ainakin tuo stripslashes olisi hyvä olla käytössä, muutenhan tuohon $_GET['page']-muuttujaan saattaa joku laittaa jotain tyyliin "../../".

Merri [01.02.2008 15:10:40]

#

Ei se juuri tässä haittaa kun sivut varmistetaan ennalta määritetystä taulukosta, eikä tuota olla syöttämässä tietokantaan. Tosin, käytin sitä kuitenkin "hyvien tapojen" oppimisen kannalta, koska mikäli jokin erikoismerkki sattuisi olemaan sivun nimessä, niin sitten se olisi pakollinen. Nämä ongelmat nousevat erittäin tärkeiksi sitten kun alkaa esimerkiksi omaa CMS:ää tai blogia kyhätä, mieluummin tekee liian hyvät varmistukset kuin liian huonot.

JyKKemus [01.02.2008 15:33:46]

#

Kyllä käyttäisin tuota merrin ideaa mutta kun en ole niin hyvä php:ssä että ymmärtäisin sen

Merri [01.02.2008 15:48:10]

#

Kysyvä saa tiedon :)

// poista lisätyt merkit, jotka tulee lomaketietoihin tiettyjen merkkien eteen
$page = stripslashes($_GET['page']);

// tarkista löytyykö $page $linkit-taulukosta: jos ei,
// niin aseta $page vastaamaan ensimmäistä linkkiä
// (huutomerkki tekee vastauksesta käänteisen)
if( !in_array($page, $linkit) ) { $page = $linkit[0]; }

// tulostaa sivun nimen linkkiin (urliin) soveltuvassa muodossa
// (omalla kokeilulla joskus todennut että rawurlencode näyttäisi toimivan parhaiten)
<?php echo rawurlencode($linkit[$i]); ?>

// laitettu sulkuihin luettavuuden vuoksi
// ensimmäinen osa ennen kysymysmerkkiä suorittaa vertailun:
// "vastaako $page tällä hetkellä tulostettavaa linkkiä?"
// tämän jälkeen tulee kyllä-osio, jonka jälkeen tulee lopuksi ei-osio
<?php echo ($page == $linkit[$i] ? ' id="valittu"' : ''); ?>

// tulostaa linkin nimen tekstinä siten, että HTML:n
// erikoismerkit kuten < ja > muuttuvat muotoon &lt; ja &gt;
<?php echo htmlspecialchars($linkit[$i]); ?>

JyKKemus [03.02.2008 21:55:01]

#

Mutta onko tossa omassani versiossa jotain huonoa sitten?

Merri [04.02.2008 01:56:15]

#

Pääosin HTML:n ja joustamattomuuden puolella. Jos tähtäimessä olisi jossain vaiheessa jokin hieman isompi projekti tai mikäli koodi tulisi jakoon muillekin jossain vaiheessa, niin silloin ei voisi tehdä noin joustamatonta koodia, vaan olisi parempi käyttää juuri noita tapoja joita esittelin. Ne mahdollistavat esimerkiksi kaikkien merkkien käytön ongelmitta.

HTML:n puolella taas kun tekee linkkivalikkoa, niin se on käytännössä lista -> linkit pitäisi laittaa listaan ja tyylitellä se haluttuun muotoon CSS:llä. Samoin jos haluaa antaa CSS-puolelle enemmän vaihtoehtoja, niin silloin on parempi antaa id tai class valittavalle elementille sen sijaan, että sille laittaa lihavoinnin. Tyylittelyn kannalta lista on myös kivempi, sillä se kasvattaa runsaasti mahdollisuuksia toteuttaa erilaisia valikkoja.

Useimmat PHP-ammattilaiset taitavat myös suositella echon käytön välttämistä, siis että mahdollisimman paljon HTML-koodista olisi <?php ?> -tagien ulkopuolella ja vain välttämätön tulostetaan echolla.

Nämä kolme yllä olevaa kappaletta siis huomioitavissa lähinnä sitten kun tähtää vähän korkeammalle kuin pelkästään omiin sivuihin. Tosin harjoituksen vuoksi on tietysti hyvä huomioida ja opetella näitäkin seikkoja :)

Bugien kannalta on sitten huomioitava, että tuo Olgan tarkistus (isset ja sijoitus) ei yksinään ole riittävä, sillä mitä jos saatkin sivunimen jota ei ole listassa? Omassa ratkaisussani laitoin aina tulemaan etusivun, mutta saatat mahdollisesti haluta näyttää virheilmoituksen sen sijaan. Tässä valikkovaiheessa pystyt näppärästi tarkistamaan asianlaidan käyttäen tuota in_arrayta, sikäli jos sinulla vain on lista sopivassa muodossa, että linkit löytyvät siitä samassa muodossa kuin millä pyynnöt tulevat.

peg [14.02.2008 19:18:01]

#

Ja tälleekin voi tehdä, eli listaa kansiosta linkit ja valitun sivun linkki
on css:llä sitten punainen. esimerkki ja koodi..
http://www.veijola.net/css/linkit/linkit1.php


Sivun alkuun

Vastaus

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

Tietoa sivustosta