Innehållshanteringssystem för webbsidor Joakim Bollström Högskolan på Åland serienummer 24/2014 Informationsteknik Mariehamn 2014 ISSN 1458-1531 Examensarbete Högskolan på Åland Utbildningsprogram: Författare: Arbetets namn: Handledare: Uppdragsgivare: Informationsteknik Joakim Bollström Innehållshanteringssystem för webbsidor Agneta Eriksson-Granskog Designr – Jonas Öhblom Abstrakt: Mitt examensarbete handlar om att utveckla en webblösning med hjälp av Hypertext Markup Language, JavaScript, jQuery, Cascading Style Sheets och Hypertext Preprocessor teknologier. Uppgiften utfördes på uppdrag av Designr och utgick från deras kravspecifikation av en webbplattform där deras kunder kan hanterar sina hemsidor från ett användarvänligt webbgränssnitt. Många liknande lösningar av denna typ finns, såsom Drupal, Joomla och WordPress webbpubliceringssystem. Nyckelord (sökord): jQuery, JavaScript, HTML5, CSS, MySQL, PHP, AJAX, WYSIWYG Högskolans serienummer: ISSN: Språk: Sidantal: 2014:24 1458-1531 Svenska 25 Inlämningsdatum: Presentationsdatum: Datum för godkännande: 27.5.2014 16.5.2014 27.5.2014 Degree Thesis Högskolan på Åland / Åland University of Applied Sciences Study program: Author: Title: Academic Supervisor: Technical Supervisor: Information Technology Joakim Bollström Content Management System for Webpages Agneta Eriksson-Granskog Designr – Jonas Öhblom Abstract: My thesis is about developing a web solution using the Hypertext Markup Language, JavaScript, jQuery, Cascading Style Sheets and Hypertext Preprocessor technologies. The task was carried out on behalf of Designr and was based on their requirements of a web platform where their customers can manage their websites from a user-friendly web interface. There are many similar solutions of this type Drupal, Joomla and WordPress publishing systems. Key words: jQuery, JavaScript, HTML5, CSS, MySQL, PHP, AJAX, WYSIWYG Serial number: ISSN: Language: Number of pages: 2014:24 1458-1531 Swedish 25 Handed in: Date of presentation: Approved on: 27.5.2014 16.5.2014 27.5.2014 INNEHÅLLSFÖRTECKNING 1 INLEDNING ................................................................................................................. 3 2. 3. 1.1. Syfte ................................................................................................................... 3 1.2. Backgrund .......................................................................................................... 3 1.3. Metod ................................................................................................................. 4 1.4. Avgränsningar .................................................................................................... 4 BAKGRUND ........................................................................................................... 5 2.1. Uppdragsgivaren Designr .................................................................................. 5 2.2. Kravspecifikation ............................................................................................... 5 2.3. Funktionella krav ............................................................................................... 5 2.4. Icke-funktionella krav ........................................................................................ 5 2.5. Användarfallsdiagram ........................................................................................ 6 PROGRAMMERINGSSPRÅK OCH RAMVERK ................................................. 7 3.1. Hypertext Markup Language (HTML) .............................................................. 7 3.2. Cascading Style Sheet (CSS) ............................................................................. 8 3.3. JavaScript (JS) ................................................................................................... 8 3.3.1. Ckeditor ...................................................................................................... 9 3.3.2. Asynchronous JavaScript and JSON (AJAX) ............................................ 9 3.4. 4. jQuery .............................................................................................................. 10 3.4.1. jQuery Validation ..................................................................................... 11 3.4.2. jQuery UI .................................................................................................. 11 3.5. Hypertext Preprocessor (PHP) ......................................................................... 11 3.6. MySQL ............................................................................................................ 12 UTVECKLING ...................................................................................................... 13 4.1. Struktur ............................................................................................................ 13 4.2. Planering .......................................................................................................... 13 4.3. Ajax anrop ramverk ......................................................................................... 14 4.4. Grafiska gränssnittets funktionaliteter ............................................................. 15 4.5. WYSIWYG-redigering .................................................................................... 15 4.5.1. 4.6. Filöverföring .................................................................................................... 16 4.6.1. 5. WYSIWYG-redigering sekvensdiagram .................................................. 16 Uppladdning av filer ................................................................................. 17 Resultat ................................................................................................................... 18 5.1. Resultat ............................................................................................................ 18 5.2. Förbättringar .................................................................................................... 18 5.2.1. Grafiska Gränssnittet ................................................................................ 18 5.2.2. Optimera kodbas ....................................................................................... 19 5.2.3. Användarguide ......................................................................................... 19 6. SAMMANFATTNING ........................................... Error! Bookmark not defined. 7. KÄLLFÖRTECKNING ......................................................................................... 21 1 INLEDNING 1.1. Syfte Syftet är att utveckla ett webbgränssnitt för att kunna editera hemsidor enligt principen ”What You See Is What You Get” principen. Lösningen skall vara relativt enkel så att användaren inte behöver kännedom i webbutveckling eller programvara för att flytta filer till en server. Den färdiga produkten kommer att användas av Designrs (2.1) kunder med en godtycklig webbläsare som erbjuder ett gränssnitt för WYSIWYG-redigering och för att administrera dokument. Lösningen kommer också att underlätta Designr-administratörer att snabbt redigera kundernas hemsidor och ge support. 1.2. Backgrund Företag, organisationer och privatpersoner alla som behöver egna hemsidor för att representera sina företag online. Företag anlitar ofta en webbyrå som gör jobbet för dem medan ett en privatperson använder sig av ett innehållshanteringssystem i form av Wordpress till exempel. Ett innehållshanteringssystem eliminerar ofta kraven på att kunna programmera men det uppstår också ett annat hinder. Ett innehållshanteringssystem kan vara mycket komplicerat och kan ta tid att lära sig. Därför har Designr önskat om en lösning på som skulle kunna tillämpas till alla deras kunders hemsidor oberoende kodbas eller webhotelleverantör. Lösningen är planerad att vara modulär så att man kan avkoppla koppla funktioner som inte används eller sätta till nya när behoven ökar. Idén med att ha kunden att använda webbläsaren för att använda tjänsten var ett naturligt val på grund av antagandet att alla kunder har en webbläsare. 3 1.3. Metod Kraven på lösningen kommer Designrs kravspesification men också från beslut senare i utvecklingen. Information om teknologi som utnyttjas i lösningen är väl dokumenterat på internet. Applikationer som användas för att underlätta utvecklingen av lösningen är: - Adobe Dreamweaver, användarvänliga webbutvecklingsverktyg - SQLyog, modifiering av SQL-databaser från ett grafiskt gränssnitt - Filezila, FTP-klient för filöverföring - Google Chrome, Webbläsare för testning. 1.4. Avgränsningar Innehållshanteringssystemet kommer inte att vara optimerat för användning på mobilplattformer på grund av den begränsade skärmstorleken. Möjligheten är att man skulle kunna bygga ett skilt webbgränssnitt för stöd för mobil och läsplattor men för tillfället kommer det inte vara aktuellt. Det grafiska är lämnat till ett minimum för det krävs inte för att lösningen skall fungera som planerat. Det grafiska består av några ikoner samt ett simpelt färgschema för att underlätta under utvecklings skedes. 4 2. BAKGRUND 2.1. Uppdragsgivaren Designr Designr är ett företag med 6 anställda som skapar webb- och grafiska lösningar till små och medelstora företag. Designr befinner sig i Ekenäs i södra Finland. Mycket som man gör är specialtillverkat och använder sig inte av någon plattform så som Wordpress eller Drupal. Därför har det nu givit mig till updrag att skapa en lösning till detta behov. 2.2. Kravspecifikation En kravspecifikation har i uppgift att förse användaren och utvecklaren med ett gemensamt dokument på hur systemet skall fungera. Dessutom är kravspecifikationen mycket viktig under sluttesten, där systemets funktionalitet jämförs med de fördefinierade kraven. (Kravspecifkation, 2014) 2.3. Funktionella krav Dessa är funktioner som kommer att implementeras i lösningen: - Logga in / Logga ut: Användaren måste kunna logga in med ett eget lösenord. Lösenorden måste vara envägskrypterade med en slumpmässig text så att det är säkert att lagra dem i en databas. - Editera hemsidan: Användaren skall kunna modifiera innehåll på sin sida. - Ladda upp: Det skall vara möiligt för användaren att sätta egna bilder på hemsidan och då måste det först laddas till webbhotellet. - Radera filer: Användaren skall kunna radera gamla bilder. - Support: Användaren ska enkelt kunna få support via en e-postadress eller inbyggd chat i systemet. 2.4. Icke-funktionella krav Ett viktigt krav är att lösningen skall ha ett lätt användargränssnitt. Användaren förväntas inte kunna någonting om webbutveckling eller servrar det enda han/hon behöver känna till är hur man använder en webbläsare. 5 Andra viktiga punkter är att innehållshanteringssystemet skall var lösenords skyddat samt kunna bli kopplat till ett E-mail konto för att ah entydiga inlogningsuppgifätr för en större mängd användare. Och en modulärisk system design hjälper till för att möjliggöra att i fortsättningen kunna utveckla systemet vidare för kommande behov. 2.5. Användarfallsdiagram Diagrammet i figur 1 visar den huvudsakliga functionalitetn implementerat innehållshanteringssystemet. Figure 1 - Use case diagram for the user 6 i 3. PROGRAMMERINGSSPRÅK OCH RAMVERK Kapitlet kommer att kort presentera de programmeringsspråk och ramverk som används för programmet. Modern webbutveckling går ofta ut på att använda sig av många programmeringsspråk. 3.1. Hypertext Markup Language (HTML) HyperText Markup Language eller html, skapades för forskare att kunna dela filer. Det har sedan blivit en standard för World Wide Web och att använda html för en form att representera document på internet i form av hemsidor, bloggar och annan data. HyperText Markup Language används för att ange dokumentets struktur i en sådan form att en webläsare kan represetera html-sidan i ett läsbart tillstånd till användaren. Detta gör man med hjälp av element-taggar eller tags, de har i regel alltid en starttag och en sluttag. (W3C, 2014) (W3C, 2014) I Figur 2 ser vi ett html-dokument som inte är en kommentar utan ett <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title>Title of the document</title> </head> <body> <h1>A Minimum HTML5 Document</h1> <p> This is a paragraph </p> </body> </html> doctype-definition, W3C (World Figur 2- Ett minimalt html5 dokument som bestäms av <html>, detta är ett minimerat upplägg för att kunna visa webbsidan korrekt. Taggen <!> kan användas till utvecklaren för att lämna kommentarer i kodbasen. Figur 2 har dock en sådan tagg längst upp i dokumentet Wide Web Consortium) har godkänt taggen <!> att också användas för dokumenttyps-definition. (W3C, 1999) Just denna <!DOCTYPE html>-tagg är den senaste standarden i webbutveckling HTML5. Doctype-taggen hjälper webbläsaren att tolka sidan i rätt version för äldre standarder har kanske inte stöd för nya taggar så som <audio>-och <video>-taggar. Ett html-tagg ska alltid innehålla en <head> för allt som inte har en visuell betydelse så som JavaScript-kod och CSS-taggar och en <body> för det visuella delan av sidan så som text, bilder och videotaggar. Med 7 denna information kan man skapa en mycket enkel hemsida men inte så dynamisk och skalbar. 3.2. Cascading Style Sheet (CSS) Cascading Style Sheet eller CSS har en stor betydelse i dagens webbutveckling, när det gäller färg, teckensnitt, justering av text och objekt m.m. En enda CSS-mall kan hantera flera htmldokument och det är då enkelt att modifiera stilarna genom att ändra reglerna i CSS-mallen, se figur 3. HTML5 och CSS3 har tagit ett steg längre och Figure 3 - CSS struktur möjliggjort formateringar och effekter som inte tidigare fanns i HTML standarden. (W3C, 2011) All formatering bör finnas i externa mallar vilket gör att mängden grafisk specifik kod i själva dokumentet minskar och gör att sidorna laddas snabbare i webbläsaren. Då samma mall används för varje dokument behöver inte webbläsaren läsa in CSSinstruktionerna på nytt varje gång en ny sida anropas. Figur 4 visar ett exempel på fyra CSS instruktioner i en extern mallfil. CSS så kallade selectors används för att välja vilken del av html-trädet en stil skall gälla. body { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 11px; line-height: 18px; } h1 { font-size: 24px; font-weight: normal; letter-spacing: 2px; } .textformat1 { color: #336699; } body p.textformat2 { color: #990000; } Figure 4 - CSS regler En selector kan välja alla element av en viss typ, från element med vissa attribut bland annat id, class, etc. till delar beroende på hur de är placerade i förhållande till, eller inkapslade i, andra i dokumentträdet. 3.3. JavaScript (JS) JavaScript ger oss saker som animering, dynamiska förändringar och mer. JavaScript kan också läsa input från våra I / O-enheter (t.ex. mus och tangentbord) för att göra sidan mer interaktiv för användaren. Det är möjligt att konstruera 8 JavaScript-bibliotek som underlättar användningen av språket och snabbar upp utvecklingen. (Mozilla Developer Network, 2014) (Web Developers Notes, 2014) 3.3.1. Ckeditor Ckeditor är ett javascript-bibliotek som erbjuder WYSIWYG-support som utnyttjas i Text editor modulen. Ckeditor fungerar som en översättare från formaterad text till html. Bibliotek stöder enkla funktioner så som fet, kursiv och understryk, men också punktlistor, typsnitt och tabeller. Det går att läga till bilder men det krävs att bilden redan är på internet, hos ett webbhotell eller filserver. (CKSource, 2014) Figure 5 - Ckeditor GUI (CKSource, 2014) Något som kommer att underlätta användningen för många är funktionen ”Paste from Word” och som möjliggör att kopiera in ett Word-dokument och så omformas det till html och publiceras sedan med hjälp av AJAX. 3.3.2. Asynchronous JavaScript and JSON (AJAX) Asynchronous JavaScript eller AJAX är ett sätt att utföra ett anrop till en server i bakgrunden. Som namnet säger görs anropet asynkront, i form av XMLHttpRequest. Data objektet innehåller är godtycklig men måste vara ett xml eller json formaterat som. Returndatat läses in från ett respons på ett XMLHttpRequest. Denna teknologi stöder också returnvärden från servern i format på html-, xml-, json- och textformaterade strängar. (Garrett, 2005) Innehållshanteringssystemet kommer att använda sig av AJAX för all server kommunikation och modifiera sidans innehåll med det data som servern erbjuder. Detta gör att laddning av sidor är minimal eftersom bara en del av sidans innehåll behövs uppdateras. stora mängder data kan nu laddas upp i bakgrunden och inte störa användaren. 9 3.4. jQuery jQuery är ett cross-browser JavaScript-bibliotek som har funktioner för att förenkla utveckling i javascript. Bibliotek erbjuder funktioner som lätt kan påverka sidan dynamiskt eller implementera lätta funktioner för användare. jQuery-bibliotek stöder också möiligheten att utvidga standard funktionaliteten med hjälp av plugins så som grafiska eller funktionella tillägg. (jQuery, 2014) jQuery använder sig av en speciell syntax, i figur 6 till exempel har jQuery ett grundobjekt som är ett $-tecken. Från det objektet kan man anropa funktioner precis som klasser i java. Ett ( ) används $(function() { för att indikera en selector. De $("body").on("submit", function(event){ används för att kunna modifiera en var user = $('input[name="username"]').val(); var pass = $('input[name="password"]').val(); $.getJSON(“index.php”,{user:”+user+”, pass:”+pass+” }); }); del av html-koden med hjälp av javascript. T.ex. $("body") är en selector för en body-tagg. Nu kan man ansluta en annan jQuery funktion till body-taggen, figur 6 On Figure 6 - jQuery kod exempel är en funktion som väntar på att en viss händelse har inträffat t.ex. ”submit” och sedan kör funktionen som har givits. Som andra parameter i detta fall är det en anonym funktion som skrivs rakt in i den existerande funktionen. Allt detta är tillåtet för funktioner kan tilldelas variabler eller skickas till andra funktioner som argument. Passning av funktioner som argument är extremt vanligt i jQuery. I figur 6, efter att en förväntad händelse har inträffat kommer koden att köras och använda sig av $.getJSON som skickar ett XMLHttpRequest med data i form av ett json-objekt. Servern tar sedan och hanterar anropet och returnerar passande respons. Responsen kan vara allt från text till filer eller bilder. I detta fall kommer det att returneras ett statusvärde om inloggningen har lyckats och ett meddelande som skrivs ut på sidan. Det två viktigaste plugins som är implementerade i denna lösning är jQuery Validation och jQuery UI plugins. 10 3.4.1. jQuery Validation jQuery Validation är ett jQuery-tillägg med möjlighet att granska formulärvärden och sätta krav på vad skall gå att skriva i ett textfelt. Tillägget erbjuder också mölighet att dynamiskt visa respons till användaren om textfält som inte uppfyller ett specifikt krav så att det går att korrigera. (jQuery Validation Plugin, 2014) Innehållshanteringssystemet kommer att innehålla flera textfält för att kunna konfigurera olika värden så det är naturligt att använda sig av ett sådant tillägg för att det stöder jQuery-biblioteket för motiverat genomförande. 3.4.2. jQuery UI jQuery UI är ett jQuery-tillägg som ger abstraktioner för lågaktiv interaktion som kan användas för att bygga interaktiva webbapplikationer. (jQuery, 2014) jQuery UI kommer att vara tidsbesparande att använda för att slippa skapa egna teman för innehållshanteringssystemet. Vissa komponenter som jQuery UI erbjuder, är t.ex. knappar, listor, drop down-menyer, navigeringsfält, galler, skjutreglage, sidövergångar och mycket mer. 3.5. Hypertext Preprocessor (PHP) Hypertext Preprocessor eller PHP är ett server-side-skriptspråk som oftast används till webbutveckling men också som ett programmeringsspråk för allmänt ändamål. PHP används som en modul till webbserver t.ex för Apache Webserver, och som tar hand om alla php script i ett *.php-dokument. (PHP, 2014) PHP har ett brett utbud på funktionalitet i sig själv och mycket mer via olika tillägg, som erbjuder både högnivådatabasanrop eller lågnivåsockethandtag. I innehållshanteringssystem kommer många högnivåfunktioner användas, t.ex databasanslutning och autentisering av användare samt ftp-anslutning för fil överföringar mellan server 2 server, och vissa lågnivåfunktioner så som filmanipulering. 11 Skriptspråket är inte komplicerat, fast för en som är ovan eller kommer från traditionell programering kan det vara konstigt att det inte behövs datatyper eller minnes-hantering. PHP hanterar och väljer själv sina datatyper och ofta är det inte nödvändigt att spesifiera en. det är motiverat att inte göra det då att php kan optimera vid runtime i stället. För att använda sig av PHP i ett webb dokument krävs det att man börjar med ett <?php ?> tagg så som i figur 7. Där görs ett echo-anrop som är en typ av utskriftsfunktion. Resultatet blir en paragraftagg med ”Hello World” som värde. PHP taggar kan läggas vart som helst i ett html-träd, till och med utanför html-taggen. Beroende på vad man vill göra så kan det vara bra att skilja <!DOCTYPE html> <html> <head> <title>PHP Test</title> </head> <body> <?php echo '<p>Hello World</p>'; ?> </body> </html> html och PHP åt för att skilja business Figure 7 - PHP Hellow world program logic ifrån grafiska gränssnittet, speciellt när det handlar om databasanslutningar och lösenord. Då vill man inte ta risken att något läcker ut via ett falskt http-anrop eller vid ett oförväntat beteende. 3.6. MySQL MySQL är en databas som är ett av Structured Query Language som används för att upprätthålla data i en relationsdatabas. SQL går ut på att organisera information i tabeller som lagras i en relationsdatabas, så som MySQL. För att hantera data används Query-kommandon för att läsa, skriva och radea information. Kommandona är strukturerade i fem delar: Vad skall göras? Vilka kolumner berörs av detta kommando? Var i databasen och hur bestämma förändringen? Genom att på detta sätt hantera data kan man distribuera information mycket lättare över olika medier, så som web, mobil och applikationer. (Welling & Thomson, 2003) MySQL är strukturerat på ett sådant vis att det innehåller databaser, som innehåller allt från tabeller och lagrade funktioner för just denna databas. olika SQL databaser kan skilja lite på strukturen men i stort sett har de alla samma grundfunktionalitet. 12 4. UTVECKLING Detta kapitel beskriver hur och vad som används i utvecklingens olika skeden, allt från planering till implementation. Kapitlet klargör också värför vissa beslut favoriserades mer än andra. 4.1. Struktur För att innehållshanteringssystemet skall kunna funktionera krävs det en databas och en webbserver med någon form av CGI-integrering. Microsoft Internet Information Services (IIS) valdes som webbserver eftersom Designrs web hosting är baserat på Microsoft Widows Server 2008-teknologi, som erbjuder enkla administrationers verktyg och ett grafiskt gränsnitt. Internet Information Services är också modulärt vilket betyder att skala av det som inte behövs eller lägga till extra funktionalitet. I detta fall lägger vi till php som en CGI-integrering. Som databas valdes MySQL över Microsoft SQL Server. Detta beror på att php har klasser för MySQL-databaslösningar som har mera funktionalitet än php-standard SQL-implementation. 4.2. Planering Efter att valet av php-integrering gjordes ett diagram på hur innehållshanteringssystemet tänkte fungera. Fokus på resurshantering och att avgränsa kunddata från innehållshanteringssystemets server. Tanken var att erbjuda lösningen som en extra tjänst åt kunder som inte kände till webbutveckling och möjligen minska på behovet på support. Ett problem uppstod dok när kundens web host server inte är på rätt plattform eller updaterad till det nyaste. Tanken att distribuera innehållshanteringssystemet som en utvecklingsplattform skulle motverka idén för modularitet och bugghantering skulle bli en mycket krävande operation. Problemet löstes med att använda ftp-moduler i php för att kommunicera med externa webservrar, fördelen med ftp är att kompabilitetsproblem mellan en webbserver och dess mjukvara minskar för att innehållshanteringssystemet inte behöver installeras på end extern server utan man kan manipulera data från en 13 centraliserad server, där en utvecklare har lättare att implementera ny funktionalitet och test för buggar i existerande kodbas. Figur 8 visar strukturen på innehållshanteringssystemets moduler och hur de kommunicerar med varandra. Figure 8 - Innehållshanteringssystemets struktur diagram 4.3. Ajax anropsramverk Innehållshanteringssystemet har två delar, ett grafiskt gränssnitt och ett PHP backens. Därför är det viktigt att få dessa delar att kommunicera på ett entydigt sätt med varandra. Lösningen är AJAX som snabbt och plattformsoberoende klarar av skicka data med osynlig koppling mellan server och grafiskt gränssnittet. AJAXramverket har planerats att använda ett fast satt schema på hur kommunikationen till PHP-servern skall utföras. Figur 9 visar hur ett typiskt AJAX-anrop, json, { "PostTypeID": "files", "PostTypeAction": "main", "PostNodeData": {} används för att formatera data till en hanterbar struktur som formas om på server sidan. PostTypeID bestämmer vilken modul och PostTypeAction vilken funktion i modulen som önskas. PostNodeData används då modulen 14 } Figure 9 – AJAX-anrop kräver någon indata för att hantera anropet, t.ex uppdatera text, upp- och nedladdning av filer, m.m. Returndatan på AJAX-anropet är strukturerat på likadant sätt i ett json-objekt, kommunikationen är en tydlig och möjliggör utveckling på andra plattformer. 4.4. Grafiska gränssnittets funktionaliteter Grafiska gränssnittet är planerat att visualisera PHP backend-moduler så att en användare kan hantera sina resurser. Funktionaliteten kan baseras på vilka moduler som just denna användare behöver och som kan ändras vid behov. Detta upplägg möjliggör för implementation av ny funktionalitet till det grafiska gränssnittet oberoende om det är ett mobilt gränssnitt eller som i detta fall webbgränssnittet. 4.5. WYSIWYG-redigering Ckeditor möjliggjorde Microsoft Word-liknande funktionalitet i webbläsaren. Grafiska gränssnittet är enkelt att implementera till en webbsida fast scriptet inte är på samma server som själva html-dokumenten. Ckeditor javascript-biblioteket importeras genom en enkel scripttag som placeras i headtaggen. Även om biblioteket har stöd för jQuery kan implementaionen tillsammans upplevas som besvärlig. Problem kan då uppstå som får editorn att inte fungera som förväntat. Om jQuery tillåts att skapa och kontrollera Ckeditor-objekten så fungerar det bättre än att upprätthålla två bibliotek parallelt. Risken är att det blir konflikter och funktionaliteten kraschar. Konfiguering av biblioteket görs från en extern fil så det kan modifieras med php för att byta språk på verktyg och verktygstips etc. En av inställningarna möjliggör uppdatering av textdata att göras via AJAX-anrop till PHP-servern. Kraven är att PHP-servern klarar av att hantera sådan data och därför utnyttjas jQuerys AJAX-objekt för att kunna skicka extra parameter till server, för kontroll av vilka filer på en extern server som skall modifieras. 15 4.5.1. WYSIWYG-redigering sekvensdiagram Ett sekvensdiagram är ett bra sätt att visa hur en viss funktionalitet är förväntad att fungera. Figur 10 är ett sekvensdiagram över editering av ett html-document över ”server 2 server”-uppkopplingen. Figure 10 - WYSIWYG sekvensdiagram Logiken kommer att hanteras av php på Entry Point för att minska på stress för remote server. Beroende på modul så kan det bli mycket trafik eller högt prosessorbehov. Ny funktionalitet kan implementeras utan att behöva modifiera existerande kodbas och därmed vara säker på att äldre webbsidors moduler fortsätter att fungera. Detta är ytterst viktigt för att olika sidor har olika behov och strukturer som det kan bli invecklat att inkluderar i ett dynamiskt innehållshanteringssystem. 4.6. Filöverföring För att användaren skall kunna ladda upp eget material krävs det en filhanterare som är som en ftp client doc inbyggd i webbgränssnittet. Användaren har förmodligen ett webbhotell med inloggningsuppgifter till ett ftp-konto. Genom ftp-modulen kan php kommunisera med denna server och hämta en lista på filer som existerar på en extern ftp server. Denna information representeras för användaren i form av en lista 16 med filer och mappar, som kan navigeras med hjälp av länkar med spesifik data för att begära en viss resurs. Figur 11 visar ett exempel på en raderingshändelse som användaren har begärt och fått en bekräftelse om att anropet slutfördes korrekt. Med implementaion av jQuery UI har det skapats en interaktiv lista på filer och mappar. Valda filer kan sedan tas bort eller flyttats till mappar för att organisera om filstrukturen efter användarens behov. Figure 11 - File module GUI Filöverföringmodulen har AJAX-anrop som hämtar information för fillistan och söker ikoner för bilder för navigering. Detta är implementerat som en liten javascriptloop som itererar igenom listan och försöker hitta fil-format som är av typen bild (t.ex png, jpg och gif). Scriptet skapar en lista på bilder som söks från extern ftp-server med hjäpl av en php- ftp- modul. Fördelen med att ladda in data asynkront minskar sidans belastning och körtid, iställer kan man göra flera anrop med mindre payload. 4.6.1. Uppladdning av filer Uppladdning av filer är automatisk men i figur 12 erbjuds också en manuell lösning för speciella plattformer som inte stöder ”drag and drop”-teknologi. Add files öppnar webbläsarens inbyggda filhanterare, som kan användas för att Figure 12 - fil modul kontroller välja filer för uppladding. Start upload startar manuella uppladdningssättet. Med Cancel upload kan användaren tömma upp laddning kön som Add files skapat. 17 5. RESULTAT Innehållshanteringssystemet fyller kravspecifikationen som skapades tillsammans med Designr. Vissa friheter har tagits med implementationssätt och gränsitet men vi skulle ändå godkänna denna lösning som färdig för att ta i bruk. Följande punkter är uppnådda resultat: • Innehållshanteringssystemet är enkelt att använda • Modularitet, möjliggör för nya moduler att läggas till vid behov och tas bort • Enkel WYSIWYG-redigering lösning • Möjlighet att ladda upp filer via webbläsaren • Flytande server 2 server kommunikation • Lösenordskyddad arkitektur 5.1. Resultat Designr har visat stort intresse och kan tänkas erbjuda denna lösning som en tjänst för deras kunder. Speciellt kunder som har behovet att uppdatera deras hemsidan ofta, behöver nu inte vänta på att Designr utvecklare gör det utan klarar av uppdateringen själv. Innehållshanteringssystemet i sig är inte komplext så en stor del av information kan hittas från internet och andra medier. det är den enorma kodbasen som kan ställa till med problem speciellt när en ändring söndrar något annat i kedjan. Därför var det bra att avgränsa alla grafiska krav för det är något som också tar tid och erbjuder mycket lite till lösningens syfte. 5.2. Förbättringar Innan innehållshanteringssystemet kan publiceras till användare är det några punkter som ännu skall fortsättas på. Det handlar om att göra det enklare för användaren och administratorn att kunna använda lösingen. 5.2.1. Grafiska Gränssnittet Några förbättringar till lösningen skulle vara det grafiska, färgval och gemensam design på moduler. För detta behöver man en grafiker som skulle kunna rita upp 18 en skiss på menyer och knappar. En sådan ändring skulle inte påverka funktionaliteten och därmed vara ganska problem fritt att Implementera. 5.2.2. Optimera kodbas För innehållshanteringssystemet existerar det inte mycket dokumentation och själva kodbasen är svårläslig. Vissa biggar existerar också bara för att det finns gammal kod som inte fungerar som tänkt men som inte har modifierats, p.g.a. risk för att det söndrar äldre functionalitet. En metod för att lösa detta är testdriven utveckling för att garantera att enskilda funktioner kommer att fortsätter fungera. 5.2.3. Användarguide Användarguide ska utvecklas för både en användare och för administratorn. För en användare borde det inte krävas så mycket, bara enkla instruktioner för användning. För administration kräver det mera detaljer av systemet och dess underliggande funktionalitet. Det ska också finnas info tillgängligt för kommande utvecklare för att kunna skapa egna moduler och hur man implementerar dem. 19 6. SLUTSATS Att utveckla en sådant här webbtjänst där man berör många olika programmeringsspråk så som JavaScript, AJAX, HTML5 och PHP är mera krävande. Det finns alltid mycket att tänka på om det är sen grafiskt eller backend, vissa programmeringsspråk är bäst lämpade för en viss uppgift. Man kan argumentera att den nuvarande kodbasen kan förbättras, men i slutändan gör applikationen vad den var gjord för, ett användarvänligt innehållshanteringssystem med möjlighet att utvidga funktionaliteten vid behov. 20 7. KÄLLFÖRTECKNING CKSource. (2014). ckeditor.com. Hämtat från Ckeditor: http://ckeditor.com/ den 11 5 2014 Garrett, J. J. (den 18 2 2005). Ajax: A New Approach to Web Applications. Hämtat från Wikipedia: https://web.archive.org/web/20080702075113/http://www.adaptivepath.com/ide as/essays/archives/000385.php den 24 5 2014 jQuery. (den 24 5 2014). jQuery. Hämtat från jQuery: http://jquery.com/ den 24 5 2014 jQuery. (den 26 5 2014). jQuery UI. Hämtat från jQuery UI: http://jqueryui.com/ den 26 5 2014 jQuery Validation Plugin. (den 21 5 2014). jQuery Validation Plugin. Hämtat från jQuery Validation: http://jqueryvalidation.org/ den 21 5 2014 Kravspecifkation. (den 20 5 2014). Vad är en kravspecifikation? Hämtat från Kravspecifikation: http://www.kravspecifikation.se/ den 20 5 2014 Mozilla Developer Network. (den 25 5 2014). JavaScript. Hämtat från Mozilla Developer Network: https://developer.mozilla.org/en/docs/Web/JavaScript den 25 5 2014 PHP. (den 19 5 2014). PHP. Hämtat från PHP: Hypertext Preprocessor: http://www.php.net/ den 19 5 2014 W3C. (den 1 5 1999). SGML document introducing you to SGML. Hämtat från http://www.users.cloud9.net/~bradmcc/WhatIsSGML.html den 28 5 2014 W3C. (den 12 5 2011). Cascading Style Sheets (CSS) Snapshot 2010. Hämtat från W3C: http://www.w3.org/TR/CSS/ den 19 5 2014 W3C. (den 19 5 2014). HTML & CSS. Hämtat från W3C: http://www.w3.org/standards/webdesign/htmlcss den 19 5 2014 W3C. (den 19 5 2014). The global structure of an HTML document. Hämtat från W3C: http://www.w3.org/TR/html401/struct/global.html den 19 5 2014 Web Developers Notes. (den 20 5 2014). Programming languages on the internet. Hämtat från Web Developers Notes: http://www.webdevelopersnotes.com/basics/languages_on_the_internet.php3 den 20 5 2014 Welling, L., & Thomson, L. (2003). PHP and MySQL Web Development. i L. Welling, & L. Thomson, PHP and MySQL Web Development (s. 871). sams. 21 22