Pasta
- Pegar es un "CMS" liviano creado alrededor de archivos y carpetas estáticos en lugar de una base de datos.
- Cada archivo HTML representa una página del menú, cada carpeta representa una sección, hasta una profundidad infinita.
- Moustache se utiliza para plantillas sin lógica, incluidos los parciales.
- Las variables y las plantillas caen en cascada a través de la jerarquía del sitio.
- La configuración se define dentro de la fuente HTML, así:
<!--
@template: master
@partial: project
@title: The Page Title
@visible: TRUE // visible in menu
@label: Menu Label (optional)
-->
Objetivos de diseño
- enrutamiento simple con rutas y cierres definibles por el usuario
- Bigote para plantillas ultra tontas
- plantillas flexibles y parciales de página en cascada
- configuración mediante sintaxis en línea simple
- sigue algunas señales de la aplicación Stacey.
- utilice la última tecnología PHP, por ejemplo, Composer
Requisitos
- PHP 5.3+
- Apache mod_reescritura
- Moustache.php (instalado automáticamente por Composer)
Inicio rápido/demostración
¡La forma más rápida es clonar el sitio de demostración y modificarlo al gusto! Asegúrese de ejecutar composer update
para instalar las dependencias.
Sitio de demostración: https://github.com/paste/paste-demo
Instalación
Utilice el compositor. Agregue paste/paste
al composer.json
de su proyecto:
{
"require" : {
"paste/paste" : " dev-master "
}
}
Cree un archivo index.php
para el enrutador frontal: (o cópielo del sitio de demostración)
<?php
// composer autoload
require ' vendor/autoload.php ' ;
use Paste Paste ;
// configuration
$ config = array (
// optionally specify a 'base_url' if serving Paste from a subdirectory, i.e. RewriteBase
// 'base_url' => '/paste-demo',
// relative path to content directory
// 'content_dir' => 'content',
// relative path to template directory
// 'template_dir' => 'templates',
// relative path to cache directory
// 'cache_dir' => 'cache',
);
// load config and parse content directory
$ paste = new Paste ( $ config );
// (optional) user defined routing
// 'route regex' => any valid callback
// matched tokens from the regex will be passed as parameters, with $paste instance first
$ paste -> add_route ( ' blog/([0-9]{4})/([0-9]{2})/([0-9]{2})/([A-Za-z0-9-_]+) ' , function ( $ paste , $ year , $ month , $ day , $ name ) {
// ignore date and run normal content request
return $ paste -> render_url ( " blog/ $ name " );
});
// init routing and run
$ paste -> run ();
Cree el content
, templates
y los directorios cache
en su raíz web. Apache debe poder escribir en la carpeta cache
. Su raíz web debería terminar luciendo así:
/cache/
/content/
index.html
/templates/
template.stache
/vendor/
index.php
composer.json
.htaccess
Agregue el archivo de índice de contenido raíz, content/index.html
:
<!-- @title: Hello World -->
<!-- @template: template -->
< h3 > Hello, world! </ h3 >
Agregue la primera plantilla, por ejemplo, templates/template.stache
:
<!doctype html >
< html >
< head >
< meta charset =" utf-8 " >
< title > {{title}} </ title >
</ head >
< body >
{{{content}}}
</ body >
</ html >
Cree un archivo .htaccess
para habilitar la reescritura de URL: (o cópielo desde el sitio de demostración)
# don't list directories
Options -Indexes
# Turn on URL rewriting
RewriteEngine On
# Installation directory -- same as your 'base_url'
RewriteBase /
# Protect dot files from being viewed
< Files .*>
Order Deny , Allow
Deny From All
</ Files >
# Protect application and system files from being viewed
RewriteRule ^(?:vendor|content|templates|cache)b.* index.php/$0 [L]
# Allow any files or directories that exist to be displayed directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# Rewrite all other URLs to index.php/URL
RewriteRule .* index.php/$0 [PT]
# use utf-8 encoding for anything served text/plain or text/html
AddDefaultCharset utf-8
# force utf-8 for a number of file formats
AddCharset utf-8 .html .css .js .xml .json .rss
¡Ahora visite su sitio Pegar en un navegador web y disfrute de la magia !
TODOS DE REFACTOR 2016:
permitir una base de reescritura que no sea raíz, es decir, permitir ejecutar Pegar desde un subdirectorio las clases parecen arbitrarias, ¿combinan Pegar y Contenido? hazlo completamente OO, no estoy seguro de por qué tanta estática
REESCRIBIR LOS TODOS DE 2013:
renderizar contenido con el cargador de cadenas Moustache para permitir hacer referencia a parciales y contexto agregue un acceso directo para ocultar páginas como el prefijo de guión bajo en el nombre del archivo haga que el sitio de ejemplo sea más genérico, agregue texto ficticio y CSS ilustrativo para la jerarquía del menú escriba una nueva descripción y una guía de uso rápido con capturas de pantalla plantilla única(), el resto son parciales() mover contenido estático a Pegar refactorizar la biblioteca de páginas Constructor de páginas: cambie la fábrica a Page::from_path() actualizar Página->is_current() y Página->is_parent consolidar elementos de navegación en next() y prev(), eliminar los no utilizados cambiar página->padres a algo como parent_paths simplificar buscar y buscar_todos, etc. renderizar menú() por separado para eliminar páginas invisibles eliminar sección a favor del padre
use el cargador del sistema de archivos Moustache para parciales y caché hacer que el bigote del menú sea resurgitivo parcial para una profundidad infinita - arreglar CSS sintaxis más exclusiva para variables de página/sección plantillas en cascada adecuadas ¿Rehacer el control de sección como se sugiere en Página->fábrica? No devolver Pegar a todas las clases estáticas Combinar contenido en la página Combinar controlador y contenido Combinar clases de página y plantilla cambiar las plantillas de bigote a solo .stache simplemente enlace a tumblr en lugar de usar el controlador de blog de Tumblr considere solo cargar la estructura bajo demanda (por ejemplo, menú()), y luego solo cargar las variables de página ¿Un sitio basado en archivos realmente necesita un caché de archivos? - use Memcache en todo caso. caché de referencia versus sin caché use espacios de nombres, haga que el cargador automático PSR-0 sea compatible y empaquetelo para el compositor Pegar::ruta() sintaxis para rutas definidas por el usuario núcleo separado y un sitio de muestra para este repositorio, mueva el material de la cartera personal a un repositorio separado simplificar lo más posible. demasiado código para lo que se supone que es