summaryrefslogtreecommitdiff
path: root/html/app/routes/frontend.php
diff options
context:
space:
mode:
authorGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-03-12 07:16:23 +0200
committerGeorge Halkiadakis <gchalkiadakis@sklavenitis.co.gr>2023-03-12 07:16:23 +0200
commit7076343338ae3439f3c86f01144818abe8c31978 (patch)
tree794abb1e6b8f821091fd095341885496b6dad51d /html/app/routes/frontend.php
parent47cbb529f5723b246125ae083a193e11481b89ef (diff)
downloadclassroom-7076343338ae3439f3c86f01144818abe8c31978.tar.gz
classroom-7076343338ae3439f3c86f01144818abe8c31978.tar.bz2
classroom-7076343338ae3439f3c86f01144818abe8c31978.zip
add container helpers; constuct public directory-tree
Diffstat (limited to 'html/app/routes/frontend.php')
-rw-r--r--html/app/routes/frontend.php135
1 files changed, 135 insertions, 0 deletions
diff --git a/html/app/routes/frontend.php b/html/app/routes/frontend.php
new file mode 100644
index 0000000..1eea46c
--- /dev/null
+++ b/html/app/routes/frontend.php
@@ -0,0 +1,135 @@
+<?php
+
+use app\controllers\Resolve;
+use app\controllers\Product;
+
+
+// Home/Welcome
+// ---
+Route::add('/', function() { // echo 'Welcome!'; });
+ header('Location: /eidi-artozacharoplasteioy/psomi-artoskeyasmata', true, 302);
+});
+
+
+// Error Pages
+// ---
+Route::notFound( function() {
+ header("HTTP/1.0 404 Not Found");
+ render_view('error/404', ['message' => 'nobody knows it (but you got a secret smile;)']);
+}); // 404
+
+
+// Resolve friendly urls
+// ---
+Route::add('/([0-9a-zA-Z-_]*)',
+ function($a) { Resolve::url([$a]); }
+);
+Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)',
+ function($a, $b) { Resolve::url([$a, $b]); }
+);
+Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)',
+ function($a, $b, $c) { Resolve::url([$a, $b, $c]); }
+);
+
+
+// 4-th level paths belong to products
+// ---
+Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)',
+ function($a, $b, $c, $d) { Product::fromUrl($d, [$a, $b, $c]); }
+);
+
+
+/** URL-format Proposal:
+ * -----------------------------------------------------------------------------
+ *
+ * Page (almost-static content):
+ * /about/{url}
+# Route::add('/about/([0-9a-zA-Z-_\/]*)', function($url) { Page::fromUrl($url); });
+ *
+ * Product:
+ * /{level-1}/{level-2}/{level-3}/{friendly-url}-{id}
+# Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)-([0-9]*)',
+# function($category, $subcategory, $group, $label, $id) {
+# Product::fromID([$$category, $subcategory, $group, $label], $id);
+# }
+# );
+ *
+ * Category
+ * /{category}/[ {subcategory}[ /{group}]]
+Route::add('/([0-9a-zA-Z-_]*)', function($a) { Category::url([$a]); };
+Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)', function($a, $b) { Category::url([$a, $b]); });
+Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)', function($a, $b, $c) { Category::url([$a, $b, $c]); });
+ * -----------------------------------------------------------------------------
+ */
+
+
+/* EXAMPLES (use it for brainsrtorming)
+ * -----------------------------------------------------------------------------
+ *
+ // Typical Use
+ // ---
+ Route::add('/art', function() { Art::blah(); });
+ Route::add('/art/db', function() { Art::fromDatabase(); });
+ Route::add('/art/([0-9]*)', function($id) { Art::getInfo($id); });
+
+
+ // Get-Post route example
+ // ---
+ Route::add('/contact-form', function() {
+ echo '<form method="post"><input type="text" name="test" /><input type="submit" value="send" /></form>';
+ }, 'get');
+
+ Route::add('/contact-form', function() {
+ echo 'Hey! The form has been sent:<br/>'; print_r($_POST);
+ }, 'post');
+
+
+ // Accept number as parameter
+ // ---
+ Route::add('/foo/([0-9]*)/bar', function($var1) {
+ // echo $var1.' is a number!';
+ echo "{$var1} is a number!";
+ });
+
+
+ // About pages
+ // ---
+ Route::add('/about/([0-9a-zA-Z-_]*)', function($page) {
+ InfoPage::render('about/'.page);
+ });
+
+
+ // handle a request like: /foo/123/bar/3254-lefki-zaxari-marata-1kg
+ // where first-numeric-part of last-uri-section (3254) is the product number
+ // ---
+ Route::add('/foo/([0-9]*)/bar/([0-9]*)-([0-9a-zA-Z-_]*)', function($num, $id, $name) {
+ echo $num .' is some nomber, id = '. $id .' and label = '. $name;
+ });
+
+
+ // handle a request like: /zaxares-glykantika/lefki-zaxari-year-2022-45678
+ // where last-numeric-part of last-uri-section (45678) is the product number
+ // ---
+ Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)-([0-9]*)',
+ function($category, $subcategory, $group, $label, $id) {
+ Shop::product([$$category, $subcategory, $group, $label], $id);
+ });
+
+
+ // last chance to resolve (some friendly url)
+ // ---
+ Route::add('/([0-9a-zA-Z-_]*)', function($a) { Resolve::uri([$a]); });
+ Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)', function($a, $b) { Resolve::uri([$a, $b]); });
+ Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)', function($a, $b, $c) { Resolve::uri([$a, $b, $c]); });
+
+
+ // Product page
+ // handle a request like: /pantopoleio/zaxares/lefki-zaxari/lefki-zaxari-year-2022-45678
+ // where last-numeric-part of last-uri-section (45678) is the product number
+ // ---
+ Route::add('/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)/([0-9a-zA-Z-_]*)-([0-9]*)',
+ function($category, $subcategory, $group, $label, $id) {
+ Shop::product([$$category, $subcategory, $group, $label], $id);
+ });
+* ------------------------------------------------------------------------------
+*/