Masterpages i PHP

Tags:    php

Kære udviklere,

Nu da jeg både programmere i PHP og i ASP.NET C# er jeg lidt nysgerrig omkring masterpages. Jeg ved hvordan de fungerer i ASP.NET, men er interesseret i den bedste løsning til PHP. Jeg har selv bygget det op med en header.php og en footer.php, som jeg så bare inkludere ind hver gang. Er dette den bedste løsning? Eller findes der bedre alternativer?



8 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 12 karma
Sorter efter stemmer Sorter efter dato
Nu er header.php og footer.php en gammel metode og er langt fra sammenlignelig med masterpages i .NET. Det ved du jo sikkert godt. Konceptet bygger på gamle metoder brugt i den grafiske verden, som man f.eks. ser i Adobe InDesign.

Masterpages går i sin grundform ud på at du har en grundskabelon, som indeholder alt det der ikke ændres mellem hvert sideskift. Det kan være menuer, logo, footer m.fl. I grundskabelonen allokeres en placeholder, hvor man så indlæser en mindre skabelon til.

masterpage.phtml
Fold kodeboks ind/udPHP kode 


Det er ikke så længe siden jeg frigav en simpel template class herinde som du vil kunne udnytte.
http://www.udvikleren.dk/forum/46289/hvad-skal-med-i-et-lib-for-templates/

Men det er kun en brøkdel af hvad masterpages er og kan. Der tilhører også en page controller, som håndterer indlæsning af skabelonerne og placeholders. Dertil kommer integrationen af data ned igennem både skabelon og placeholder.



Indlæg senest redigeret d. 17.11.2014 20:07 af Bruger #10216
Så vidt jeg ved, så er det måden man gør det på, med mindre man vil bruge et framework.



du kunne også kigge efter en template engines, jeg bruger selv twig, men der findes også, har også tidligere brugt smarty.

en template i twig kunne se sådan her ud:
Fold kodeboks ind/udHTML kode 




Fair nok :)



jeg er egentlig enig med dig Nicky - MEN der findes smartere måder, som dog først bliver relevant ved mere avancerede sider.
Hvis du sender en HTTP Header i dit layout og bagefter indlæser din side som henter noget via ajax f.eks., så vil din side ikke virke - da HTTP headeren allerede er sendt! Du har sikkert prøvet denne fejl allerede. Derfor er det smart at lave sit design så denne fejl slet ikke kan opstå(pga. design i hvert fald).

Faldt over denne stackoverflow discussion, der er nogle gode bud: http://stackoverflow.com/questions/5183163/using-php-include-to-separate-site-content

Men ud over dem, så ville jeg nok hoppe ud i framework, det gør bare livet lettere - og hvis du ikke kender til ASP.Net MVC - then do it :) Det er så lækkert et arbejdsværktøj!



Tak for dit svar Mikkel!

Kiggede lige på dit link, og det er også næsten sådan noget jeg vil ud i. Tænkte bare at strukturere filerne sådan så man kan skifte template dynamisk. Ligesom hos Wordpress, da jeg gerne senere vil udvikle mit eget CMS.

Tænkte noget i stil med

Fold kodeboks ind/udKode 


og man så laver sit eget design i den mappe, og kalder nogle funktioner i de filer der skal hentes dynamiske elementer.

article.php
Fold kodeboks ind/udPHP kode 


Det er sådan set bare det jeg vil frem til. Har allerede lavet strukturen, men syntes min løsning med at inkludere header.php og footer.php er en dårlig idé, og ville se om der var en bedre løsning der mindede lidt mere om masterpages i ASP.NET.

Men hvis denne løsning findes i et framework, kunne det være jeg skulle kigge lidt på det :-).



Indlæg senest redigeret d. 17.11.2014 17:27 af Bruger #16025
Tusind tak for alle svar! Jeg vil kigge det igennem. Specielt dit eksempel Michael, det ser interessant ud!

UPDATE 18/11/14 18:13
Bare lige for at give et endeligt svar, så har jeg valgt at rode med Laravel, som har været en stor udfordring so far. Men er ved at have fundet ud af det. Har arbejdet med "masterpages" i Laravel, og det virker fantastisk!

master.blade.php
Fold kodeboks ind/udPHP kode 


home.blade.php
Fold kodeboks ind/udPHP kode 




Indlæg senest redigeret d. 18.11.2014 18:15 af Bruger #16025
Laravel er et udemærket valg. Yii er også kanont, hvis du stadig kigger dig omkring :)



t