URL Rewriting Class

Door Harm , 16 jaar geleden, 5.108x bekeken

Ik heb een klasse gemaakt om URL's te begrijpen. Om hem te kunnen gebruiken moet je wel een htaccess bestand aanmaken... dat staat ook omschreven in de code. Voor meer informatie over deze URL rewriting kun je terecht bij de goede tutorial van Boaz http://www.phphulp.nl/php/tutorials/8/629/
Naar aanleiding van die tut heb ik ook deze klasse gemaakt. Het gaat dus ook om url's in het formaat http://www.jouwsite.nl/nieuws/2/34/

Leef je er maar op los, en geef graag reacties. Dit is mijn eerste script dat ik post dus alle commentaar is welkom. Dit is ook de eerste echte klasse die ik überhaupt programmeer... dus ik moet het nog leren ;)

Met de functie

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? getProperty( $number ) ?>
kun je een eigenschap ophalen. het gaat om eigenschap nummer 1 of 2 of 3 enzovoorts.
NIEUW! Als je een negatief nummer opgeeft begint hij van achteraan te tellen !

Met de onderstaande functie
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? getPropertyValue( $variableName , $isSign [, $expression] ); ?>
kun je een naam van een variabele én een waarde ophalen. in de URL ziet het er bijvoorbeeld uit als
http://www.jouwsite.com/nieuws/id:23/4/
Als je dan het id wilt weten is
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$variableName="id"
$isSign=":"

NIEUW! De laatste variabele, $expression, is standaard false. Als je die true maakt is $isSign een expressie, dus bijvoorbeeld [:-,]

Als je het niet begrijpt kun je een mailtje sturen, maar het staat bij gevorderd, dus voor de gevordenen zal het voor zich spreken ;)

Laatste mededeling... natuurlijk is commentaar welkom, maar ook tips voor een volgende versie. Dit stelt namelijk eigenlijk niets voor ;)

Gesponsorde koppelingen

PHP script bestanden

  1. url-rewriting-class

 

Er zijn 23 reacties op 'Url rewriting class'

PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Daan
Daan
16 jaar geleden
 
0 +1 -0 -1
Hey, leuk script..
Tip:
bij de getPropertyValue() kan je denk ik beter bij de split() functie een derde parameter kunt meegeven (de limit) die dan 2 is.
Dan hoef je daarna niet te controleren of het er wel maar twee zijn.
tijd:13:30 wordt dan dus $tijd = '13:30'

Verder ziet het er netjes uit. Keep up the good work! :D
Daan
Douwe
Douwe
16 jaar geleden
 
0 +1 -0 -1
Je kunt beter explode() gebruiken, deze is sneller omdat deze geen regularexpressions parst. split() doet dit wel. Ook explode() kun je een derde parameter meegeven.
Jelle Posthuma
Jelle Posthuma
16 jaar geleden
 
0 +1 -0 -1
Hoe gebruik ik dit precies?
Ik heb in een .HTACCESS bestand die paar regels geplaatst, en die class.url.php aangemaakt met de volledige code erin, maar mijn (lege) site krijgt nu een 500 error.
Dit is heb ik in mijn index.php staan:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
<?php
include('class.url.php');
$url = new URLEngine;
?>
Daan
Daan
16 jaar geleden
 
0 +1 -0 -1
@ Douwe M: Dat dacht ik eerst ook ;) Maar na ff denken (deed pijn :D) bedacht ik dat die regular expressions juist een voordeel is. Nu kan je "[-/:]" als $isSign gebruiken en dan kan het dus een streepje (-), een slash (/) of een dubbele punt (:) zijn...
Douwe
Douwe
16 jaar geleden
 
0 +1 -0 -1
Daan;
Daar heb je gelijk in ja.... maar als iemand dan een . invult, gaat het fout... Er wordt namelijk bij de uitleg nergens gezegd dat je daar een regexp moet neerzetten ;)
Jelle Posthuma
Jelle Posthuma
16 jaar geleden
 
0 +1 -0 -1
Heeft iemand nog een tip?
Want zodra ik die .htaccess gebruik dan krijg ik een 500 Internal Server Error...
Hipska BE
Hipska BE
16 jaar geleden
 
0 +1 -0 -1
een class is er niet om 2 functietjes te groeperen...


16 jaar geleden
 
0 +1 -0 -1
Merk op dat je server dus wel mod_rewrite moet ondersteunen. IIS mensen gebruiken natuurlijk het net zo goede (zo niet betere) ISAPI rewrite, vraag je hoster.

Is het niet veel handiger van deze class alle methodes static te maken zeg maar, zodat het meer dienst doet als een functie verzameling. Je zal namelijk ook nooit twee instanties van deze class hebben lijkt mij.
Harm
Harm
16 jaar geleden
 
0 +1 -0 -1
@Jelle: Ik post zsm even een nieuwe versie... ook met nieuwe uitleg. Nog een tip is dat je beter require_once kan gebruiken in plaats van include, want als hij het script niet pakt om welke reden dan ook krijg je allerlei foutmeldingen met de include functie. Met require_once breekt hij de pagina gewoon af...

@Hipska: Een klasse is er niet voor om 2 functies samen te bundelen nee, maar wel om de code eenvoudig te kunnen hergebruiken en te kunnen implementeren in andere sites, EN voor het overzichtelijk maken van je code. Ik heb ook geen zin om het elke keer opnieuw te coden... jij wel ?!?
Harm
Harm
16 jaar geleden
 
0 +1 -0 -1
Ik heb een nieuwe versie geplaatst van het script.
Changelog:

Een nieuwe functie om het scheidingsteken in de URL te veranderen aan het begin of tijdens het script:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php changeURLSplit ( $teken ); ?>


De getProperty functie accepteert nu ook negatieve getallen. Voer je nu een negatief getal in begint hij van achter te tellen.

De getPropertyValue functie is ook aangepast. Niet alleen kun je nu een extra variabele meegeven die aangeeft of je expressies gebruikt in het isteken of niet, ook controleert hij nu of het isteken hetzelfde is als het scheidingsteken in de URL. Is dat zo dan zoekt hij in de URL naar de variabelenaam, en neemt de volgende parameter als de waarde ervan, zoals dit. www.jouwsite.nl/nieuws/id/234
Als je hier vraagt naar het id met het isteken "/", geeft hij als waarde 234 terug.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<? getPropertyValue ( $variableName , $isSign [, $expression] ); ?>

LET WEL: het laatst omschreven (Het isteken == het scheidingsteken in de URL) werkt nog niet met expressies. Als iemand een tip heeft hiervoor, graag een berichtje ;)
Douwe
Douwe
16 jaar geleden
 
0 +1 -0 -1
Naar mijn mening kun je dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
public function __construct()
    {
        $this->URLInfo = trim($_SERVER['PATH_INFO']);
        $this->URLItems = explode("/", $this->URLInfo);
        $this->URLSplit = "/";
    }
    
    public function changeURLSplit( $teken = "/" )
    {
        $this->URLItems = explode($teken, $this->URLInfo);
        $this->URLSplit = $teken;
    }

beter zo doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
public function __construct($splitter = "/")
    {
        $this->URLInfo = trim($_SERVER['PATH_INFO']);
        $this->URLItems = explode($splitter, $this->URLInfo);
        $this->URLSplit = $splitter;
    }


En dit:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
                if ( $expression )
                {
                    $itemsplit = split ( $isSign , $item , 2 );
                }
                else
                {
                    $itemsplit = explode ( $isSign , $item , 2 );
                }

kun je zo doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$func = ($expression ? "split" : "explode");
$itemsplit = $func($isSign, $item, 2);


En je kunt van private vars beter protected vars maken, voor het geval iemand je class wil gaan extenden.
Harm
Harm
16 jaar geleden
 
0 +1 -0 -1
Dank je. Ik wist niet dat je op die manier ook functies kon aanroepen. Ook bedankt voor die eerste, maar ik had er wel aan gedacht om direct in de construct functie een teken te vragen (kan ik natuurlijk nog steeds doen) maar ik had die andere functie gemaakt om ook halverwege nog van teken te kunnen veranderen... zal ik die functie gewoon wissen, wat denken jullie. Hebben jullie zoiets nodig ??
Douwe
Douwe
16 jaar geleden
 
0 +1 -0 -1
Ik denk niet dat iemand halverwege van splitter gaat veranderen... Waarom zou je? De URL maak je zelf, dus weet je welke splitter je gebruikt... Ik zou dus gewoon met de __construct() doen.
Harm
Harm
16 jaar geleden
 
0 +1 -0 -1
Dat is waar... Het scriptje is inmiddels al aangepast, maar ik zal die functie ook wel verwijderen... Dan moeten ze maar gewoon consequent hun splitter gebruiken ;)
Douwe
Douwe
16 jaar geleden
 
0 +1 -0 -1
Precies :) (Je kunt btw [s] gebruiken ipv [/strike]
Harm
Harm
16 jaar geleden
 
0 +1 -0 -1
ik heb het gewoon weggehaald... niemand zal het missen, en als iemand het nu toch al in zijn site heeft zitten is het niet extreem schadelijk ;)

Edit: Ik heb met die protected vars nog niks gedaan... weet iemand een goede tut of iets dergelijks waar deze aspecten van OOP duidelijk zijn uitgelegd? Ik moet namelijk nog een beetje beginnen hiermee ;)
Douwe
Douwe
16 jaar geleden
 
0 +1 -0 -1
Dat kan ook :)
B a s
B a s
16 jaar geleden
 
0 +1 -0 -1
Harmen:
Is dat zo dan zoekt hij in de URL naar de variabelenaam, en neemt de volgende parameter als de waarde ervan, zoals dit. www.jouwsite.nl/nieuws/id/234
Als je hier vraagt naar het id met het isteken "/", geeft hij als waarde 234 terug.
Ik zou dat dan ook even aanpassen in je toelichting. Goed dat je dit gedaan hebt want een : teken in je URL is natuurlijk niet netjes. Deze gebruik je wellicht aan het begin voor een FTP connectie maar hoort verder niet in een URL adres thuis.
Harm
Harm
16 jaar geleden
 
0 +1 -0 -1
verrek... je hebt gelijk. Heb je misschien nog andere alternatieven voor een isteken? want ik vind een slash ook niet zo geschikt als ik ook al die slash als scheidingsteken in de url gebruik..
Douwe
Douwe
16 jaar geleden
 
0 +1 -0 -1
Ik zou een streepje gebruiken.
Iltar van der berg
iltar van der berg
16 jaar geleden
 
0 +1 -0 -1
Kan aan mij liggen hoor, maar waarom staat er php 4.3 en gebruik je vervolgens php 5 methodes?
Harm
Harm
16 jaar geleden
 
0 +1 -0 -1
Ik heb geen idee.. voor zover ik weet draai ik PHP 4.3 op mijn server, maar dat zal 5 zijn met die methodes aangezien die werken... ik had het niet gecontroleerd maar laat ik het nu maar even aanpassen...

Iemand tips over hoe ik compatibiliteit kan testen van scripts? Ik weet nu dus dat mijn scripts het doen op PHP 5.2, maar of ze het ook doen in 4 bijvoorbeeld?
PHP hulp
PHP hulp
0 seconden vanaf nu
 

Gesponsorde koppelingen
Richard van Velzen
Richard van Velzen
16 jaar geleden
 
0 +1 -0 -1
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<?php
function getUrlParam($param, $default = false) {
    static $params = null;
    if(is_null($params)) {
        $params = array();
        $split = explode('/', trim($_SERVER['PATH_INFO']));
        for($i = 0; isset($split[$i]); ++$i) {
            $params[$split[$i]] = isset($split[++$i]) ? $split[$i] : null;
        }

        unset($split);
    }

    
    return isset($params[$param]) ? $params[$param] : $default;
}

?>


Ik weet niet hoor, dit vind ik er toch veel compacter uitzien. En ik heb er geen hele class voor nodig. (;

Om te reageren heb je een account nodig en je moet ingelogd zijn.

Inhoudsopgave

  1. url-rewriting-class

Labels

  • Geen tags toegevoegd.

Navigatie

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.