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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 L0ssI200dcDRl_^I literal 0 HcmV?d00001 diff --git a/site/404.php b/site/404.php new file mode 100644 index 0000000..fb6d1bd --- /dev/null +++ b/site/404.php @@ -0,0 +1,8 @@ + + +

+

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.44.0