seo vriendelijk met PHP

Door josvane op zondag 3 juni 2012 20:30 - Reacties (16)
Categorie: -, Views: 7.144

SEO vriendelijke URL
Wellicht voor vele bekend, je hebt een hobby en probeert dit steeds groter en vooral beter aan te pakken. Naast dat ik het dus erg leuk vindt om te racefietsen is een van de andere dingen waar ik van kan genieten het bouwen van een CMS.

Doorgaands (eigenlijk altijd) maak ik gebruik van PHP en MySql dit alles wordt af en toe ondersteund door Jquery. Persoonlijk ligt de uitdagingen altijd om een mooi maar vooral functioneel te programmeren. Met mooi bedoel ik dan voornamelijk het design. Naarmate ik meer ben gaan programmeren stijgt ook de drang om de code ook netjes te maken. Dus niet rouwe code achter el elkaar, maar gecommentarieerde code, en uiteraard gebruik makend van OOP.

Het CMS heeft zijn weg inmiddels gevonden naar een aantal klanten/vrienden van mij. Belangrijk om te weten is dat ik het nooit commercieel verkocht heb, en dat is ook helemaal niet mijn intentie.

Voor mijn eigen websites maak ik natuurlijk ook gebruik van mijn eigen CMS. Het huidige CMS is geschreven in PHP en maakt gebruik van PEAR, met daarbij de modules DB en DataObject. Juist van de laatste module heb ik nu spijt. Dit is een drama om op andere systemen werkend te krijgen. Vooral als de desbetreffende hoster DataObject er niet op wil zetten. De template wordt beheerd met Smarty. Dit met als doel om een terugkerend patroon zoals formulieren en tabellen universeel te laden.

Op de websites zelf wordt er gebruik gemaakt van SEO vriendelijke url’s. Dus: www.example.com/over/contact

Dit principe wil ik nu ook gaan gebruiken voor mijn CMS, hier loop ik nu tegen problemen aan. De opbouw van url betekend niet altijd hetzelfde. Waar op de website zelf het patroon altijd hetzelfde is, dus www.example.com/catagorie/subcatagorie is dit in het cms wel anders. Tenminste zoals ik het nu zie.

Een basis frontcontroller heb ik al. Deze code heb ik overigens niet volledig zelf geschreven.

Bron: http://www.pfz.nl/wiki/frontcontroller/

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
class FrontController 
{ 
    function __construct () 
    { 
        global $path_length,$root_path;
        if ($_SERVER['REQUEST_URI'] != '/') 
        { 
            /*
            * Maak van de url een array
            */
            $parts = explode ( '/', strtolower ( trim ( $_SERVER['REQUEST_URI'], '/' ) ) ); 
            /*
            * Folder en index.php uit de array halen
            */
            for($i = $path_length; $i < count($path); $i++) 
            {
                $v = $path[$i]; 
                $parts[] .= $v; 
            }
            switch(count($parts))
            {
                case 0:
                    /*
                    * Standaard waardes als er niets ingegeven wordt
                    */
                    $controller = 'dashboard';
                    $action = 'index';
                    $vars = array('home');
                    break;
                
                /*
                * Alles groter als 2
                */
                default:
                    $controller = (current($parts));
                    /*
                    * Alles anders dan custom_handling naar content.php
                    */
                    if (!file_exists ( $root_path . $controller . '.php' ))
                    {
                        $controller = 'dashboard';
                        $action = 'index';
                        /*
                        * Rest van array door de pagina af handelen
                        */
                        $vars = $parts;
                    }
                    else
                    {
                        $controller = ( current ( $parts ) ) ? array_shift ( $parts ) : 'dashboard';
                        $action = (current ( $parts ) ) ? array_shift ( $parts ) : 'index';
                        /*
                        * Rest van array door de pagina af handelen
                        */
                        $vars = $parts;
                    }
                    break;
            }
            
        } 
        else
        {
            $controller = 'dashboard';
            $action = 'index';
            $vars = array('home');
        }
        $this ->dispatch ( $controller, $action ,$vars); 

    } 
    
    
    function dispatch ( $controller, $action, $vars = null) 
    {
            global $full_path;
            /*
            * Het verwachtte bestand bestaat 
            */ 
            require_once ( $full_path . $controller . '.php' ); 
            
            $controllername = ucfirst ( $controller ); 

            /*
            * Controleren of de controller bestaat
            */
            if ( class_exists ( $controllername ) ) { 
                if ( in_array ( $action, get_class_methods ( $controllername ) ) ) { 
                    /*
                    * Als de functie bestaat dan uitvoeren
                    */
                    $controllerobject = new $controllername(); 
                    
                    $controllerobject->$action($vars); 
                    /*
                    * Na uitvoering afsluiten
                    */
                    return; 
                } 
            }
        /*
        * Als de functie niet bestaat in éém van custom_handlers uitzondering dan naar 404
        */ 
        $error = 'Verkeerde parameters. Ongeldige controller. Vier nul vier, dus';
        $this->show_404($error);
    } 
    
    function show_404($error = null)
    {
        global $vars;   
        /*
        * Zelf bepalen hoe mij 404 er uit ziet
        */
        $this->template = new TemplateSystem('error.phtml');
        $smarty = $this->template->smarty;
        $smarty->assign('error', 'Not Found');
        $smarty->assign('data', 'De pagina kon niet gevonden worden. Klik <a href="http://www.eijsdentelecom.nl">hier</a> om terug te gaan.');
        $this->template->display();
    }



Om duidelijk te blijven onderstaande url als voorbeeld, waarbij je moet bedenken dat mijn CMS een menu boven heeft en een menu aan de linkerzijde. Bovenin het met keuze als bijvoorbeeld websites, webshops en dashboard. Het linkermenu kan bijvoorbeeld bevatten websites beheren, menu beheer, afbeeldingen beheren e.d.
http://www.example.com/level_1/level_2/level_3/level_4/level_5

level_1 = grove keuze (websites,webshops e.d.)
level_2 = fijne keuze (website beheer, content beheer e.d.)

level_3, level_4 en level_5 kan meerdere dingen doen.
Bijvoorbeeld een overzicht opvragen van alle sites gesorteerd op naam
http://www.example.com/websites/beheer-websites/naam/asc

een website bewerken zou er dan zo uit moeten zien.
http://www.example.com/websites/beheer-websites/edit/1

Het idee is dus dat de url binnen het cms ook seo vriendelijk wordt. Het biedt natuurlijk geen voordelen voor bijvoorbeeld google, maar het toont gewoon erg netjes.

De vraag is dus ook zijn er andere mensen die dit probleem opgelost hebben of kunnen we werken aan een breed gedragen systeem die universeel ingezet kan worden, voor allerlei andere systemen.

Het is dus duidelijk niet mijn bedoeling om het CMS gezamenlijk te schrijven, puur en alleen de frontcontroller.

Nou is dit een vraag die ook had kunnen stellen op het forum, maar juist wil ik de discussie op gang brengen om te zien hoe andere dit doen, en wellicht het zover schoppen om het algemeen beschikbaar te stellen van de techniek.

Gehackt, het is ook nooit goed,

Door josvane op woensdag 18 april 2012 14:23 - Reacties (11)
Categorie: -, Views: 5.636

Afgelopen week kwam Argeweb in het nieuws, dat er bij één van hun klanten een inbraak gedetecteerd is, hierop hebbben hun verzocht je wachtwoord te wijzigen.

Als je dan vervolgense de reactie bekijkt, dan zie je diverse reactie.

-Mensen die het vertrouwen kwijt zijn.
-Mensen die vinden dat het goed aangepakt is door hun.
-Mensen die menen dat ze het in de doofpot wilden stoppen.
-enz. Enz

Zelf ben ik ook klant bij hun, maar desondanks denk ik dat ze het goed hebben aangepakt door fox it in te schakelen. Deze partij kijkt geheel neutraal naar het netwerk, en haalt zo de eventuele zwakheden eruit..

Een reactie dat het dus prutsers zijn omdat ze fox it nodig hebben vindt ik dus niet terecht. Alles binnen mijn eigen netwerk bekijk vanuit een security oogpunt, ik denk dus dat ik het goed geregeld heb, maar het kan zomaar anders zijn. Ik zou maar wat graag door foxit een audit laten doen op mijn netwerk.

Desondanks ben ik wel benieuwd hoe collega netwerkbeheerders het aanpakken.

Om maar met mijzelf te beginnen.
Ik heb een cisco router waar middels acls bepaald wordt welke poorten door mogen naar pfsense firewall, daar wordt voor het productie netwerk alleen 443 door gestuurd naar de server. Verder gaat alleen poort 80 door naar een webserver in de dmz.

Binnen mijn netwerk heeft elk apparaat een eigen uniek wachtwoord, en is op mijn swich dhcp snooping actief. Verder wordt er gebruikt gemaakt van vlans, om op deze manier voice,cctv productie en testnetwerk apart te houden.

Hopelijk willen meedere mensen vertellen hoe ze het een en ander aanpakken.

Gratis Backup

Door josvane op zaterdag 3 maart 2012 15:33 - Reacties (12)
Categorie: -, Views: 3.104

Gratis backup, echt wel zo gratis?

Zoals bij vele bekend krijg je bij hostingpakketen of remote desktop oplossingen gratis backup, sterker nog het wordt vaak gebruikt als een USP (Unique Selling Point). Daarnaast wordt online backup volop gebruikt door bedrijven.

Met de huidige status van de economie kun je af vragen doe ik goed aan om hiervan gebruik te maken. Een tijd geleden zijn twee bedrijven op zwart gegaan door twee ruzie makende compagnons. Dit alles zal ongetwijfeld met geld te maken hebben, maar goed. Vele bedrijven hadden hier last van, en het is maar de vraag wie van deze bedrijven het goed geregeld heeft.

Backup online.
Zoals ik net al schreef maken vele bedrijven gebruik van de gratis backup of slaan data op in de cloud en denken dat het hiermee goed geregeld is, maar wat als de leverancier failliet gaat, heb je op zo’n moment nog beschikking over je backup. In sommige gevallen zal dit wel lukken alleen hoelang zal het duren voordat er weer beschikking is over de data. Er dan nog niet vanuit gaande dat je het nodig hebt.

Wat nu?
Als je het mij vraagt, ik weet het niet. Een oplossing zou zijn toch zelf lokaal backups maken, alleen of dit technisch haalbaar is, volgens mij niet. Ook zie ik het niet gebeuren dat concurrenten voor dit soort gaan samenwerken. Wat mij een goede oplossing lijkt is dat je leverancier wekelijks de backup beschikbaar stelt op cd, tape of enig ander medium.