webForumDet fria alternativet

Rutiner för att bygga hemsida.

PHP

10 svar · 2 377 visningar · startad av supercajo

Medlem sedan jan. 2005114 inlägg
Frågan#1

Hej!

Jag håller på med uppbyggandet av en hemsida och behöver lite råd och hjälp på vägen. Ni har varit riktigt grymma hittills och hoppas på lite råd nu :)

Jag visste inte om jag skulle lägga denna tråd i html eller php, men jag valde php med anledning av de lösningar på mina bekymmer förväntas lösas med php. I annat fall får någon moderator ha överseende och flytta tråden. Jag har även sökt men inte funnit det jag letat efter...

Till topic:
När man bygger hemsidor. Hur går man tillväga när man bygger en relativt seriös hemsida. Finns det några hållpunkter man inte skall strunta i? Ungefär "Man skall alltid börja med..." eller "Se till att ha gjort........först".

Vidare undrar jag om när man bygger hemsidor, om man gör en startsida och använder funktioner i PHP för att spara tiden för uppbyggandet. Typ om man klickar på en länk i en kategori så byter man egentligen inte sida utan byter bara ut informationen på sidan? Hänger ni med?

Det jag menar är om man klickar på avdelningen "Om företaget" byter man inte sida till omforetaget.php utan stannar kvar på index.php men på något sätt ändrar informationen. Eller måste jag göra en sida för varje avdelning och för varje länk jag har på min hemsida?

Jag hoppas ni förstår vad jag menar annars fråga:)

Medlem sedan maj 20012 237 inlägg
#2

Jag skulle avråda dig från att namnge filerna: "Om företaget" -> omforetaget.php. Det luktar "lägg i all logik och HTML i samma fil" och det brukar inte vara en bra lösning i större projekt. Om du ändå vill följa denna tanke, så bör du tänka på hur du kan återanvända viss funktionalitet som t ex databasanrop osv. Det blir lätt en massa require xyz...

Börjar du dela upp sidorna i mindre moduler så att du lättare kan göra förändrigar, så börjar du snabbt få en struktur som mer och mer liknar MVC-metodologin och då är det genast mycket bättre att välja en MVC-framework som tillhanda håller mycket av det du har "hittat på själv".

Om du nu vill göra en lite mer seriös webbsida och att du kan PHP hyggligt bra, skulle jag råda dig att välja ett MVC-ramverk för ändamålet.

- Zend Framework
- Symfony 2
- Kohana

En MVC-ramverk kräver dock att du har kunskaper om PHP och objektorienterad programmering (OOP).

En fördel med MVC är att dess ideologi är at separera affärslogik från presentations-skiktet. Dvs system är delat i tre skikt:
- Modellen, vars uppgift är att innehålla affärslogiken samt lokalisering av data (t ex från en databas eöller en extern webbservice)
- Kontrollern (Controller på engelska, därav C:t), vars uppgift är att förmedla klientens (t ex webbläsare) begäran till modellen samt agerar som ger datan från modellen till presentationsskiktet)
- Presentationsskiktet (View på engelska, därav V:t), vars uppgift är att skapa den visuella presentationen av datan som genererades av Modellen. Ofta så skapas presentationen i form av HTML men tanken är att man lätt kan visa informationen som XML, JSON, CSV osv.

Då affärslogiken och presentationen hålls separerade, är det i princip mycket lättare att göra förändringar i utseendet, utan att det påverkar andra delara av systemet.

MVC kan vara overkill för dig men av egen erfarenhet så vet jag att den hjälper mig att hålla projekten i styr.

Jag använder MVC uteslutet när jag bygger allt från hemsidor till större system. Jag har svårt att rekommendera något annat åt dig :)

Vill du komma undan lätt men ändå få en nästan färdig lösning, så kan Wordpress eller Drupal vara något. Drupal kräver dock att du är insatt i dess värld så... ;) Wordpress är enklare och det finns en massa färdiga teman som du kan aktivera så att du inte ens behöver skapa ett själv.

Medlem sedan jan. 2005114 inlägg
#3

Jag förstår men förstår ändå inte....går det att visa ett exempel där denna rutin används och kan du säga vad på sidan som är mvc? Ursäkta min dunhet;-)

Medlem sedan maj 20012 237 inlägg
#4

Ett system kan ha många kontroller-klasser, en som hanterar inloggning och en annan som hanterar skapandet av en ny post i ett forum.

Ett mvc-baserad system har oftast en enda s k entry point, som tar emot alla anrop på systemet. Denna entry point (ofta index.php) delegerar sedan anropet till rätt kontroller som därefter hanterar anropet själv.

Det är bara denna index.php som en webbäsare kan anropa. Alla andra filer (utom js, css och bilder) anropas internt av systemet.

Ofta har mvc-ramverk ett s k router-system, som omvandlar url:en till namnet på den kontroller som skall hantera just denna anrop. En kontroller har en eller fler metoder som är menade för att hantera anropen. Dessa metoder kallas ofta för "controller actions".

Låt oss ta ett exempel:

http://example.com/user/login

kan då härledas till följande:

kontroller: user
action: login

dvs kontrollern user har en metod som heter login och som då anropas.

Olika mvc-ramverk har olika standarder för hur action-metoderna namnges. T ex Zend Framework kräver att alla controller actions har suffixet 'Action. I detta fall skulle metodens namn vara loginAction. And mvc-ramverk har egna konventioner.

Meningen med metoden loginAction kommer i detta fall kan t ex vara att logga in användaren. Action-metoden har access till request-objektet.

Action-metoden validerar inte själv om användaren har angett rätt användarnamn och lösenord, utan den delegerar detta till en Modell-klass. Detta iaf om man vill följa goda normer.

När modellen har försökt validera användaren, kommer action-metoden sedan (oftast) att antingen visa ett "Du är nu inloggad" eller "Felaktigt användarnamn/lösenord" typ av meddelande.

Återigen är det inte kontrollern som genererar HTML-sidan med en av ovanstående meddelande, utan kontrollern delegerar denna uppgift till en sk view (presentationsskiktet) som genererar innehållet.

Kontrollerns uppgift blir nu att skicka tillbaka svar i form av HTML (i detta fallet).

Medlem sedan maj 20012 237 inlägg
#5

Om vi nu hade en action metod vars uppgift är att visa en viss användarprofil:

kontroller: user
action: view-profile
url: http://example.com/user/view-profile/id/42

Action-metoden view-profile ber modell-klassen om att hämta en profil, vars id är 42.

Om en profil hittas, ges profil-objektet till presentations-lagret som kan sedan visa innehållet på ett lämpligt sätt.

Med mvc kan vi alltså lätt separera det hur informationen hämtas från det hur informationen visas.

Samma action-metod kan generera ett svar för HTML, XML och CSV med samma information sån modell-klassen, beroende helt på i vilket form information vill fås.

Medlem sedan jan. 2005114 inlägg
#6

Finns det någon offeciell sida där man finner syntax och övrig hjälp för mvc?

Medlem sedan maj 20012 237 inlägg
#7

Tja, ett ett är ju att välja ett MVC-framework och studera hur man använder det.

http://framework.zend.com/
http://symfony.com/ (Välj Symfony 2)

Några länkar jag hittade genom att googla:
http://php-html.net/tutorials/model-view-controller-in-php/
http://www.phpro.org/tutorials/Model-View-Controller-MVC.html

Medlem sedan jan. 2005114 inlägg
#8

hmm måste erkänna att jag har läst dina inlägg lite halvstressigt då jag alltid vart på språng när jag lyckats få tid att läsa svaren. Men jag har inte någon lust att använda wordpress/drupal el. dyl. då jag vill skaffa mig kunskaper inom php, vilket kan hjälpa mig längre än att jag gör ett halvdant jobb tillsammans med php och färdiga lösningar etc. Det är kunskapen jag vill åt tillsammans med att kunna göra egna sidor och system:)

Men gör alla så att de använder MVC med anledning av att du sa det var overkill eller kan man göra på annat sätt också!

Tack för ditt engagemang jme!

Medlem sedan maj 20012 237 inlägg
#9

Visst kan du ha en xxx.php för varje funktion och som innehåller all visningskod tillsammans med databasanropen.

Sen kan du skapa "database.php" som sköter uppkopplingen mot databasen och sedan inkludera den i varje xxx.php (require "database.php").

Då kan du lättare återanvända viss kod samt ha ofta använda funktioner samlade i en fil (write once, use many times - Don't repeat yourself).

I index.php-filen kan du ha en lång if-else eller switch där du kontrollera, vilken fil som frågades efter och sedan inkluderar du den. Dett är ju vad en MVC-ramverk gör i princip, fast lite finare.

$page = $_GET['page'];

switch($page)
{
	case: 'login':
	{
		require 'login.php';
		break;
	}
	case: 'user':
	{
		require 'user.php';
	}

}
<?php

// login.php

// inkludera dessa i typ varje fil
require 'database.php';
require 'user.php';
require 'session.php';

...
...

// en form för inloggning
// samt kod för att validera användarnamnet och lösenordet
// logga in användaren

Detta är enligt mig helt ok till en början, om man inte är så inlärd med mvc och vad det heter. Nyckelsaken är att man gör så återanvändbart kod som möjligt. Antigen med hjälp av OOP eller så placerar (grupperar) man liknande kod i samma fil som man sedan kan inkludera på sidorna.

Titta på de två sista länkarna jag gav, för i de artiklarna har man försökt bygga upp enklare mvc-baserade system. Läs igenom dem noga och leta upp mer information så får du snart bättre hum om hur det fungerar. Sedan kan du försöka göra ett eget litet mvc-ramverk som har stöd för kontroller, modell-klasser samt vyer. Det gjorde jag en gång. Det blev skit men det var roligt och jag lärde mig nåt (att använda ett färdigt mvc-ramverk så att jag slapp slösa bort mer tid ;) ).

Medlem sedan jan. 2005114 inlägg
#10

Är det så här "alla" gör? Jag menar, det måste ju finnas skräckexempel som du sett under din tid som du programmerat eller?

Vill du får du gärna skicka några sidor du gjort (som ett pm) om du inte vill det skall synas :)

Är nyfiken på hur vissa gör på sina sätt liksom för att få inspiration till min sida.....

Läste för övrigt något som jag undrar över på w3schools (som för övrigt är en grym sida)
"Don't use hyperlinks inside paragraphs, to send visitors to every page of your Web." i en avdelning där de rådgör hur man bygger upp en webbsida och hur man skall låta sina besökare navigera. Vad är felet med att ha länk/länkar i en <p></p> sats om man t.ex. skall skicka iväg besökaren till något man tycker är intressant som ligger innanför websidan men även utanför i artikel/artiklar typ "Tips-länkar" etc.

Medlem sedan okt. 20117 inlägg
#11

Du kan gå in på http://svenskphp.blogspot.com/ och kolla upp php-funktioner, där går man igenom hur man skapar ett dynamiskt menysystem också.

276 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
138 ms — hämta tråd, inlägg och bilagor (db)
134 ms — ändringar (db)