2012-05-18 30 views
5

¿Cómo hacer páginas maestras en php? Como un Layout.cshtml (y RenderBody()) en ASP.NET MVC?Implementación de la funcionalidad de páginas maestras. PHP

Gracias!

P.S. ¿Tal vez hay una herramienta de terceros para este propósito?

EDITAR

Ok. ¡No se trata de la arquitectura MVC! No mira aquí: http://jsfiddle.net/challenger/8qn22/109/

  1. I want the master page/layout to stay when user gets redirected to the other page
  2. Want an average page to be nested inside the content division. So if it is a form I want this form to be displayed like:http://jsfiddle.net/challenger/XgFGb/17/
+0

¿Utiliza algún framework en PHP? PHP no tiene MVC de fábrica, por lo que debe elegir un marco que sea MVC, y la mayoría de las veces todos tienen su propio motor de "diseño/plantillas". Eche un vistazo a Code Igniter, Kohana, Sympfony, etc. – allaire

+0

No considero el patrón MVC en absoluto. Todo lo que se necesita es un concepto de páginas maestras. – lexeme

+0

Bien comparado con ASP.NET, que es MVC, entonces descubrí que necesitabas algún tipo de motor de mvc ... – allaire

Respuesta

1

Off lado, sé que el Laravel framework incluye la Blade templating engine. Utiliza una sintaxis muy similar a Razor.

Ejemplo:

@layout('master') 

@section('navigation') 
    @parent 
    <li>Nav Item 3</li> 
@endsection 

@section('content') 
    Welcome to the profile page! 
@endsection 

(Razor, Blade, Loller patines)

1

En PHP, no es una técnica muy similar llamado de plantillas. En lugar de una página maestra, tienes una plantilla. El lenguaje en sí no tiene características de creación de plantillas incorporadas, pero existen motores de plantillas de terceros (Smarty, PHPTAL y XTemplate, por nombrar algunos).

Si desea tener páginas maestras "reales", es completamente posible implementarlas. Simplemente envuelva su página maestra en una clase e incluya() esa clase en sus páginas de contenido.

También Zend Framework admite una vista en dos pasos, donde una plantilla de vista se representa dentro de una plantilla de diseño. Creo que esto satisface tu necesidad de páginas maestras.

ver las siguientes enlaces:

  1. Approximating Master Pages in PHP
  2. Is there anything like MasterPages on CodeIgniter Framework?
  3. PHP Equivalent of Master page in ASP.NET
  4. ASP.Net MVC or Zend Framework. What is your opinion
  5. http://hoolihan.net/blog-tim/2008/09/24/simple-masterpages-with-php/
6

Aquí es w PHP sombrero norma marco/API es compatible con:

El require("/definitions.php") función de las cargas de la clase, la función y las constantes se definen a partir de un archivo y envía el contenido fuera del código PHP para php: // stdout (en un servidor web esto es lo que se envía a la navegador). Es posible que desee utilizar require_once para importar dependencias (archivos php con definiciones).

Utilice las etiquetas de apertura y cierre de PHP para obtener algo parecido a la funcionalidad de creación de plantillas. Por ejemplo una página normal se vería así: normal page

mientras que un incluido (y repetible includable) uno podría tener este aspecto: enter image description here

No estoy diciendo "no utilizan motores de plantillas" , simplemente mostrando una forma clara y simple de lograr cosas para las cuales PHP está diseñado a propósito. Si esto es suficiente para sus necesidades, entonces digo "no use motores de plantillas por el mero hecho de hacerlo" (por cierto, si está ordenado, puede separar fácilmente la lógica de las vistas, sin marcos MVC estrictos y, a veces engorrosos).

1

El motor de plantillas Twig ofrece Template Inheritance

La parte más poderosa de la ramita es la herencia de plantillas. La herencia de la plantilla le permite crear una plantilla base "esqueleto" que contiene todos los elementos comunes de su sitio y define los bloques que las plantillas secundarias pueden anular.

Se puede utilizar como un dispositivo independiente, pero fue fabricado por personas detrás del popular symfony framework.

1

Hace un tiempo (varios años), que logró algo como esto utilizando Smarty, y extendiéndola a contener un método para el efecto de DisplayMaster ("NameOfTemplate", "NameOfMasterTemplate")

Funciona mediante la prestación de un plantilla y pasar el resultado a otra plantilla (principal).

Arriba tiene 2 plantillas: NameOfTemplate, solo tiene la sección de contenido principal, p.

<div>...{$someProcessing}</div> 

NameOfMasterTemplate tiene el html exterior

<html>...<body><div class="layout">{$innerHtml}</div></body></html> 
1

Añadir este fragmento de código en el área de contenido de su archivo master.php ... lo estoy usando como este y que funciona perfectamente para mí

<li><a href="master.php?page=blog.php">BLOG</a></li>

<div class="container content"> 

    <?php 
    if(isset($_GET['page'])) 
    { 
     $page_name = $_GET['page']; 
     include("/".$page_name); 
    } 
    ?> 
    </div> 
Cuestiones relacionadas