Examensarbete CMS, optimerade för programmerare Eller hur kan ett sådan skapas. David Strömbom 2011-05-20 Ämne: Datavetenskap Nivå: B Kurskod: 1DV40E
Abstrakt Denna rapport fokuserar på att undersöka några av de CMS som finns på marknaden idag. Syftet är att se om dessa CMS är optimerade för programmerare och ger den frihet som man vill ha när man skapar webbsajter. Utifrån dessa undersökningar skapas sedan en testplattform för att se hur ett CMS skulle kunna skapas för att vara mer optimerat för programmerare och ge dem den frihet som önskas. Testplattformen Dast CMS visar att det går att skapa ett CMS som är mer anpassat för programmerare istället för konfigurerare. Abstract This article focuses on examining some CMS available on the market today. The aim is to see if these CMS is optimized for programmers and provides the freedom that you want when creating websites. Based on these examinations a test platform is then created to see how a CMS could be created that s more optimized for programmers and give them the freedom that is desired. The test platform Dast CMS indicates that it is possible to create a CMS that is more customized for programmers instead of configurators.
Förord Idéen till detta arbete uppkom då jag ville skapa ett verktyg för att skapa webbsidor med större frihet än många existerande CMS idag kunde erbjuda. Jag ville ha full kontroll över koden och över när, var och hur koden exekveras, samtidigt så ville jag att detta verktyg ska vara snabbare och smidigare än att skapa allt från grunden. Det har varit intressant att undersöka och skapa den testplattform som i alla fall är en början på det verktyg som är målet. Tack till min handledare Daniel Toll för hjälp med kod samt med att bolla idéer om hur målet kunde uppfyllas.
Innehållsförteckning Abstrakt... I Abstract... I Förord...II 1. Bakgrund... 1 1.1 Introduktion till problemområdet... 1 1.1.1 CMS på markanaden idag... 1 1.1.2 Problem... 3 1.2 Tidigare forskning... 4 1.3 Avgränsningar... 4 2. Metod... 5 2.1 Metoddiskussion... 5 3. Genomförande... 6 4. Resultat... 7 5. Slutsats...11 6. Källförteckning... 14 6.1 Elektroniska källor... 14 6.2 Artiklar... 14
1. Bakgrund Enligt Vaidyanathan och Mautone (2009) är ett Content Management System (CMS) ett system som gör det möjligt för användaren att hantera dynamiskt innehåll på en webbsida genom ett användarvänligt gränssnitt. Detta görs normalt genom kommunikation med en databas där användaren kan spara och hämta den information som behövs. Det gör att användaren har möjlighet att lätt anpassa webbsidornas innehåll efter personlig smak och kan skapa en mer interaktiv upplevelse för webbsidornas besökare. Några av de mest använda CMS 1 idag är Wordpress, Drupal, Joomla och vbulletin. 1.1 Introduktion till problemområdet Hur mycket frihet ger existerande CMS för programmerare idag? Hur kan ett CMS skapas som är mer anpassat för programmerare och ger den frihet som kan behövas? Frihet är en abstrakt term, med frihet i detta sammanhang menas möjligheten att skapa och konfigurera sidorna efter de önskemål som finns via det CMS som används. Ett CMS som är mer anpassat för en programmerare ger därför denna möjlighet att utveckla sidorna utan några begränsningar. Syftet med detta är att skapa ett verktyg som, utifrån de tester och undersökningar som kommer göras, ger en programmerare möjligheten att snabbt och effektivt skapa en skräddarsydd sida åt en klient. Författaren har under detta projekt installerat och undersökt ett par av de mesta använda CMS på marknaden idag. De CMS som valts är Wordpress och Drupal då dessa är de mest populära idag 1. 1.1.1 CMS på marknaden idag 1.1.1.1 Wordpress Wordpress är ett av de vanligaste och mest populära 1 CMS som används idag. Det går snabbt att installera och få igång. 11 tabeller skapas i databasen vid grundinstallation. Wordpress 3.1 innehåller 846 filer och 83 mappar som tar upp 11,4 MB 1 http://trends.builtwith.com/cms 1
hårddiskutrymme vid grundinstallation. Grundinstallationen ger användaren utseendet av en blogg, för att ändra utseendet så får man ladda ner ett annat tema eller skapa ett egen skräddarsytt tema. Det går ganska snabbt att lära sig Wordpress, man får dock ett starkt intryck av att det är skapat för bloggar. I gränssnittet så kan man skapa inlägg och det är ju helt inriktat mot bloggar. Man kan även skapa sidor som man kan editera med en inbyggd WYSIWYG-editor. Bloggintrycket kan förminskas genom att konfigurera en del inställningar, men för att få bort det helt samt få en sida för ens specifika behov måste ett skräddarsytt tema skapas. Om man vill skräddarsy sidan mer än att ändra text och bilder så måste man installera tillägg. I grundinstallationen är 2 tillägg installerade. Det går att bläddra och söka efter fler plugin direkt från Wordpress gränssnitt. Det är lätt att hitta något som kan passa behovet då det finns över 14000 plugin nu och antalet växer ständigt. Om man inte hittar något som passar det man vill ha så får man skriva ett eget plugin eller redigera ett redan existerande plugin (vilket går att göra direkt från gränssnittet). När man väl har ett plugin som man vill installera så går detta smidigt och man kan sedan använda det vart man vill på den aktuella sidan. Wordpress har bra dokumentation och det är lätt att hitta det som man behöver mer information om. Wordpress är ett mycket kraftfullt och användarvänligt verktyg och även fast det kan finnas en del begräsningar till att skräddarsy allt så är det ett bra alternativ för många användare. 1.1.1.2 Drupal Drupal är också ett mycket populärt 2 CMS. Drupals grundinstallation är större än Wordpress. Vid grundinstallation skapas 73 tabeller i databasen. Drupal 7.0 innehåller 1125 filer, 139 mappar som tar upp 14,2 MB hårddiskutrymme vid grundinstallation. Drupal går snabbt att installera och komma igång med. Författaren upplever dock att det var lättare att lära sig Wordpress gränssnitt. Drupal ger inte samma bloggintryck som Wordpress, det märks att Drupal är större i storlek och mer avancerat. Istället för att ha en administration/presentation-sida så har man då man loggat in en administratör-meny överst på sidan. Alla val man gör i menyn läggs som en overlay så man stannar kvar på sidan. Detta gör att man inte behöver växla mellan 2 http://trends.builtwith.com/cms 2
administrationsgränssnittet och pressentationsgränssnittet för att se eller göra förändringar på webbsidorna. Det kommer inte med en editor med grundinstallationen av Drupal utan man kan istället ändra Text format. Man kan antingen skriva bara text eller ren html-kod. Detta gör att Drupal är mer fritt för de användare som kan html. Det finns en WYSIWYG-editor att ladda ner som ett plugin om så skulle önskas. Plugin (eller moduler som de kallas i Drupal) är lätta att ladda ner och installera. Det finns även här många att välja från (7857 stycken då detta skrivs). Allt som allt så ger Drupal ett mer professionellt intryck, det är mer avancerat och man kan tänka sig att det passar mer för användare med lite högre kunskapsnivå inom html. 1.1.2 Problem 1.1.2.1 Wordpress Wordpress är byggt mer för konfigurerare eller de användare som inte har någon kunskap om programmering. Det är byggt för att i stort sett vem som helst ska kunna skapa en webbsida och börja skriva innehållet i en miljö som de känner till. Det kan vara svårt för en programmerare att skräddarsy sidan så som de själva vill ha den. Den frihet som man ofta vill ha som programmerare minskas. Den frihet som saknas är bland annat möjligheten att kunna skriva PHP-kod vart man vill på sidan, utan att behöva skapa eller ladda ner plugin. Eftersom det inte finns någon ordentlig debugger så kan det bli svårt att felsöka koden som skrivs i ett plugin, det blir därför svårt att skapa ett stort plugin. 1.1.2.2 Drupal Drupal är byggt för lite mer avancerade användare som kan en del html och liknande. Det kan dock även här vara problem att få en skräddarsydd sida. Den frihet som man ofta vill ha som programmerare minskas. Drupals grundinstallation kommer även med en del moduler som kan vara överflödiga för en del sidor. Den frihet som saknas är bland annat möjligheten att kunna skriva PHP-kod vart man vill på sidan, utan att behöva skapa eller ladda ner plugin. Det finns en modul för Drupal som gör det möjligt att skriva PHP-kod blandat med html men denna måste man som sagt ladda ner och installera. Eftersom det inte finns någon ordentlig debugger så kan det bli svårt att felsöka koden som skrivs i ett plugin, det blir därför svårt att skapa stora moduler. 3
1.2 Tidigare forskning Efter mycket letande har ingen forskning hittats inom området CMS för programmerare. 1.3 Avgränsningar Detta projekt kommer att ha fokus på att undersöka en del av de CMS som finns på marknaden idag och se om dessa kan begränsa en programmerare att skapa en webbsida eller applikation som uppfyller de behov och krav som skapats. Vidare så skapas en testplattform för ett CMS för att undersöka hur en programmerare kan producera ett eget CMS som ger mer frihet. Avgränsningar görs för säkerhet då detta är ett stort område som inte hinns med. Vidare fokuserar testplattformen Dast CMS på funktionalitet och stora avgränsningar kommer göras för utseendet av detta system. 4
2. Metod Under detta projekt kommer en explorativ metod användas. Wordpress och Drupal kommer att undersökas och prövas. En testsida där möjligheter för att kunna blanda PHP-kod med XHTML från gränssnittet kommer att skapas. En testplattform kommer att skapas där möjligheterna för mer frihet för programmerare i ett CMS kommer att testas och undersökas. För att minska begränsningen i testplattformen när koden skrivs så skall PHP-kod direkt kunna blandas med XHTML via gränssnittet vid redigering eller skapandet av en sida. Lagring av kod i databas kommer att testas. Den testmiljö som kommer användas är Windows 7 på lokal maskin och med hjälp av programmet EasyPHP som agerar som lokal server samt mysql-databas. Dessa tester kommer även testas på webbserver på ett webbhotell. 2.1 Metoddiskussion Den största bristen med denna metod är att en testgrupp av programmerare inte finns som kan testa releaserna av projektet. Andra brister i metoden är möjligtvis att de resultat som framkommer av detta projekt till stor del är författarens åsikter och bredare studier med fler parter kan ge ett mer rättvisande resultat. Ett annat alternativ är att använda sig av intervjuer av programmerare som använder CMS idag och se vad dessa tycker samt om de känner sig begränsade. Enkäter riktade till programmerare som använder CMS skulle också kunna användas. Grundtanken med detta projekt var ursprungligen att skapa ett CMS för programmerare och att använda en explorativ metod bedömdes vara mest lämpligt. Den valda metoden passar denna typ av arbete, större undersökningar med intervjuer är för tidskrävande. 5
3. Genomförande Testerna gick till så att webbsidor skapades i de utvalda CMS. En testsida skapades där möjligheterna för att blanda PHP-kod i XHTML undersöktes. De olika funktionerna och möjligheterna undersöktes för varje CMS. Utvecklingsmöjligheterna för dessa testades och begränsningar i deras design undersöktes. Utifrån dessa tester och undersökningar skapades sedan en testplattform av hur ett CMS kan skapas för att förbättra en programmerares frihet vid utvecklingen av sidor åt en klient. Genomförandet skedde utan några avvikelser. Testerna genomfördes som planerat. 6
4. Resultat I Drupal och Wordpress så fanns ingen möjlighet att blanda PHP-kod och XHTML på annat sätt än att skriva eller ladda ner en modul som möjliggör detta. Testplattformen Dast CMS skapades för att se om ett CMS med mer frihet kunde förbättra en programmerares möjligheter att enkelt och snabbt skapa skräddarsydda webbsidor. Dast CMS ger användaren möjlighet att, via administrationsgränssnittet, skapa webbsidor och placera dessa i meny som sedan visas på pressentationsgränssnittet. Det som gör att denna testplattform skiljer sig från Wordpress och Drupal är att när en webbsida skapas så kan användaren skriva PHP kod som sedan körs och placeras på webbsidan (se figur 1 & 2). Med Dast CMS så kan PHP-kod och XHTML blandas efter programmerarens behov och på så sätt ge mer frihet i sättet som de programmerar. 7
Figur 1. Här visas hur PHP kod kan skrivas direkt på sidan. Resultatet visas på figur 2. Figur 2. Här visas resultatet av PHP kod (se figur 1). 8
Detta ger enligt författaren användaren mer frihet. Alla PHP-filer från mappen data/modules inkluderas in i programmet vilket gör det möjligt för användaren att skapa klasser som den sedan kan kalla på via webbsidorna för att återanvända kod (se figur 3-5). Figur 3. Här visas koden från PHP-fil som anropas via koden från sidan (se figur 4). Figur 4. Här visas hur funktionen ViewDate anropas via koden (se figur 3). Resultatet av koden visas i figur 5. 9
Figur 5. Här visas resultatet av PHP koden som skrevs på sidan (se figur 4). 10
5. Slutdiskussion Slutsatsen som jag kom fram till är att existerande CMS inte är optimala för programmerare utan är mer anpassat för konfigurerare. Efter att ha genomfört undersökningen av Wordpress så kan författaren konstatera att det är skapat mer för konfigurerare än för programmerare. Det ger dock användaren chans till utveckling genom att möjliggöra skapandet av moduler som kan installeras och på så sätt ge en programmerare möjligheten att skräddarsy webbsidan. Wordpress har emellertid begränsat moduler som skapats genom designbeslut som tagits under utvecklingen av detta CMS. Drupal har liknande designbeslut. Varken Wordpress eller Drupal ger användaren möjlighet att skriva egna funktioner för användning på webbsidor, utan moduler måste skapas, laddas ner och installeras. 5.1 Vidareutveckling av Dast CMS Genom att ha utvecklat testplattformen Dast CMS har jag kunnat se hur man skulle kunna utveckla ett CMS som kan ge programmerare mer frihet. Detta kan dock leda till brist på säkerhet eftersom ägaren av en webbserver kanske inte vill att de som utvecklar sidan ska kunna komma åt eller förstöra information på servern. När man därför utvecklar Dast CMS vidare så bör man begränsa det en del. Man skulle kunna tänka sig att man skapar olika roller som har olika rättigheter av exekvering av PHP. Vissa funktioner borde begränsas så att vissa roller inte får använda dem. Ett exempel vore PHP-funktionen 3 die som avslutar all PHP och gör att all kod efter anropet till die inte körs vilket kan ha förödande effekter. Vissa roller bör heller inte ha möjlighet till att ändra databasstrukturen, som drop table som tar bort en hel tabell i databasen. All PHP-kod som skrivs på sidorna bör kollas så funktioner och delar som användaren inte har tillåtelse att använda tas bort. Man kan också tänka sig att man har olika gränssnitt för olika roller, en konfigurerare behöver inte ha ett gränssnitt där modulhantering visas utan att redigera innehållet på sidorna är tillräckligt. Vidareutveckling av Dast CMS kan också göras genom att man inom moduler ska kunna utveckla PHP-skript direkt i gränssnittet. En ordentlig editor måste utvecklas som ger användaren hjälpmedel som färgmarkering av koden, radnumrering samt debugger som underlättar vid större moduler. Detta saknades i Wordpress och Drupal. 3 http://php.net/ 11
Man kan tänka sig att man skapar en iframe eller liknande på sidan som när man tar spara modul visar om det finns några fel i koden. Detta kan man kanske göra genom att använda funktionen php_check_syntax som tar en specifik fil och testar om det finns några skript fel. Denna iframe kan även innehålla den utskrift som skriptet genererar så användaren direkt ser vad modulen skriver ut. Sen så borde man också tänka på namespace, vad ska hända om man använder en variabel som används någon annanstans på sidan och hur kan man hindra att man gör det? Om man nu vill begränsa användandet av dessa namespace. Man kan kanske lägga in dem i den kontroll av kod som körs för att kolla funktioner som används eller liknande. Denna utveckling borde köras på en egen server eller genom att använda en virtuell server som funktionen Runkit_Sandbox 4 vilket skapar en ny instans som körs separat från resten av servern. Med hjälp av Runkit_Sandbox kan man ta bort funktioner som inte får användas genom att använda disable_functions och disable_classes. Användaren kan därför ges möjligheten att utveckla med PHP som den önskar men med begränsade rättigheter. På så sätt kan man inte göra någon skada på existerande sidor när man utvecklar en modul. 5.2 Fil eller databas En annan sak som bör diskuteras är om man ska lägga modulerna som skapas som en fil på servern som görs idag eller om dessa ska läggas i databasen. Genom att lägga dem i databasen så kan man versionshantera kod lättare genom att använda insert istället för update när man lägger in kod. Man kan då ha en tabell knuten till dem som håller koll på vilken version av koden som körs och man kan på så sätt gå tillbaka till tidigare kod lättare. Angående säkerhet så är det kanske säkrare att ha dem som filer då det är lättare att göra SQL-injektioner om koden ligger i databas, eftersom databasen är knuten till användarkonton på Dast CMS. Att ladda upp en fil till webbservern är dock mer begränsat då den oftast är knuten till ett FTP-konto. En annan fördel med att använda moduler som filer är ju att man lättare kan dela funktionerna man skriver. Det är lättare att ladda upp en fil till en mapp på servern som man sedan kan använda hur mycket man vill än att kopiera och klistra in kod i olika tabellfält i databasen. 4 http://php.net/manual/en/runkit.sandbox.php 12
5.3 Dokumentation Det får heller inte glömmas att om man skapar ett CMS så måste god dokumentation finnas så att de som använder det lättare kan sätta sig in i hur allt fungerar. Man bör ha exempel på hur man gör saker som att skapa ny sida, skriva PHP-kod på sidorna, hur man skriver moduler, hur man anropar dessa från sidorna och menyhantering. Ju fler exempel som tas med i dokumentationen ju lättare blir det för användaren att förstå hur detta CMS är uppbyggt. 5.4 Bör Dast CMS vidareutvecklas? Genom att vidareutveckla Dast CMS enligt diskussionen ovan som hjälp så kommer ett CMS som är optimerat för programmerare kunna skapas. Det kommer ge användaren en större frihet att utveckla sidorna så som de vill ha dem. Det kommer också vara snabbare än att koda allt från grunden. Man kan sedan lätt lämna över underhållet av sidorna och dess innehåll till konfigurerare. Detta gör att det finns mycket värde i att vidareutveckla Dast CMS. 13
6. Källförteckning 6.1 Elektroniska källor BuiltWith trends (2011). CMS Usage Statistics http://trends.builtwith.com/cms [2011-05-11] PHP documentation (2011). PHP.net http://php.net/ [2011-05-11] 6.2 Artiklar Vaidyanathan, G. & Mautone, S. (2009). Security in Dynamic Web Content Management Systems Applications. Communications of the ACM, (12), 121-125. 14
351 95 Växjö / 391 82 Kalmar Tel 0772-28 80 00 dfm@lnu.se Lnu.se