Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: URL tyyli

Sivun loppuun

late [10.08.2013 11:41:13]

#

Hei, minulla on tällainen koodi ja haluaisin saada siistimmät URLit:

NYT: http://localhost/index.php?sivu=portfolio
TAVOITE: http://localhost/portfolio

<?php
// HEADER
include("header.php");

// Sisältö sivut
$sivut = array(
    'etusivu' => 'etusivu.php',
    'portfolio' => 'portfolio.php'
);

// Kun sivulle tullaan näytetään etusivu
include($sivut[$_GET['sivu'] ? : 'etusivu']);

// FOOTER
include("footer.php");
?>
<nav>
<ul>
<li>
<a href="index.php?sivu=portfolio">Portfolio</a>
</li>
</ul>
</nav>

Onko tavoite mahdollinen? Koodaan uusia sivuja enkä tällä kertaa haluaisi ottaa mukaan WordPressiä. Kiitän!

tmub [10.08.2013 11:50:28]

#

Iske hakukoneeseen vaikka "url rewrite". Tule sitten kertomaan löysitkö jotain ja jos löysit, miten ratkaisit ongelmasi.

qeijo [10.08.2013 12:05:05]

#

Taas kerran aika hälyttävän näköinen include.

late [10.08.2013 12:54:22]

#

..juu ehkä WordPress on sittenkin ihan hyvä asia maailmassa. Kiitän!

tmub [10.08.2013 12:55:50]

#

late kirjoitti:

..juu ehkä WordPress on sittenkin ihan hyvä asia maailmassa. Kiitän!

Onhan se kyllä suositeltava järjestelmä sinulle käytettäväksi, mutta jos tosiaan joskus haluat olla ammattilainen pitää sinun opetella nämäkin asiat.

The Alchemist [10.08.2013 16:53:25]

#

Melkolailla paskaa tuollainen viritelmä. Itse suosin todellisen polun erottamista ohjelman sisäisistä poluista, koska tällöin polkuja voi vaihtaa lennosta täysin vapaasti.

Php-kielenkin kanssa alkaa olla jo erittäin vanhanaikaista ajattelua, että jokaista html-dokumenttia varten on omat php-skriptinsä. Nykyaikana webbisivutkin ajatellaan kokonaiseksi, eheäksi sovellukseksi, jossa yksi tietty html-dokumentti on vain yksi suorituspolku.

Luulisin jopa WordPressistä löytyvän jotain tämän suuntaista:

<?php

namespace myapp;

use Exception;

/*
 * Määritellään reitit ja testiosoitteet ja ajetaan osoitteita vastaavat funktiot
 */

$routes = [
    'home' => [
        'route' => '/',
        'function' => 'myapp\home',
    ],
    'portfolio' => [
        'route' => '/portfolio',
        'function' => 'myapp\portfolio',
    ],
    'foo' => [
        'route' => '/foo/:id',
        'function' => 'myapp\foo',
    ],
];

$test_urls = ['/', '/portfolio', '/foo/4', '/foo/baz', '/fail'];

foreach ($test_urls as $url) {
    try {
        $match = find_route_match($url, $routes);
        call_user_func_array($match['function'], $match['params']);
    } catch (Exception $e) {
        printf("Invalid URL '%s'\n", $url);
    }
}

/*
 * Tarvittavat funktiot alla
 */

function find_route_match($url, $routes) {
    foreach ($routes as $name => $defs) {
        if (route_matches($defs['route'], $url)) {
            $match = [
                'name' => $name,
                'function' => $defs['function'],
                'params' => parse_route($defs['route'], $url),
            ];

            return $match;
        }
    }

    throw new Exception("No route match found");
}

function route_matches($route, $url) {
    $pattern = preg_replace('/:\w+/', '([\w\d]+)', $route);
    $match = preg_match(sprintf('#^%s$#i', $pattern), $url);
    return $match;
}

function parse_route($route, $url) {
    $parts = explode('/', $route);
    $levels = explode('/', $url);
    $params = [];

    for ($i = 0; $i < count($parts); $i++) {
        $p = $parts[$i];
        if (!empty($p) && $p[0] == ':') {
            $key = substr($p, 1);
            $value = $levels[$i];
            $params[$key] = $value;
        }
    }

    return $params;
}

/*
 * Seuraavat kolme funktiota vastaavat 'sivuja'
 */

function home() {
    print("This is the frontpage!\n");
}

function portfolio() {
    print("Here is my portfolio.\n");
}

function foo($id) {
    printf("Show item #%s\n", $id);
}

Linkkejä luodessa ei kirjoitettaisi absoluuttista todellista urlia vaan annettaisiin jollekin funktiolle vain reitin nimi ja tarvittavat parametrit:

<?php
function build_url($route, $params = []) {
    // ...
}
?>

<a href="<?= build_url('home') ?>">Frontpage</a>
<a href="<?= build_url('portfolio') ?>">Portfolio</a>
<a href="<?= build_url('foo', ['id' => 5]) ?>">Foo #5</a>

late [10.08.2013 20:45:33]

#

Alan kallistua yhä enemmän sen puoleen että jotkin asiat pitää olla valmiiksi koodattuja. Järjetön sotku koodia, parempi hankki Wordpress tyylinen framework ja lähteä sitä kehittämään eteenpäin.

ei pahalla..

tmub [10.08.2013 20:58:09]

#

late kirjoitti:

Alan kallistua yhä enemmän sen puoleen että jotkin asiat pitää olla valmiiksi koodattuja. Järjetön sotku koodia, parempi hankki Wordpress tyylinen framework ja lähteä sitä kehittämään eteenpäin.

ei pahalla..

Vote: Miten luokitellaan framework? Onko WordPress mielestänne samalla tavalla framework kuten esim CodeIgniter tai cakePHP? ;)

hernih [11.08.2013 01:17:48]

#

The Alchemist tarkoitus oli vain näyttää sinulle esimerkki, kuinka tuo kannattaa tehdä. Tuossa ei ole yhtään sotkua, jos vain ymmärrät, mitä se tekee ja miksi jokin asia niin tehdään.

Aloittajan oma koodi on täysin alkeellinen ja pikkupojan tekemä "hello world" - PHP:lla tuotetusta sivusta. Lisäksi, jos noin teet niin sinun koko projektisi tulee olemaan vain yhtä sotkua, ei "sotkua". Joten ehkä kannattaa pysyä siinä Wordpress:ssa, ja siirtyä sitten itse tekemään,kun osaat.

late [11.08.2013 10:38:41]

#

No lisää vettä löylyyn - tehdäänkö web-sivuja enää yrityksille ilman että taustalla pyörii:

- WordPress
- Drubal
- (Joomla)

The Alchemist [11.08.2013 11:54:14]

#

Valmis cms-tason ratkaisu on monesti aika huono. Drupalkin vaatii hirveästi purkkaa monipuoliseen käyttöön. Aitoja frameworkeja kuten Zend ja Symfony käytetään myös paljon. Ne antavat koodarille käyttöön esimerkiksi valmiin mvc-mallin, mutteivät ota kantaa tietotyyppien määrittelyyn tai tietokanta-arkkitehtuuriin. Eikä niissä ole valmiina mitään korkean tason toimintoja kuten käyttäjien rekisteröinti, sisäänkirjautuminen tai "artikkelin lisääminen", vaan sellaiset pitää joko koodata itse tai ladata toisten tekeminä moduuleina.

late [11.08.2013 12:13:25]

#

The Alchemist kirjoitti:

Eikä niissä ole valmiina mitään korkean tason toimintoja kuten käyttäjien rekisteröinti, sisäänkirjautuminen tai "artikkelin lisääminen", vaan sellaiset pitää joko koodata itse tai ladata toisten tekeminä moduuleina.

Etkö juuri vastaa tällä kysymykseen.. eli nykysysteemeissä (yrityksen kotisivut) tarvitaan sisäänkirjautumista, rekisteröintiä, palaute lomaketta ja/tai uutis blogia.

Entä kuvan lisääminen artikkeliin tai videon (graafinen käyttöliittymä). Eli tuntuu siltä että on järkevämpää ottaa nk. valmis pohja ja lähteä sitä viemään eteenpäin. No joo.. ihmettelen WP vastaisuuttanne. Se on toki totta että WP on surkea MVC-tyyppinen ratkaisu koska se ei sitä noudata.

The Alchemist [11.08.2013 13:08:59]

#

No tietysti tavalliset kotisivut, joille huonoilla atk-taidoilla varustetut ihmiset pääsevät syöttämään sisältöä, on kenties lähes aina parempi tehdä valmiin cms:n päälle. Mutta jos halutaan jotain erikoisempaa, niin koodauksen määrä voi olla joka tapauksessa lähes yhtä suuri, käyttipä sitten valmista cms:ää tai jotain abstraktimpaa lähtökohtaa. Itse ainakin mieluummin koodaan ihan oikeaa toiminnallisuutta kuin virittelen purkkakorjauksia cms:n rajoitusten kiertämiseksi.

late [11.08.2013 15:05:23]

#

No olet varmasti 100% oikeassa, olet kokeneempi jne. jne. MUTTA... jos joutuisit rakentamaan itsellesi portfolion (aika: 2kk) niin eikö olisi helpompi valita CMS ja sen päälle/ sisään omaa koodia.

Miksi esim. haluaisit itse koodata tyhjästä palaute lomakkeen?

tmub [11.08.2013 15:19:07]

#

late kirjoitti:

No olet varmasti 100% oikeassa, olet kokeneempi jne. jne. MUTTA... jos joutuisit rakentamaan itsellesi portfolion (aika: 2kk) niin eikö olisi helpompi valita CMS ja sen päälle/ sisään omaa koodia.

Miksi esim. haluaisit itse koodata tyhjästä palaute lomakkeen?

En voi käsittää näitä sinun aikataulujasi. Onko 2kk mielestäsi lyhyt aika rakentaa itselleen portfolio? Tiedätkö edes mikä on portfolio?

Onko palautelomakkeen koodaaminen sinulle jotenkin haastavaa vai mikä tässä on ongelma? Varmaankin yksi yleisimmistä harjoituksista joita webbikoodarit tekevät.

qeijo [11.08.2013 16:13:35]

#

Ei ei, jos portfolion tekemiseen menee oikeasti 2kk, niin huhhu ja moido.

The Alchemist [11.08.2013 16:41:20]

#

Jos mulla olisi portfoliosivuston tekemiseen aikaa pari... tuntia, niin laittaisin vain Drupalin tulille ja siihen muutamat moduulit. Jos mulla olisi vara käyttää moiseen vaikka noin työpäivän verran, niin sitten voisin tehdä ihan mitä tahansa.

late kirjoitti:

Miksi esim. haluaisit itse koodata tyhjästä palaute lomakkeen?

Ihan suoraan sanottuna tyhmä kysymys. Lomake tuskin on koskaan irrallinen kokonaisuus, vaan se liittyy johonkin sivustoon. Tällöin tietysti käytetään niitä mekanismeja, mitkä sivuston rakentamiseen käytetty kehys eli framework/cms/jne. tarjoaa.

Jos sivusto olisi tehty perseelleen eli tuolla aloitusviestissä esittelemälläsi tavalla, että jokainen sivu on samalla oma, irrallinen php-skriptinsä, niin tuskinpa vaivautuisin tekemään yhden lomakkeen käsittelyyn mitään hienoa. Tekisin sen siis ns. helpoimman kautta.

groovyb [11.08.2013 19:51:41]

#

Late kirjoitti:

No lisää vettä löylyyn - tehdäänkö web-sivuja enää yrityksille ilman että taustalla pyörii:

Tekisi mieli kirjoittaa latelle melkoisen pitkäkin selvitys yritysten verkkotoiminnoista ja ratkaisuista, mutta nyt tulee melkoisen tiivistetysti:

En tiedä yhtään suuryritystä, joka käyttäisi wordpressiä mihinkään. Tai ylipäätään edes PHP:tä, muuta kuin ehkä joihinkin julkisen puolen toimintoihin. Näitäkin on kyllä tullut vastaan, kylläkin yhden käden sormissa laskettava määrä.
CMS:t on yleensä ASP -pohjaisia, pitkälti johtuen sen integraatiomahdollisuuksista muihin järjestelmiin ( ERPit, message queuet, biztalkit ja muut integraatiotyökalut, raportointihärpäkkeet ja niin poispäin). Useasti mitään CMS:ää ei edes ole käytössä, vaan nippu toisiinsa sidottuja web -applikaatioita, tai vaihtoehtoisesti esim. SharePoint CMS:änä, vahvasti customoituna.

PK -yritykset on asia erikseen, siinä maailmassa ehkä nuo wordpressit, drupalit ja muut voivat ollakin isommassa käytössä. Mutta vähänkään isompi yritys kyllä helposti kallistuu aspin suuntaan.

aksun [11.08.2013 20:06:51]

#

Kannattaa käyttää htaccessia, tässä linkki apache sivuille: http://httpd.apache.org/docs/2.0/misc/rewriteguide.html. Sellaisia generaattoreitakin on googlettamalla löytyy.

The Alchemist [11.08.2013 21:15:25]

#

aksun kirjoitti:

Kannattaa käyttää htaccessia, tässä linkki apache sivuille: http://httpd.apache.org/docs/2.0/misc/rewriteguide.html. Sellaisia generaattoreitakin on googlettamalla löytyy.

Tarkoittanet varmaan, että kannattaa käyttää url rewritejä. No se on melkoinen "daa", koska mitään muuta mahista ei oikeastaan ole. Osoitteet, jotka eivät osoita mihinkään tiedostoon, pitää jollain tavalla ohjata php-skriptille; muutoinhan niistä saisi käteensä vain virhekoodia 404. Ainoa keskustelun aihe on se, miten php:n päässä polut pitäisi muuttaa suoritettavaksi koodiksi (ts. mitä funktioita kutsutaan).


Sivun alkuun

Vastaus

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

Tietoa sivustosta