Modulær php-kode

Tags:    php

Jeg er en stor fan af at kode php systemer som "seamlessly" (kunne ikke lige finde det danske ord) kan integreres med en hver anden side. Altså at man bare inkluderer en enkelt side, og så fungerer det.

Denne metode giver mig imidlertid nogle designmæssige problemer.

Tag følgende eksempel:

Jeg har lavet et system som f.eks. henter en masse data fra en database. Brugeren af systemet inkluderer bare listdata.php for eksempel.
Nu er der bare så meget data at jeg vil lave noget paging. Dette vil jeg naturligvis holde inden for mit system så brugeren ikke skal "ødelægge" sin egen side for at få mit system til at virke.
Problemet er så bare at jeg ikke kan lave paginglinks da disse links så vil navigere væk fra brugerens side og ind i mit systems mappe.

Da jeg meget gerne vil holde kode og vising fra hinanden (MVC-modellen) leder jeg efter en løsning på dette problem.



6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
The-Freak: Lidt overkill måske... ;)


Eksempel (fiktivt domæne: 'godelinks.dk'):
Fold kodeboks ind/udKode 


Der er ikke det store problem i det, lige meget om dine filer ligger det ene eller det andet sted. Urls er (med mindre de er skrevet absolut) relative. :)

Endvidere kan du jo også bruge $_SERVER['SCRIPTNAME'], der indeholder den aktive sides navn.



Indlæg senest redigeret d. 04.03.2007 23:06 af Bruger #10216
Ved alle dine links undlader du at inkludere dit eget domænenavn og nøjes med "/path/page.ext".

Hvis dette ikke virker, så skal vi lige have en lidt bedre beskrivelse af dit systems opsætning og hvordan det integreres på din brugers hjemmeside. :)



Extra info: Modulært opbyggede shops er et helvede at kode... ;)



En måde det kunne gøres på er callback funktioner, altså lade brugeren definere en callback funktion for hver post der skal udskrives eller for at udskrive pagingen.



The-Freak jeg forstår ikke helt hvad du mener. Kan du uddybe evt. med et eksempel (behøver ikke være noget du har lavet).

Gnu: Jeg prøver lige at forklare det med lidt illustrationer :P. I øvrigt er det ikke et system jeg er ved at lave, det er bare et tænkt eksempel men jeg søger ldit noget best practices til at løse et sådant problem da jeg ofte er rendt ind i det.

Tag f.eks. følgende mappestruktur:

Fold kodeboks ind/udKode 


include.php henter data og smider en tabel ud samt paging i bunden. Paging-linksne kunne f.eks. se sådan her ud <a href="mitsystem/include.php?offset=10">1</a>.

I index.php er min side inkluderet med include('mitsystem/include.php');

Det vil så sige index.php har de før nævnte links. Trykker man så på linket vil man blive rykkket ind i mitsystem-mappen og den side som brugeren selv har lavet til at vise dataen i samt evt. stylesheet vil jo selvfølgelig ikke blive vist da man nu er på siden include.php istedet for index.php. Håber jeg fik skåret det helt ud i pap nu :P


Jeg overvejer lidt at lave det med AJAX, men tvivler stadig lidt det det f.eks. vil breake tilbage-knappen i browseren.



Indlæg senest redigeret d. 04.03.2007 15:42 af Bruger #3275
En metode jeg tit har brugt når jeg har lavet web-applikationer er at have koden kalde forskellige "callbacks". Lad os forestille os at vi har et interface der skal udskrive noget fra en database. Vi kunne lave en klasse sådan her:
Fold kodeboks ind/udKode 


Nu har vi en klasse som kan kalde en callback funktion. Så er det bare at lave en callback funktion som passer til ens projekt. Ideen er at klassen ikke ændre sig, men det gør callback funktionen. Det samme kunne man jo i teorien(Har ikke afprøvet det praktisk, men bare en tanke) også gøre her, og altså bruge callbackfunktioner til opgaven.



Indlæg senest redigeret d. 04.03.2007 16:25 af Bruger #2330
The-Freak: Lidt overkill måske... ;)


Er ikke lige med på hvordan det er overkill? Forudsat at du wrapper din klasser ordenligt, og sørger for at du nemt kan arbejde med det(Mit eksempel var et MEGET primitivt et), så er det både effektivt, og nemt at arbejde med. Desuden kan det hele pakkes ned i et framework som så kan *genbruges i fremtidige projekter*, hvilket var hvad jeg forstod på Jonas at han også til en hvis grad er ude efter.



Indlæg senest redigeret d. 05.03.2007 13:41 af Bruger #2330
t