{"id":18742664,"url":"https://github.com/symphonycms/docs_getsymphony","last_synced_at":"2026-02-04T17:32:36.718Z","repository":{"id":66510355,"uuid":"8769164","full_name":"symphonycms/docs_getsymphony","owner":"symphonycms","description":"Symphony Documentation Site","archived":false,"fork":false,"pushed_at":"2015-01-22T03:52:08.000Z","size":136,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":16,"default_branch":"master","last_synced_at":"2025-07-01T22:03:00.275Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"XML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/symphonycms.png","metadata":{"files":{"readme":"README.markdown","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-03-14T05:59:20.000Z","updated_at":"2016-03-24T23:53:24.000Z","dependencies_parsed_at":"2023-02-20T13:45:46.753Z","dependency_job_id":null,"html_url":"https://github.com/symphonycms/docs_getsymphony","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/symphonycms/docs_getsymphony","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symphonycms%2Fdocs_getsymphony","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symphonycms%2Fdocs_getsymphony/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symphonycms%2Fdocs_getsymphony/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symphonycms%2Fdocs_getsymphony/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/symphonycms","download_url":"https://codeload.github.com/symphonycms/docs_getsymphony/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/symphonycms%2Fdocs_getsymphony/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29091854,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-04T03:31:03.593Z","status":"ssl_error","status_checked_at":"2026-02-04T03:29:50.742Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":[],"created_at":"2024-11-07T16:08:56.356Z","updated_at":"2026-02-04T17:32:36.703Z","avatar_url":"https://github.com/symphonycms.png","language":"XML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wadoo\n\nAn XML/XSLT static site generator written in PHP.\n\n\n## Introduction\n\nThe ultimate goal of Wadoo is to create a folder full of static files that you can deploy anywhere. \nThese are the steps involved in generating a website:\n\n1. Create a `data.xml` file that will be used as the source document for **all** the transformations.\n2. Create a `sitemap.xml` file that defines all the files that have to be generated and the different \nstylesheets you want to use for the transformations.\n3. Compile any (or all) the resources present in the sitemap and enjoy the new website.\n\nThat's Wadoo from a really high level perspective. It is not blog-aware (though it can certainly power a blog) \nnor does it enforce any kind of URL structure. Just do what you want with it.\n\n\n## Installation\n\nWadoo requires PHP 5.3 and [composer](http://getcomposer.org/) for managing external dependencies.\n\nThere's very little to do to start using Wadoo. Just run `composer install` inside the root folder and you're \ngood to go. There's a `sample.htaccess` (that should be renamed to `.htaccess` —\nsee [Compilation tips and tricks](#compilation-tips)) inside `public/` where you have \nto change `RewriteBase` according to your installation path.\n\n\n## Usage\n\nUnlike most static site generators out there, Wadoo doesn't have a CLI tool to interact with, nor does it provide a \ndevelopment server that automatically compiles your stuff as soon as you save a file.\n\nWadoo requires a webserver to run but this doesn't mean you'll find cool looking buttons to click :)\n\nYou can invoke different actions through the `?action` GET parameter. For example, to compile the file `about.html` you'll call:\n\n    index.php?action=compile\u0026uri=about.html\n\nThat will (re)compile the file `about.html`. Of course the `index.php` part can be skipped. Take a look at \nthe [Compilation tips and tricks](#compilation-tips) section for a simplified compilation workflow.\n\n**NOTE**\nAppending `\u0026echo` to (almost) any action will cause Wadoo to print on the screen the result of the transformation \nrather than write it to disk. This is extremely useful for testing when you don't want to constantly update the file\nbut just want to see what is going on in your browser.\n\nFollowing are explanations of all the available actions.\n\n\n### Merge data\n\n    ?action=merge-data\n\nAll your data is stored inside `data.xml`. Depending on the project, this file can become quite large and a pain \nto update. That's why it can be generated automatically.\n\nYou can create a `data` folder and put all your stuff into it. There's no file naming convention to follow and \nyou can go as deep as you wish with your folders. All the files found will be merged into a single, big file.\n\nGiven a folder structure like the following:\n\n    data/\n    -- portfolio/\n    -- -- design.xml\n    -- -- development.xml\n    -- -- content-management.xml\n    -- pages/\n    -- -- about.xml\n    -- -- home.xml\n    -- blog/\n    -- -- 2012/\n    -- -- -- this-blog-has-moved.xml\n    -- -- -- first-post.xml\n\nWadoo will generate something like this:\n\n    \u003c?xml version=\"1.0\"?\u003e\n    \u003cdata\u003e\n      \u003cfolder path=\"portfolio\"\u003e\n        \u003cfile filename=\"design.xml\"\u003e\n          [design.xml content]\n        \u003c/file\u003e\n        \u003cfile filename=\"development.xml\"\u003e\n          ...\n        \u003c/file\u003e\n        \u003cfile filename=\"content-management.xml\"\u003e\n          ...\n        \u003c/file\u003e\n      \u003c/folder\u003e\n      \u003cfolder path=\"pages\"\u003e\n        \u003cfile filename=\"about.xml\"\u003e\n          ...\n        \u003c/file\u003e\n        \u003cfile filename=\"home.xml\"\u003e\n          ...\n        \u003c/file\u003e\n      \u003c/folder\u003e\n      \u003cfolder path=\"blog\"\u003e\n        \u003cfolder path=\"blog/2012\"\u003e\n        \u003cfile filename=\"this-blog-has-moved.xml\"\u003e\n          ...\n        \u003c/file\u003e\n        \u003cfile filename=\"first-post.xml\"\u003e\n          ...\n        \u003c/file\u003e\n        \u003c/folder\u003e\n      \u003c/folder\u003e\n    \u003c/data\u003e\n\nRemember that the folder structure you use in the `data` directory has nothing to do with the final URL structure,\nwhich is instead defined in the sitemap.\n\n### Sitemap\n\n    ?action=sitemap\u0026template=sitemap.xsl\n\nAs for the data, you can write your sitemap by hand or have Wadoo generate it. Essentially, a sitemap has this structure:\n\n    \u003csitemap\u003e\n      \u003cresource uri=\"index.html\" template=\"templates/index.xsl\"/\u003e\n      \u003cresource uri=\"blog/index.html\" template=\"templates/list.xsl\"/\u003e\n      \u003cresource uri=\"blog/2012/bikes/index.html\" template=\"templates/entry.xsl\" handle=\"bikes\"/\u003e\n      \u003cresource uri=\"blog/2012/wing/index.html\" template=\"templates/entry.xsl\" handle=\"wing\"/\u003e\n      \u003cresource uri=\"blog/2012/bridge/index.html\" template=\"templates/entry.xsl\" handle=\"bridge\"/\u003e\n      \u003cresource uri=\"blog/2012/road/index.html\" template=\"templates/entry.xsl\" handle=\"road\"/\u003e\n    \u003c/sitemap\u003e\n\nEvery `resource` node maps to a file that will be compiled. The `@uri` attribute specifies the generated file \nname while `@template` is the stylesheet to be used during that specific transformation.\nAny additional attribute will be provided as a parameter during the tranformation so that it can be easily \naccessed through `$param` syntax.\n\nIf you have dynamic content, you clearly want to automate the sitemap generation, otherwise everytime you add i.e. \na blog post you'd have to open the `sitemap.xml` file and append the correct resource for that specific post.\n\nWhen calling this action you have to provide an additional parameter `template` which will \nbe the stylesheet used to generate the sitemap.\n\n\n### Compile\n\n    ?action=compile\u0026uri=uri\n\nThis is the core of Wadoo. While you can (sort of) live without the other two actions, this one is \nrequired to compile the website. By default, the website will be compiled inside the `public` folder.\n\nIf the `uri` parameter isn't provided, Wadoo will compile the whole website (every resource \npresent in `sitemap.xml`). Specifying the resource will make Wadoo compile \njust that single file. That's all there is to it, really.\n\n\n### Executing more than one action at once\n\n    ?action=merge-and-compile  (merge-data + compile)\n    ?action=full-compile       (merge-data + sitemap + compile)\n\nIt can be useful at times to invoke more than one action with a single call. Let's say you're editing \na post and you're checking how it is rendering on screen. If you change the content of the post you'd \nneed to first re-merge `data.xml` and then compile the associated \nresource. You can do this all at once using `merge-and-compile`.\n\nNow say the post you're editing has a `title/@handle` that you're using in your sitemap as the resource URI. \nIf you don't recompile the sitemap you won't be able to see the updated post – that's when a `full-compile` can be handy.\n\n\n### \u003ca name=\"compilation-tips\"\u003e\u003c/a\u003e Compilation tips and tricks\n\nIt's fine to use `\u0026echo` while compiling during development because it lets you quickly see what you're doing. \nThe problem is: all your generated HTML will contains links like `pages/works.html` but you can't follow them because \nwhat you're after is something along the lines of `?action=compile\u0026uri=pages/works.html\u0026echo` (any reference to \nassets files will be broken too, as soon as you add folders to the mix).\n\nTo overcome this limitation, there's a smart `.htaccess` file inside the `public` folder that will let you browse \nthe website with `\u0026echo` always enabled and the definitive links. Just make sure you're browsing the website from the\npublic folder (`http://localhost/path/to/wadoo/public`) or it won't work.\n\nAs a last note, I prefer using absolute links over relative links, especially with complex URL structures. \nWadoo provides a `$root` parameter that is the base URL upon which you can build all your links.\nGiven that transformation parameters can be defined in the URL and they will take precedence over \ndefault parameters, when you're ready to compile for production, you can simply override the `$root` \nparameter like this: `?action=compile\u0026root=http://www.production.mywebsite.com`.\n\nThis trick works for any parameter. GET will always take precedence.\n\n\n### Filters\n\nFilters extend Wadoo functionalities. By default, it comes with two filters.\n\n- **HTML5 doctype**  \nWorks pretty much the same as the [Symphony extension](https://github.com/domain7/html5_doctype/) \nit is based upon.\n\n- **Markdown**  \nTurn markdown into html. It can either process specific nodes in your xml documents (just add a \n`@markdown-process` attribute to target those elements) or files with markdown text only, which should just \nhave a valid extension (the most common are supported, i.e. `.markdown`, `md` and so on).\n\n\n### Note to Symphony CMS users\n\nA few words to those enlightened people using Symphony CMS.\nI like to think of Wadoo as the Symphony of static site generators. It provides very little by default \nbut yet, it is so powerful and so enjoyable to work with that you'll fall in love with it very shortly.\n\nOf course it can't (and doesn't aim to) be a replacement for a CMS, but I found it especially useful in \nthe early stages of a project when you just need a tool to put together a prototype or the final template \nthat will be then integrated into the CMS.\n\nYou can think of the Wadoo sitemap as a list of Symphony pages where the `uri` is the page URL and the \ntemplate is, well, the page template. It may also help to think of `data.xml` as a single big static XML \ndatasource that is attached to every page, and is the only datasource available. There's no concept of utility, \nbut of course they all work out of the box being just XSLT templates.\n\nIt shouldn't be too hard to build small/medium websites with Wadoo. Just choose the right tool for the right job ;)\n\n## Sample Code\n\n### A Blog Sample\n\nTo help you get started, there are example files for a blog in the \n[`blog-sample` branch](https://github.com/alpacaaa/wadoo/tree/blog-sample) of this repository. It includes a `data` directory, \nwith XML data for an \"About\" page and two blog posts. This data is already compiled into a `data.xml` file. \nThe `sitemap.xml` file lists the resources and it's generated with the template found in `templates/sitemap.xsl`. \nThe `templates` directory contains the XSL files needed to transform the `data.xml` and the `sitemap.xml` files into a compiled site.\n\n### Pears\n\nDan Cedarholm's [Pears](http://pea.rs) site has been ported to Wadoo so you can maintain your own **interface pattern pairings** \nof CSS \u0026 HTML. Grab the code from the [`pears` branch](https://github.com/bauhouse/wadoo/tree/pears) of this fork of the Wadoo repository.\n\nIncluded in this sample code is a [`sitemap.xsl`](https://github.com/bauhouse/wadoo/blob/pears/sitemap.xsl) file that demonstrates \nhow a `sitemap.xml` file can be automatically created from the `data.xml` file generated by Wadoo. It will recursively navigate \nthe `folder` and `file` nodes of the `data.xml` file to generate the sitemap.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsymphonycms%2Fdocs_getsymphony","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsymphonycms%2Fdocs_getsymphony","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsymphonycms%2Fdocs_getsymphony/lists"}