Olen miettinyt www-suunnittelu-kysymyksiä tässä. Tavoitteena olisi sivusto, jossa olisi n. 20-30 sivua. Hierarkiassa olisi kolme kerrosta, etusivu, ykköstaso ja kakkostaso.
Jos tällaisen nyt tekee php:llä, niin mitä kaikkia sivuja varten kannattaisi oma erillinen index-sivunsa?
Jos mulla on joku dynaaminen menuelementti, niin kuinka paljon "älyä" siihen kannattaa laittaa? Eli periaatteessahan voisi käyttää samaa navigaatiopalikkaa kaikilla sivuilla, jos se vaan pitäisi lukua siitä millä sivulla kulloinkin ollaan.
Olen koittanut miettiä ns. hyviä ja huonoja puolia liittyen eri toteutusmalleihin, mutta en oikein keksi - ehkä tämä taiteenlaji ei ole mulle niin tuttu, että kokemuksesta tietäisin.
Teillä jotain mielipiteitä / tajuaako tästä pohdinnasta mitä oikeastaan ajan takaa..? :)
itse ainakin huomasin hyväksi laittaa jokaiselle sivuille "parent_of"-kentän. Jos parent_of on 0, niin sivu on ylimmällä tasolla, muulloin se viittaa toisen sivun index-arvoon. Jokaisella sivulla on uniikki index-arvo lähtien numerosta 1 eteen päin.
Tällöin tasoja voi olla äärettömästi, ja navigaatio toimii kaikissa samalla tavalla.
Sivuille voi laittaa myös esim. template kentän, josta "navigaatiomoottorisi" osaa katsoa sivulle ulkoasun (ja sisällön), jolloin voit käyttää useampaa sivupohjaa (etusivu, galleria, tuotelista, yms.).
Sivujen määrä on sen verran pieni, että mikä tahansa toimiva toteutus kelpaa. Jos kaikki sivut ovat samantapaisia (esim. jokaiseen luetaan tekstiä tiedostosta tai tietokannasta) ja niillä on yhteinen pohja, ne voi hyvin laittaa saman PHP-skriptin alle. Kun jokaisella sivulle annetaan oma tunnus, skriptin on myös helppo tietää, millä tasolla kulloinkin mennään.
Näkyvin haitta mikä mieleeni tulee "liian älykkäiden" menujärjestelmien käytöstä, on hakukoneiden indeksointihaluttomuus tällaisia sivuja kohtaan. Jos siis haluat Googlen löytävän sivuistasi jotain etusivun lisäksikin, kannattaa tehdä mahdollisimman monelle osiolle oma sivunsa ja jättää GET-parametrien käyttö minimiin. Vaihtoehtoisesti tämän voi kiertää säätämällä servua muuntamaan em. parametrit hakemistorakenteen muotoon, mutta se on vaikeaa ja muulla kuin omalla servullasi se tuskin onnistuu.
Toisekseen, jos skripti valitsee lähes kaiken sisältönsä dynaamisesti, siitä aiheutuu tietysti hieman tehonkulutusta servupuolella, mikä voi tilanteesta riippuen olla haitaksi. Useampia index-sivuja käytettäessä skriptien tarvitsee joka sivunlatauksella ajaa paljon vähemmän parametritarkistuksia.
Hei, kiitos paljon vastauksista!
Lebe80, jeps, voihan siinä käyttää esim. "1.12.5"-tyyppisiä "lukuja", niin ei tarvitse muistaa sitä tasoakaan erikseen.
Jos tällaiseen menee, niin ovatko numerot parempia, kuin kuvaavammat tekstinpätkät? Varmaankin käyttäjän näkymän kannalta, mutta mites ylläpidon?
En ymmärrä template-kenttä-juttuasi kovin hyvin, voitko heittää jonkun pienen (ei-koodillisen) esimerkin siitä?
Antti L, sivujen luonne tosiaan vaikuttaa asiaan, totta. Ei tullut kirjoitushetkellä vielä mieleen. :)
Tempfile, tosi hyvä toi hakukonepointti. Vaikea arvioida kuinka merkittävä tuo tehonkulutushaitta olisi..
Mutta ainakin sen huomasin (kun tein kolmikielisen menupalikan, joka näytti kulloinkin auki olevan osion linkin eritavalla) että siitä älymenusta voi tulla ihan älyttömän kokoinen tiedosto, ja jos myöhemmin haluaa muuttaa sitä, niin se voikin olla yllättävän vaikeaa..sikäli kun siihen ylipäätään haluaa ryhtyä.
Ei ole tosiaan tullut mieleen olisiko mod-rewrite saatavilla, jos sitä tarkoitit, mutta tässä tapauksessa saattaisi olla.
Kiitos vielä kerran ajatuksistanne!
leisku kirjoitti:
Lebe80, jeps, voihan siinä käyttää esim. "1.12.5"-tyyppisiä "lukuja", niin ei tarvitse muistaa sitä tasoakaan erikseen.
Jos tällaiseen menee, niin ovatko numerot parempia, kuin kuvaavammat tekstinpätkät? Varmaankin käyttäjän näkymän kannalta, mutta mites ylläpidon?
En tajua mitä yrität selittää.
Itse tarkoitin sitä, että jokaisella sivulla voi olla vain yksi sivu, jonka alla se sijaitsee. Tämä ei tietenkään pois sulje sitä, että jonkun sivun alla voi olla useampikin sivu
etusivu
---uutiset
------uutinen 1
------uutinen 2
---nettikauppa
------tuotekategoria 1
---------tuote1
------------tarkemmat tuotetiedot
---------tuote2
---------tuote3
------tuotekategoria 2
---------tuote1
---------tuote2
---------tuote3
-------tuotekategoria 3
---------tuote1
---------tuote2
---------tuote3
...
jne
...
Eli etusivulta pääsee uutiset- ja nettikauppa-sivulle.
tässä etusivun index arvo voisi olla 1, jolloin uutiset ja nettikaupan "parent_of" arvo olisi se 1.
Tällöin sivut voidaan ilmoittaa yhdellä muuttujalla, minkä sivun alla ne sijaitsee.
Jos "parent" sivun paikkaa vaihdetaan, vaihtavat sen alasivut automaattisesti mukana paikkaa.
leisku kirjoitti:
En ymmärrä template-kenttä-juttuasi kovin hyvin, voitko heittää jonkun pienen (ei-koodillisen) esimerkin siitä?
etusivulla olisi template "etusivu.php"
uutisilla "uutiset.php"
nettikaupalla "nettikauppa.php"
ja jokaisella tuotteella "nayta_tuote.php"
Antamani esimerkin mukaisesti tiedot tulisivat mysql-tauluun suunnilleen näin
index | parent_of | template | title ======================================== 1 | 0 |etusivu.php | Etusivu 2 | 1 |uutiset.php | Uutiset 3 | 1 |kauppa.php | Nettikauppa 4 | 2 |lueuutinen.php| Uutinen 1 5 | 2 |lueuutinen.php| Uutinen 2 6 | 3 |kategoria.php | Puuseipäät 7 | 6 |naytatuote.php| Seiväs 1 8 | 6 |naytatuote.php| Seiväs 2 9 | 6 |naytatuote.php| Seiväs 3 ...
Moi,
Kiitos selvennyksestä. Yritän tosissani oppia tätä, ja tehdä jutun jotenkin fiksusti - voi kyllä olla että vaikutan aika pöljältä, mutta sille en tässä vaiheessa voi paljokaan.
Tuon puurakenne-hierarkia jutun tajuan suunnilleen.
Jos siis siirrät parent-sivua (hakemistorakenteessa), niin muutos on varmaan merkittävä myös tuonne tauluun, mutta mitään muuta ei sitten tarvikaan tehdä?
Se mitä itse selitin, liittyi lähinnä siihen,että nythän noi index-luvut eivät itsessään paljasta millä tasolla ko. sivu on, esim. kuinka syvällä se on hierarkiassa. Ja rupesin miettimään onko tämä nyt hyvä vai paha asia..vaikka itse asiassa kannattaisi varmaan vaan alkaa tekemään.
En ole tietokantojen kanssa ollut just missään käytännön tekemisissä, mutta toi vaikuttaa tosi kätevältä mitä esität. Tohon voisi kai laittaa suoraan seuraavaan riviin (EDIT: sarakkeeseen!!) varsinaiset sisällötkin.
Löytyykö tästä aiheesta jotain verkkotutoriaalia tai oppikirjaa? PHP-perusteet on jotenkin hallussa, tietokannoista vain teoriaa.
https://www.ohjelmointiputka.net/oppaat/opas.
Tuosta saa varmaan jo hieman perusteita haltuun :)
Jaksaisiko joku selittää miten pääsisin kiinni tähän, eli miten pääsisin antamaan sen ekan "CREATE TABLE"-komennon..?
Antin oppaasta (kiitos myös Tuomakselle vinkistä) ymmärsin että ssh shellistä voisi jotenkin logata sisään hallintaohjelmaan, ja luoda taulun vaikkapa sitä kautta? Yritykset tyyliin "mysql -u tunnus -p salasana" ei kuitenkaan tuota mitään järkevää, ainoastaan listan mysql-komennoista. Tulkitsenko väärin esimerkit?
Kiitos jo etukäteen. :)
"CREATE TABLE" -kyselyn voi antaa samalla tavalla kuin minkä tahansa muunkin kyselyn, eli tietokannan avaamisen jälkeen funktiolla mysql_query. Tosin joku kunnollinen hallintaohjelma (esim. MySQL-Front) helpottaa asioita.
Skriptin tehokkuudesta sinun ei kannata murehtia - PHP on niin nopea, että 30 sivun muodostaman rakenteen läpikäynnistä sivunlatausta kohden ei juuri mitenkään saa hidasta.
Minä kyllä pitäytyisin tavallisissa tekstitiedostoissa tietokannan asemesta, mutta molemmat tavat kelpaavat!
Alan olla kanssa sitä mieltä, että ei ehkä kannata laittaa tähän tietokantaa mukaan. Mm. sivuston koon, ja sitten sen takia, että siihen pitäisi varmaan itse tehdä sitten joku päivitystyökalu, ja vaikka sellainen voisi itseltä onnistuakin, voi olla etteivät talon tädit ja sedät oppisi sitä koskaan.
Se mikä tuossa mallissa taas olisi houkuttelevaa, olisi se, että esim. sivukartan voisi generoida niin helposti ihan vaan indeksien ja parentOfien perusteella. Oi.
No, olisi *silti* kiva kokeilla sitä mysql:iä, jos ei muuten niin omaksi iloksi.
Antti, noin olin yrittänytkin.. ongelmana oli, että se ei jostain syystä halunnut luoda index-nimistä kenttää (saraketta?) sinne tauluun. -> mulla oli sellainen mukana siinä taulun-luomiskomennossa.
Ehkä se on varattu sana tai jotain? Kun jätin sen pois, niin sitten alkoi sujua. Kiitän kärsivällisyydestä :)
Jos ei mysql ole tuttu, niin netissä on paljon ilmaisia MySQL työkaluja mm. phpMyAdmin, jolla mySQL taulujen luonti/kopionti/muokkaus on erittäin helppoa.
Näillä työkaluilla esim. alkuarvojen asettelu on helppoa ja nopeaa.
phpMyAdmin (selainpohjainen työkalu)
http://www.phpmyadmin.net/home_page/
mySQL administrator (exe)
http://dev.mysql.com/downloads/administrator/
===================
Ja tuosta omasta sivuhierarkiastani:
Syvyyden voi tutkia pienellä purkkakoodilla, kun lähtee kulkemaan "parent_of" arvoja pitkin puuta ylöspäin.
Syvyyttä ei kannata kantaan sijoittaa, silloin koko idealla ei ole juurikaan järkeä ja "sivuja" siirtelemällä syntyy helposti virheitä.
Pelkällä "syvyys" arvosta ei itseasiassa ole edes mitään hyötyä, ei ainakaan tule mitään mieleen. Enemmänkin pidän tuota "parent_of" arvoa tärkeämpänä, mikä ilmoittaa suoraan minkä sivun alla sivu sijaitsee.
Pelkkä parent_of (vai pitäisikö olla child_of ;) ei riitä, jos on tarkoitus järjestellä sivuja myös samalla hierarkiatasolla. Usein tähän on tarvetta. Tämän takia tarvitaan toinen muuttuja, joka ilmoittaa, minkä sivun jälkeen ko. sivu on. Voisi olla vaikka little_sister_of.
Esimerkki sivuhierarkiasta:
- sivu1 (child_of = "-", little_sister_of = "-")
- sivu2 (child_of = "-", little_sister_of = "sivu1")
-- sivu3 (child_of = "sivu2", little_sister_of = "-")
--- sivu4 (child_of = "sivu3", little_sister_of = "-")
-- sivu5 (child_of = "sivu2", little_sister_of = "sivu3")
- sivu6 (child_of = "-", little_sister_of = "sivu2")
Lisäksi tarvitaan logiikat sivujen siirtämiseen hierarkiassa.
Olen itse toteuttanut tällaisen omaan CMS:ääni ja hyvin toimii. :-)
"child_of" tietenkin :D
itsellä oli tietenkin pelkkä "parent_id", josta sen enempää muistelematta kirjoitin tänne "parent_of".
Hyvä että korjasit, tuntuu paljon loogisemmalta nyt niille, joilla ei ole käsitystä asiasta.
edit:
tuo "little_sister_of" sarakekin on hyödyllinen, tosin, itse käytin aakkostusta.
Jeps, itsekin käytin aakkostusta aiemmin, mutta taviskäyttäjän kannalta se ei ole paras mahdollinen.
Tuon järjestmisen voi myös hoitaa ihan järjestysnumerolla. Niin olen itse sen tehnyt muutamiin sovelluksiini.
Järjestysnumeroitakin olen käyttänyt, mutta ne eivät näyttäneet hyvältä käyttöliittymässä. Toki ne voi piilottaa loppukäyttäjältä.
Lisäksi hiukan ongelmallinen on tilanne, jossa kahden peräkkäisen sivun väliin halutaan tuoda uusi sivu. Silloin olisi kaikkien uuden sivun jäljessä (samalla hierarkiatasolla) tulevien sivujen järjestysnumerot päivitettävä (kasvatettava yhdellä) jokaisen muutoksen yhteydessä. Käyttämällä little_sister_of -ratkaisua tarvitsee tehdä ko. muutos vain ensimmäiseen jäljessä tulevaan sivuun. Sama homma, jos sivua siirretään hierarkiapuussa tai poistetaan kokonaan (tällöin jäljessä tulevien sivujen järjestysnumeroa olisi pienennettävä yhdellä, jotta järjestys säilyy).
Mutta mjoo.. kyllä järjestysnumerotkin toimivat, vaikka eivät olekaan yhtä yksinkertainen ratkaisu kuin little_sister_of. ;-)
Ja vaikka käyttäisi järjestysnumeroita tai little_sister_of:ia, voi silti tarvittaessa ottaa sivut myös aakkosjärjestyksessä ulos kannasta.
Aihe on jo aika vanha, joten et voi enää vastata siihen.