{"id":19220457,"url":"https://github.com/timgoll/simplecms","last_synced_at":"2025-07-06T00:33:15.253Z","repository":{"id":123885917,"uuid":"111296008","full_name":"TimGoll/simpleCMS","owner":"TimGoll","description":"A simple CMS running (nearly) completly clientside","archived":false,"fork":false,"pushed_at":"2018-06-03T11:25:40.000Z","size":14,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-23T09:23:26.974Z","etag":null,"topics":["javascript","library","webdev"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TimGoll.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-11-19T13:06:58.000Z","updated_at":"2022-02-16T11:12:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"6a4105e9-b9b8-46ff-83d9-c701cbedb6b3","html_url":"https://github.com/TimGoll/simpleCMS","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/TimGoll/simpleCMS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimGoll%2FsimpleCMS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimGoll%2FsimpleCMS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimGoll%2FsimpleCMS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimGoll%2FsimpleCMS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TimGoll","download_url":"https://codeload.github.com/TimGoll/simpleCMS/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TimGoll%2FsimpleCMS/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263832101,"owners_count":23517344,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["javascript","library","webdev"],"created_at":"2024-11-09T14:35:13.472Z","updated_at":"2025-07-06T00:33:15.218Z","avatar_url":"https://github.com/TimGoll.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# simpleCMS\n\nSimpleCMS ist eine Bibliothek zur einfachen Erstellung eines Content Management Systems, welches komplett Clientseitig verarbeitet wird. Dabei wird komplett auf Neuladen der Seite verzichtet und nur der Inhalt ausgetauscht. Vor- und Zurücknavigation in der Browsinghistorie wird aber weiterhin gewährleistet.\n\nEs Wird die Bibliothek [simpleAJAX](https://github.com/TimGoll/simpleAJAX) benötigt.\n\n## Einbinden\nNach dem Download der aktuellsten Version (es empfiehlt sich die min-Version zu laden), muss die Datei auf den eigenen Webserver gespeichert werden und anschließend im Header der HTML Datei eingebunden werden. Hierbei muss die Bibliothek vor allen Dateien, die auf diese zurückgreifen, eingebunden werden.\n\n```html\n\u003cscript type=\"text/javascript\" src=\"your/path/simpleAJAX.min.js\"\u003e\u003c/script\u003e\n\u003cscript type=\"text/javascript\" src=\"your/path/simpleCMS.min.js\"\u003e\u003c/script\u003e\n```\n\n## Setup\nBeim initialen Seitenladen muss einiges eingerichtet werden. Zuerst müssen die Templates eingerichtet werden, anschließend die Initfunktion ausgeführt werden. Im Nachhinein (während er Laufzeit) können auch weitere Templates registriert werden, jedoch sollte das entsprechende Template für die angesteuerte Website **vor** der `init()`-Funktion registriet werden.\n\n### registerTemplate\n```javascript\nsimpleCMS.registerTemplate : function(urlArgument, templateUrl, insertionElementId, {requiredUrl, insertIntoParentTemplate, hasTemplate, hasChild}, modifyCallback);\n// urlArgument              : String after the last '/' which is linked to this template\n// templateUrl              : path to the template\n// insertionElementId       : html element ID to insert the template into\n\n// requiredUrl              : path before the urlArgument, can be 'undefined'\n//                            if isset to '/home/' domain.com/contact will redirect to 'error404', because domain.com/home/contact is needed\n// insertIntoParentTemplate : defines if a template is inserted into a parent one or is a mastertemplates, default is false\n// hasTemplate              : defines if this argument has its own template or if it uses the parent one, default is true\n// hasChild                 : defines if this template is used with different data inside (like articles loaded by IDs), default is 0\n\n// modifyCallback           : a callback function, which is called after the loading of the template is finished, can be 'undefined'\n```\n\n### init\n```javascript\nsimpleCMS.init({homedir, errorPath});\n// homedir   : path to redirect to if just domain.com is entered (domain.com --\u003e domain.com/home)\n// errorPath : path to the error404.html template\n```\n\n### Beispiel\n\n```javascript\nwindow.onload = function() {\n    simpleCMS.registerTemplate('home', '/src/templates/home.html', 'content');\n    simpleCMS.registerTemplate('contact', '/src/templates/contact.html', 'subcontent', {requiredUrl: '/home/', insertIntoParentTemplate: true});\n    simpleCMS.init({homedir: 'home', errorPath: '/src/templates/error404.html'});\n};\n```\n\n### Beispiel mit Callback\nEs ist außerdem möglich eine Callbackfunktion zu registrieren, die **nach** dem Erfolgreichen Laden und Einbinden des Templates ausgeführt wird. Dies ist gedacht für Code, der nach dem Laden einmalig ausgeführt werden soll.\n\n#### Der data-Parameter\nDie Callbackfunktion bekommt beim Ausführen stets Daten mitgegeben:\n```\ndata = {\n    lastUrlParameter //the last parameter of the url as string\n    urlParameter //all parameters as string array\n    lastPage : {\n        urlParameter //the last parameter of the previous visited page as string\n        lastUrlParameter //all of the last parameters of the previous visited page as string arra\n    }\n}\n```\n\n```javascript\n// ...\nsimpleCMS.registerTemplate('webmail', '/src/templates/webmail.html', 'subcontent', {requiredUrl: '/home/contact/', insertIntoParentTemplate: true}, function(data) {\n    console.log(data);\n});\n// ...\n```\n\n### Beispiel mit hasChild\nHasChild wird auf einen Wert größer als 0 gesetzt, wenn man möchte, dass die folgenden URL-Argumente Variable sind, die beispielsweise den Inhalt der Seite definieren, ohne jedoch ein weiteres Template zu laden. Bei `hasChild: 1` und `domain.com/home/article/9` würde zum Beispiel das `article`-Template in das `home`-Template einbinden und anschließend Artikel Nummer 9 aus einer Datenbank auslesen. Für letzteres eignet sich der `modifyCallback`.\n\n```javascript\n// ...\nsimpleCMS.registerTemplate('article', '/src/templates/article.html', 'subcontent', {requiredUrl: '/home/', insertIntoParentTemplate: true, hasChild: 1}, function(data) {\n    //eg: request article from server\n    var formData = new FormData();\n    formData.append('article', data.lastUrlParameter);\n    simpleAJAX.request(formData, '/src/php/requestArticle.php', function(data) {\n        //process article\n    });\n});\n// ...\n```\nNach dem Laden und Einbinden aller Templates wird die Callback-Funktion ausgeführt. Um eine Anfrage an den Server zu stellen, erzeugen wir ein neues `FormData` Objekt und übergeben diese die ID. Die ID ist das letzte Element in der URL und ist daher mit `data.lastUrlParameter` abfragbar. Die Anfrage wird an ein PHP Skript auf unserem Server geschickt, welcher als Antwort den Artikel sendet. Dieser wird nun einfach per Javascript eingebunden.\n\n## Navigation\nKlassische Links mittels `\u003ca href=\"/home/contact\"\u003eContact\u003c/a\u003e` sind weiterhin möglich und werden abgefangen ohne die Seite neu zu laden. Außerdem kann die Seite geändert werden mittels Javascript. Dazu ist der Befehl `simpleCMS.setPage(url)` von nöten.\n\n## WebsiteContent\nPer Standard müssen sich alle Dateien im `/src/`-Ordner auf dem Webserver befinden, damit der Apache-Server die URL nicht umschreibt (URL-Rewriting ist hier nötig um Pfade wie `domain.com/home/contact` ohne `?` zu nutzen und ohne dass die Pfade tatsächlich existieren müssen).\n\nDies lässt sich in der `.htaccess`-Datei ändern.\n```htaccess\n1. #always redirect to basefile (index.html)\n2. RewriteEngine On\n3. RewriteBase /\n4. RewriteCond %{REQUEST_URI} !.*/src/.*\n5. RewriteRule ^(.*)$ index.html [L,QSA,NE]\n```\nInteressant ist hier Zeile `4`. Diese bringt das Skript zum Abbruch, wenn der angefragte Pfad mit `/src/` beginnt. Man kann auch meherere `RewriteCond` untereinander schreiben, um verschiedene ignorierte Pfade hinzuzufügen. Man beachte jedoch, dass dann all diese nicht mehr in den URLs vorkommen dürfen.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimgoll%2Fsimplecms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftimgoll%2Fsimplecms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftimgoll%2Fsimplecms/lists"}