Coller
- Paste est un "CMS" léger construit autour de fichiers et de dossiers statiques au lieu d'une base de données.
- Chaque fichier HTML représente une page du menu, chaque dossier représente une section, à l'infini.
- Moustache est utilisé pour les modèles sans logique, y compris les partiels.
- Les variables et les modèles se répercutent dans la hiérarchie du site.
- La configuration est définie dans la source HTML, comme ceci :
<!--
@template: master
@partial: project
@title: The Page Title
@visible: TRUE // visible in menu
@label: Menu Label (optional)
-->
Objectifs de conception
- routage simple avec des itinéraires et des fermetures définissables par l'utilisateur
- Moustache pour des modèles ultra stupides
- modèles flexibles et pages partielles en cascade
- configuration via une syntaxe en ligne simple
- s'inspire de l'application Stacey.
- utiliser la dernière technologie PHP, par exemple Composer
Exigences
- PHP5.3+
- Apache mod_rewrite
- Moustache.php (installé automatiquement par Composer)
Démarrage rapide / Démo
Le moyen le plus rapide est de cloner le site de démonstration et de le modifier à votre goût ! Assurez-vous d'exécuter composer update
pour installer les dépendances.
Site de démonstration : https://github.com/paste/paste-demo
Installation
Utilisez Composer. Ajoutez paste/paste
au composer.json
de votre projet :
{
"require" : {
"paste/paste" : " dev-master "
}
}
Créez un fichier index.php
pour le routeur frontal : (ou copiez-le depuis le site de démonstration)
<?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 ();
Créez le content
, templates
et les répertoires cache
dans votre racine Web. Le dossier cache
doit être accessible en écriture par Apache. Votre racine Web devrait ressembler à ceci :
/cache/
/content/
index.html
/templates/
template.stache
/vendor/
index.php
composer.json
.htaccess
Ajoutez le fichier d'index de contenu racine, content/index.html
:
<!-- @title: Hello World -->
<!-- @template: template -->
< h3 > Hello, world! </ h3 >
Ajoutez le premier modèle, par exemple templates/template.stache
:
<!doctype html >
< html >
< head >
< meta charset =" utf-8 " >
< title > {{title}} </ title >
</ head >
< body >
{{{content}}}
</ body >
</ html >
Créez un fichier .htaccess
pour activer la réécriture d'URL : (ou copiez depuis le site de démonstration)
# 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
Visitez maintenant votre site Paste dans un navigateur Web et profitez de la magie !
À FAIRE REFACTOR 2016 :
autoriser une base de réécriture qui n'est pas root, c'est-à-dire autoriser l'exécution de Coller à partir d'un sous-répertoire les classes semblent arbitraires, combiner Coller & Contenu ? faites-le complètement OO, je ne sais pas pourquoi tant de statique
RÉÉCRIRE LES TODO 2013 :
rendre le contenu avec le chargeur de chaînes Moustache pour permettre le référencement des partiels et du contexte ajouter un raccourci pour masquer les pages comme le préfixe _ de soulignement dans le nom de fichier rendre l'exemple de site plus générique, ajouter un texte factice et un CSS illustratif pour la hiérarchie des menus rédiger une nouvelle description et un guide d'utilisation rapide avec des captures d'écran modèle unique (), le reste est partiel () déplacer le contenu statique dans Coller refactoriser la bibliothèque de pages Constructeur de page -- changez l'usine en Page::from_path() mettre à jour Page->is_current() et Page->is_parent consolider les éléments de navigation dans next() et prev(), supprimer les éléments inutilisés changer page->parents en quelque chose comme parent_paths simplifier find et find_all, etc. render menu() séparément pour supprimer les pages invisibles supprimer la section en faveur du parent
utiliser le chargeur de système de fichiers Moustache pour les partiels et le cache rendre la moustache du menu partiellement résursive pour une profondeur infinie -- corriger CSS syntaxe plus unique pour les variables de page/section modèles en cascade appropriés refaire le contrôle de section comme suggéré dans Page->factory ? Non renvoyer Coller à toutes les classes statiques Combiner le contenu dans la page Combiner contrôleur et contenu Combiner les classes de page et de modèle changer les modèles de moustache en .stache uniquement créez simplement un lien vers tumblr au lieu d'utiliser le pilote de blog Tumblr considérez uniquement le chargement de la structure à la demande (par exemple menu()), puis uniquement le chargement des variables de page un site basé sur des fichiers a-t-il vraiment besoin d'un cache de fichiers ? -- utilisez Memcache si quoi que ce soit. cache de référence ou pas de cache utilisez l'espace de noms, rendez le chargeur automatique PSR-0 compatible et emballez-le pour le compositeur Syntaxe Paste::route() pour les itinéraires définis par l'utilisateur noyau séparé et un exemple de site pour ce dépôt, déplacez les éléments de votre portefeuille personnel vers un dépôt séparé simplifier au maximum. trop de code pour ce que c'est censé être