jag sitter och grubblar över hur jag ska bygga upp en sida, så smart som möjligt.
Saken är den att jag börjar komma in på ganska avancerad programmering, och vet inte hur jag ska bygga upp strukturen.
Hur sparar ni era klasser, för att enklast kunna inkludera dem på sidan? I en egen katalog? En klass per fil?
Ponera att jag kör som jag beskrev ovan, då känns det som man måste göra väldigt många inkluderingar på varje sida, detta anser jag vara ganska kluddigt, finns det något smart sätt att komma förbi detta? Kanske genom att ha en tredjepartsfil som inkluderar de filer som ska inkluderas, och så inkluderar man denna fil för sig?
Hur bygger jag enklast upp layouten? Sparar jag den som header och bottom, eller ska jag använda mig av templates? Om jag nu bestämmer mig för att använda mig av templates för att enklare separera php-kod från layouten, tillkommer det väldigt mycket bekymmer med att hålla koden "ren" imo. Är detta ett "känt" fenomen?
Känns rätt hopplöst att börja bygga på något stort, då man en dag senare kommer på ett smartare sätt att göra det på, vilket hela tiden händer.
Vore betydligt enklare om man var ett team, som kunde se problemen från andra synvinklar än ens egna syn på det.
När man kommer till denna storleksordningen, är det dumt att bygga något på egen hand?
1. Jag brukar spara funktioner med närliggande funktionalitet i samma fil, och kod som hör ihop. Precis en klass per fil är kanske lite överdrivet stringent.
2. Inkludera i flera nivåer. Om du har en PHP-fil för att hantera inlägg, och en för att hantera smilies, inkludera smilies-filen i inläggs-filen, istället för allt i main-filen.
3. Jag har använt en fullösning, på en en-fils-site, där jag har en kategori-variabel som skickas som querystring. Sedan använder jag en switch-sats. För större projekt är det nog en idé att göra iordning nån template-kod. Studera indelningen på vBulletin, du som är utvecklare här på wF. Försök i allmänhet att koda så generellt så möjligt, håll isär ren kod, design samt innehåll, och gör det till 100%!
1. Jag brukar spara funktioner med närliggande funktionalitet i samma fil, och kod som hör ihop. Precis en klass per fil är kanske lite överdrivet stringent.
Jo, det låter smart. Ska testa mig fram lite, och återkommer om jag stöter på några problem.
nitro2k01 skrev:
2. Inkludera i flera nivåer. Om du har en PHP-fil för att hantera inlägg, och en för att hantera smilies, inkludera smilies-filen i inläggs-filen, istället för allt i main-filen.
Gott, en bit på vägen! ;)
Man får totalt hjärnstopp om man inte får tips utifrån.
nitro2k01 skrev:
3. Jag har använt en fullösning, på en en-fils-site, där jag har en kategori-variabel som skickas som querystring. Sedan använder jag en switch-sats. För större projekt är det nog en idé att göra iordning nån template-kod. Studera indelningen på vBulletin, du som är utvecklare här på wF. Försök i allmänhet att koda så generellt så möjligt, håll isär ren kod, design samt innehåll, och gör det till 100%!
Jo, perfektionist (när det handlar om kodning) som jag är, så blir det alltid struktur på koden, det går före allt.
Men du menar alltså att det är onödigt att använda sig av ett templatesystem om man endast ska bygga en inte allt för stor företagssida?
Men du menar alltså att det är onödigt att använda sig av ett templatesystem om man endast ska bygga en inte allt för stor företagssida?
Jag menar snarare att jag har varit för lat för att slänga ihop ett template-baserat system. Annars är det nog enklast, då du kan återvända koden på ett annat sätt, samt byta ut designen lättare. Så template-baserat är nog att föredra.
Skapar en prepare.php fil som jag lägger i roten, denna fil inluderas av alla sidor.
prepare laddar in dom vanligaste classer/functioner/sätter globala variablar osv.
Alla klasser lägger jag i en katalog (kallar dom moduler)
Bla tar jag alltid med en page class
Page classen har en hel del olika funktioner som tillhör sidan, tex:
$page->settitle(string)
$page->setdescription(); och alla dom sakerna. dock alltid satt ett standardvärde på alla variablar i page så man endast ändrar om man måste/vill.
$page->load_module("classnamn"); Som require_once i den katalog där classerna ligger. Bättre att alltid referera till en absolut katalog på ett ställa så man slipper ändra överallt om man vill flytta filerna.
$page->load_function("namn"); laddar in funktions filen (namn)
Detta sätt tycker iaf jag är behagligt att arbeta med.
Så en sida kunde tex göras så här:
<?
include "prepare.php";
$page->settitle("Min tuffa medlems sida");
$user = $page->load_module("user");
$page->require_login($user); // Om de krävs att man är inloggad.
// Hit kommer vi inte om man inte är inloggad.
$page->add_left_menu("användarmeny"); // Inkluderar en speciel medlems meny kanske?
// Kanske skulle vilja ha en counter på denna sida också
$counter = $page->load_module("counter");
$counter->increase();
$page->load_header();
?>
Hej <?= $user->get("name"); ?> denna sida har visats <?= $counter->gettotal(); ?> gånger, weho.
<?
$page->load_footer();
?>
De filer som inkluderas i praktiskt taget alla filer, låter jag inkluderas i header-filen, dvs den där jag har CSS och menyn. Sedan låter jag resten inkludera den.
Om jag skulle göra om min hemsida, vilket jag kanske gör i framtiden, så skulle jag samla alla databasanrop i en dbklass som jag la i en separat fil och inkluderade i headerfilen. Det blir betydligt lättare att uppdatera db-strukturen då. Man slipper fundera över vilka fler filer som möjligen använder just denna tabell någonstans...
Härligt! Det fick in mig på lite nya tankebanor! Tack för att du tog dig tid! :)
aasah skrev:
De filer som inkluderas i praktiskt taget alla filer, låter jag inkluderas i header-filen, dvs den där jag har CSS och menyn. Sedan låter jag resten inkludera den.
Om jag skulle göra om min hemsida, vilket jag kanske gör i framtiden, så skulle jag samla alla databasanrop i en dbklass som jag la i en separat fil och inkluderade i headerfilen. Det blir betydligt lättare att uppdatera db-strukturen då. Man slipper fundera över vilka fler filer som möjligen använder just denna tabell någonstans...
Jag löste det som Dies_Irae beskrev ovan, har en fil där jag inkluderar klasserna, och sedan inkluderar jag denna filen högst upp på varje sida.
Ledsen om jag väntade med svaret, hade helt glömt bort tråden.
Mycket bra tråd! Den här tråden bör få mer innehåll och placeras högst upp.
Jag funderar själv på liknande idéer. Jag vill helst samla ihop alla databas-relaterade funktionaliteter i en klass.
Sedan försöker jag alltid skilja på html och kod, så mycket som möjligt.
Har nu börjat kika mer på templates.
Jag installerade Joomla och har börjat studera dess struktur. Jag gillar idén att man enkelt kan placera olika moduler på sidan utan större problem.
Dvs just som Dies_Irae gör.
Håller på och testar lite med en autoloader till ett nystartat projekt och det verkar riktigt smidigt. Inga klasser behöver inkluderas manuellt, autoloadern läser in dom vid behov, blir ett visst extrajobb för servern men det är försumbart.
Det är en väldigt bra grund när du ska separera kod från mallarnas innehåll. Visst, tråkig och akademisk men väldigt nyttig. Artikeln hjälper dig göra rätt från början.
Det är en väldigt bra grund när du ska separera kod från mallarnas innehåll. Visst, tråkig och akademisk men väldigt nyttig. Artikeln hjälper dig göra rätt från början.
Ska ta och läsa igenom den när jag får tid. ;)
Funderat lite, se bifogad fil.
Givetvis endast använt mig av nyheter som ett exempel.
Om vi säger att jag lagrar formulär och layouten av nyheten i en klass, och sedan kör alla databas-anrop i en annan. Är detta ett okej sätt att bygga det på?
Tanken är ju då att man enklare ska kunna uppdatera flera sidor(portaler, domäner osv...) samtidigt,
genom att uppdatera endast en klass, istället för att behöva gå in på resp. sida och leta upp koden.
Just nu kan du bara ha en variabel i WhERE-satsen. Ofta har man ju mer specifika WHERE-satser. Ge metoden två vektorer som parametrar. En vektorn har kolumn-namnen till WHERE-satsen och den andra själva värden:
Just nu kan du bara ha en variabel i WhERE-satsen. Ofta har man ju mer specifika WHERE-satser. Ge metoden två vektorer som parametrar. En vektorn har kolumn-namnen till WHERE-satsen och den andra själva värden:
Jo, det där var bara ett exempel jag skrev ihop i all hast på jobbet idag, säger inte att det är komplett på det viset.
Men själva sättet att hämta nyheterna och skriva ut dem, är det ur "snabbhet" (kommer inte på ett bättre ord ;)) ett bra sätt att strukturera upp det på?
byter alltså ut :name samt :age mot value resp. value2. Väldigt smidigt!
Man behöver inte bry sig om i vilken ordning de kommer och har man samma värde flera gånger i frågan så sätts dessa automatiskt. Du behöver inte ha två setString("name", value);