From 3e641f63d7206b50c3eebecc53023117b7185dac Mon Sep 17 00:00:00 2001 From: Benjamin Auder Date: Thu, 5 Feb 2015 16:16:00 +0100 Subject: [PATCH] first commit after cleaning --- .htaccess | 13 +++++ HOWTO.md | 112 ++++++++++++++++++++++++++++++++++++++++++ LICENSE | 19 +++++++ README.md | 17 +++++++ a/.gitkeep | 0 common.php | 3 ++ defaults.php | 9 ++++ f/.gitkeep | 0 index.php | 30 +++++++++++ s.php | 57 +++++++++++++++++++++ sample-website.tar.xz | Bin 0 -> 32080 bytes site/404.php | 8 +++ site/dl.php | 20 ++++++++ site/home.php | 7 +++ 14 files changed, 295 insertions(+) create mode 100644 .htaccess create mode 100644 HOWTO.md create mode 100644 LICENSE create mode 100644 README.md create mode 100644 a/.gitkeep create mode 100644 common.php create mode 100644 defaults.php create mode 100644 f/.gitkeep create mode 100644 index.php create mode 100644 s.php create mode 100644 sample-website.tar.xz create mode 100644 site/404.php create mode 100644 site/dl.php create mode 100644 site/home.php diff --git a/.htaccess b/.htaccess new file mode 100644 index 0000000..6c33b67 --- /dev/null +++ b/.htaccess @@ -0,0 +1,13 @@ + + RewriteEngine on + + # indicate the path of your website relatively to the web root + RewriteBase / + + # the two following conditions say "if the requested resource exist, just serve it" + RewriteCond %{REQUEST_FILENAME} !-f + RewriteCond %{REQUEST_FILENAME} !-d + + # redirect anything else to index.php (which will analyze the URI) + RewriteRule . index.php + diff --git a/HOWTO.md b/HOWTO.md new file mode 100644 index 0000000..88fe191 --- /dev/null +++ b/HOWTO.md @@ -0,0 +1,112 @@ +## 0. Installation + +In the following, I assume your website is located under http\[s\]://domain/topic/ +and is named "website" (adapt to your case). For example, in https://github.com/blog/ +domain = github.com and topic = blog. + +Get the source code either with `git clone` command or using a zip archive. +Copy all folder contents in the website/ folder : +
website/
+    a/
+    f/
+    site/
+    .htaccess
+    common.php
+    defaults.php
+    index.php
+    s.php
+
+- **a/** (for "assets") is the folder for CSS files, images and javascript codes. +I like to put them respectively in css/, img/ and js/ folders, but the choice is yours. +- **f/** (for "files") is the folder for any downloadable (or browsable) file you may upload. +- **site/** is the main folder containing all your website pages. Three are already there : + - **404.php** : the 404 error page; + - **dl.php** : a script to download binary files; + - **home.php** : the specifications for the welcome page. +- **.htaccess** : its main job consists in routing everything that is not a resource +to the index.php file. +- **common.php** contains shared variables and functions to be used by at least two different pages. +- **defaults.php** defines default variables for any web page, like the title or javascripts block. +- **index.php** contains your website template, which is rendered for any web page +(and filled with specific values defined in pages under site/ folder; anything can be customized). +- **s.php** consists in the framework code, loaded at the beginning of index.php. + +Now (online), in the .htaccess file, change the line `RewriteBase /` to `RewriteBase /topic`. + +## 1. Set default contents + +Edit the file defaults.php with +- A global title to your website; this title can later be mixed with a more specific +page-based title, or be replaced. +- A list of references to CSS style sheets and pre-rendering javascript, like +``. +We will see later how to refer to local style sheets (under a/css). +- Some javascript code which will be loaded by default after every page loads +(e.g. [jquery](http://jquery.com/)). + +Each variable name is prepended with "b\_" to avoid potential conflicts with your own variables. + +## 2. Complete main pages + +### index.php + +Complete +- The menu (at commented location) +- The banner (near the menu, if you want one) +- The footer (if you don't want one, just drop it). + +You can also change the \ tags if needed. + +### site/home.php + +The welcome page. You can choose a title ($s\_title) or use the default one +(by not specifying anything). Style sheets and javascripts can be customized, ...etc. +Any default variable can be used to define a specific variable (prepended with "s\_"). + +### site/404.php + +Customize it; it is probably viewed more often than you think ;-) + +## 3. Write all other pages + +All pages are under site/ folder, and you can nest them in any directory tree. + +**Hint** : if you don't want to load the main template, just end any site file +with a PHP `exit` directive. + +Now we will see how to access pages and resources (images, CSS, files, javascript). + +

 

+-------------------------------------------------- + +## How to view a web page ? + +The page at physical location site/some\_folder/mypage.php is viewed in the web browser at the URL +http\[s\]://domain/topic/website/some\_folder/mypage (thanks to URL rewriting defined in +the .htaccess file). + +Any page can be linked internally using the `r()` PHP function ('r' for "resource"), like in +the following : `'`. This function determines +the nesting level and output the appropriate path. + +## How to access... + +*A CSS style sheet* : its path is given by the following PHP function call +`r('a/css/name_of_the_file.css')` from within any site file (assuming you place all CSS files +under a/css/. They may be inside a nested folder structure). + +*An image* : same as above, with `r('a/img/name_of_the_image.xxx')`. + +*A javascript file* : same as above, with `r('a/js/name_of_the_file.js')`. + +## How to give a download link ? + +Just use a regular link pointing to `r('dl/?f=name_of_the_file.xxx')`, anywhere you want. + +

 

+-------------------------------------------------- + +## Usual workflow + +Just add pages under site/ folder, and potential resources and files under a/ and f/. +All other files will not change a lot. diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..73c5672 --- /dev/null +++ b/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2014 Benjamin Auder + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..48ab862 --- /dev/null +++ b/README.md @@ -0,0 +1,17 @@ +# sview : tiny PHP web framework. + +It is inspired by [a similar framework](http://shortphp.com) written by Arnór Heiðar Sigurðsson. +In the same spirit but more advanced and more complete, see also [nanoc](http://nanoc.ws/) - in Ruby. + +sview is designed to organize essentially static websites. +It does not offer the features you would expect from a complete MVC framework - +actually, it has only the "V" part. +If you want a more demanding dynamic website, consider using an appropriate tool, +[Symfony](http://symfony.com/) for example. + +## How to use it ? + +The documentation is [right +here](http://git.redua.net/?p=sview.git;a=blob;f=HOWTO.md;hb=HEAD), +and a full website example is [located +here](http://git.redua.net/?p=sview.git;a=blob;f=sample-website.tar.xz;hb=HEAD). diff --git a/a/.gitkeep b/a/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/common.php b/common.php new file mode 100644 index 0000000..c257ed3 --- /dev/null +++ b/common.php @@ -0,0 +1,3 @@ + + + + + + + + <?php echo isset($s_title)?$s_title:$b_title; ?> + + + + + + + + + + +
+ + +
+ + + + + + + + diff --git a/s.php b/s.php new file mode 100644 index 0000000..f0ca57d --- /dev/null +++ b/s.php @@ -0,0 +1,57 @@ +0?$location:'home').'.php'; + +//Include default values for title, headers, javascripts... +include 'defaults.php'; + +//Include common PHP code (functions and constants) +include 'common.php'; + +//Finally, include the PHP file +include (file_exists($phpfile) ? $phpfile : 'site/404.php'); + +//regular template: flush output into $content variable +$content = ob_get_contents(); +ob_end_clean(); diff --git a/sample-website.tar.xz b/sample-website.tar.xz new file mode 100644 index 0000000000000000000000000000000000000000..5a91c8268461ec5a597cc6fda12f71f360d8131c GIT binary patch literal 32080 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 h%H<9EvhfUzt9~&yY~Tzya%}I$Bk8}HK$0wxQ2 + +
+

The requested page does not exist

+
diff --git a/site/dl.php b/site/dl.php new file mode 100644 index 0000000..441b1c3 --- /dev/null +++ b/site/dl.php @@ -0,0 +1,20 @@ + + +
+

Some content

+
-- 2.53.0