# Ikiwiki for regular websites [[Ikiwiki]] can be used to administrate regular websites. ## Introduction Websites built with ikiwiki is more complex than plain static websites, but simpler than most web-based content management systems (CMS). One of the benefits over using static webpages is that text content can be edited independent of the webdesign. This means, that... * The editor (e.g. owner of the website or a secretary) need not bother the web designer with text-only changes. * The editor can start adding text content even before the visual design is finalized. One of the benefits compared to using most other CMS or wiki engines is that most pages are served as static html. ## Roles Wiki sites classically is public. Anyone can both read the site and edit its pages. A regular website is meant to only be edited by som website administrator. Ikiwiki offers the possibility to separate different administration tasks. You need not be a webdesigner to edit text content, and you need not be limited by the user-friendly text editing interface as a web designer. [[graph height=8 width=8 src=""" { /* roles */ reader [shape=house, label="Reader"] editor [shape=house, label="Editor"] designer [shape=house, label="Designer"] {rank=same; reader editor designer} /* targets */ webpages_static [label="website"] webpages_wiki [label="admin website"] {rank=same; webpages_static webpages_wiki} /* input data */ txt [shape=plaintext, label="text"] media [shape=plaintext, label="graphics"] tmpl [shape=plaintext, label="templates"] {rank=same; txt tmpl media} iki_engine [shape=box, label="web engine"] /* paths */ reader -> webpages_static [dir=back] editor -> txt -> iki_engine -> webpages_wiki designer -> media -> iki_engine designer -> tmpl -> iki_engine iki_engine -> webpages_static } """]] ## Reader The reader gets served a static website: [[graph height=8 width=8 src=""" { reader [shape=house, label="Reader"] webpages_static [label="static pages"] reader -> webpages_static } """]] The website can have a search routine added. The reader then interacts both with static pages and with a search engine, dynamically generating search result pages: [[graph height=8 width=8 src=""" { reader [shape=house, label="Reader"] /* targets */ webpages_static [label="static pages"] webpages_searchresult [label="search results", style=dotted] {rank=same; webpages_static webpages_searchresult} search_query [shape=plaintext, label="search query"] search_db [shape=box, label="search index"] /* paths */ reader -> webpages_static reader -> search_query -> search_db -> webpages_searchresult } """]] ## Editor In addition to the main website, an additional website is generated, with the main feature of Ikiwiki - [[wiki]]-like text editing - enabled: [[graph height=8 width=8 src=""" { editor [shape=house, label="Editor"] webpages_wiki [label="wiki pages"] content_form [shape=plaintext, label="edit form"] /* stored data */ txt_stored [shape=box, label="text content"] media_stored [shape=box, label="graphics files"] tmpl_stored [shape=box, label="html templates"] {rank=same; txt_stored media_stored tmpl_stored} /* paths */ editor -> webpages_wiki editor -> content_form -> txt_stored -> webpages_wiki media_stored -> webpages_wiki tmpl_stored -> webpages_wiki } """]] Whenever the wiki pages are edited, the static pages are also rebuilt: [[graph height=8 width=8 src=""" { /* roles */ editor [shape=house, label="Editor"] /* targets */ webpages_static [label="static pages"] webpages_wiki [label="wiki pages"] {rank=same; webpages_static webpages_wiki} /* input data */ content_form [shape=plaintext, label="edit form"] /* stored data */ txt_stored [shape=box, label="text content"] media_stored [shape=box, label="graphics files"] tmpl_stored [shape=box, label="html templates"] {rank=same; txt_stored media_stored tmpl_stored} iki_engine [shape=box, label="html renderer (ikiwiki)"] /* paths */ editor -> content_form -> txt_stored -> iki_engine -> webpages_wiki media_stored -> iki_engine tmpl_stored -> iki_engine iki_engine -> webpages_static } """]] ## All Here's a graph of the interaction between the various parts of ikiwiki itself and different kinds of users: [[graph height=8 width=8 src=""" { // rankdir=LR // rotate=90 center=1 /* roles */ reader [shape=house, label="Reader"] editor [shape=house, label="Editor"] designer [shape=house, label="Designer"] {rank=same; reader editor designer} /* targets */ webpages [label="static pages"] webpages_wiki [label="wiki pages"] webpages_searchresult [label="search results", style=dotted] {rank=same; webpages webpages_wiki webpages_searchresult} /* input data */ search_query [shape=plaintext, label="search query"] txt_editor [shape=plaintext, label="Markdown text"] txt_designer [shape=plaintext, label="Markdown text"] media [shape=plaintext, label="graphics files"] tmpl [shape=plaintext, label="html templates"] // {rank=same; search_query txt_editor txt_designer tmpl media} /* user tool */ browser_reader [label="web browser"] browser_editor [label="web browser"] browser_designer [label="web browser"] vcs_txt_local [shape=egg, label="Git repository"] vcs_tmpl_local [shape=egg, label="Git repository"] fs_local [shape=egg, label="filesystem"] /* user interface */ txt_form [shape=box, label="web text editor (ikiwiki)"] search_form [shape=box, label="search form (ikiwiki)"] {rank=same; search_form txt_form} /* storage types */ search_db [shape=egg, label="search index (Hyper Estraier)"] vcs_txt [shape=egg, label="VCS repository (Git)"] vcs_tmpl [shape=egg, label="VCS repository (Git)"] fs [shape=egg, label="filesystem"] // {rank=same; search_db vcs_txt vcs_tmpl fs} /* stored data */ txt_stored [shape=plaintext, label="version-controlled Markdown text"] media_stored [shape=plaintext, label="graphics files"] tmpl_stored [shape=plaintext, label="version-controlled html templates"] // {rank=same; txt_stored media_stored tmpl_stored} /* engines */ iki_engine [shape=box, label="html renderer (Ikiwiki)"] search_engine [shape=box, label="search engine (Hyper Estraier)"] {rank=same; iki_engine search_engine} /* groupings */ subgraph cluster_clitools { label="commandline editing" style=dashed txt_designer tmpl media vcs_tmpl_local vcs_txt_local fs_local } subgraph cluster_webtools { label="web editing" style=dashed txt_editor search_query { rank=same browser_reader browser_editor browser_designer } } subgraph cluster_storage { label="server storage" style=dashed vcs_tmpl vcs_txt fs search_db txt_stored tmpl_stored media_stored } /* paths */ reader -> search_query -> browser_reader -> search_form -> search_engine -> webpages_searchresult search_db -> search_engine search_db -> iki_engine [dir=back] editor -> txt_editor -> browser_editor -> txt_form -> vcs_txt -> txt_stored -> iki_engine -> webpages iki_engine -> webpages_wiki designer -> txt_designer -> browser_designer -> txt_form txt_designer -> vcs_txt_local vcs_txt_local -> vcs_txt [dir=both] designer -> tmpl -> vcs_tmpl_local vcs_tmpl_local -> vcs_tmpl [dir=both] vcs_tmpl -> tmpl_stored -> iki_engine designer -> media -> fs_local fs_local -> fs [dir=both] fs -> media_stored -> iki_engine } """]] ---- See also the simpler graphs focusing on [[roles|ikiroles]] and on the [[design|ikidesign]].