{"id":31923661,"url":"https://github.com/fletcher/multimarkdown-cms","last_synced_at":"2025-10-13T23:56:16.822Z","repository":{"id":797200,"uuid":"496734","full_name":"fletcher/MultiMarkdown-CMS","owner":"fletcher","description":"Package to assist with publishing a web site using MMD and a few perl scripts","archived":false,"fork":false,"pushed_at":"2018-02-22T20:09:11.000Z","size":267,"stargazers_count":94,"open_issues_count":0,"forks_count":17,"subscribers_count":8,"default_branch":"master","last_synced_at":"2023-04-18T19:50:40.757Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"http://fletcherpenney.net/multimarkdown/cms/","language":"Perl","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/fletcher.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}},"created_at":"2010-01-31T23:54:35.000Z","updated_at":"2023-04-18T19:50:40.757Z","dependencies_parsed_at":"2022-08-16T10:55:17.775Z","dependency_job_id":null,"html_url":"https://github.com/fletcher/MultiMarkdown-CMS","commit_stats":null,"previous_names":[],"tags_count":6,"template":null,"template_full_name":null,"purl":"pkg:github/fletcher/MultiMarkdown-CMS","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fletcher%2FMultiMarkdown-CMS","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fletcher%2FMultiMarkdown-CMS/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fletcher%2FMultiMarkdown-CMS/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fletcher%2FMultiMarkdown-CMS/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/fletcher","download_url":"https://codeload.github.com/fletcher/MultiMarkdown-CMS/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/fletcher%2FMultiMarkdown-CMS/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279017193,"owners_count":26086017,"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","status":"online","status_checked_at":"2025-10-13T02:00:06.723Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":"2025-10-13T23:55:41.467Z","updated_at":"2025-10-13T23:56:16.809Z","avatar_url":"https://github.com/fletcher.png","language":"Perl","funding_links":[],"categories":[],"sub_categories":[],"readme":"Title:\tMultiMarkdown-CMS  \nAuthor:\tFletcher T. Penney  \nDate:\tJanuary 31, 2010  \nTags:\tMultiMarkdown, web, server  \n\n# Introduction #\n\n***NOTE**: MultiMarkdown CMS is now updated to work with MMD 3.0. If you need\na version that is compatible with MMD 2.0, you can choose an older version\nfrom the [downloads] page. MMD 3.0 must be installed separately.*\n\n*Also, please note that MMD-CMS has been modified to output HTML that should be compatible with HTML5, in ancticipation of these changes being made in MMD as well.*\n\n[downloads]: https://github.com/fletcher/MultiMarkdown-CMS/downloads\n\nMultiMarkdown CMS  is basically a collection  of utilities that allows  you to\nrun a web site without any other  software. I have tried a variety of packages\nwhen hosting my own web site. In the end, however, I was basically using those\nprograms  to put  a wrapper  around my  content, which  was always  managed by\nMultiMarkdown.  Additionally,  none  of  those programs  really  fit  into  my\nworkflow, and the performance was often not what I would like.\n\nSo, instead, I decided  to run my web site with a  minimal amount of software.\nIn fact,  it could be run  with MultiMarkdown alone,  but I would miss  out on\nsome of the interactive features.\n\nThe basic premise is:\n\n* Create a plain text file (in MMD syntax) for each page of the site\n\n* use `mmd2web.pl`  to convert  to HTML,  including some  markup to  format \n  the pages for the web site\n\n* upload the HTML file (and optionally the txt file) to your web server, and\n  you're off\n\nThe newly  formatted HTML file  includes SSI code  that causes Apache  to add\ncertain templates to  the page. This allows you to  standardize the appearance\nof each page (e.g. headers, footers, sidebar, etc).\n\nAdditionally, CGI scripts  are included to manage archives,  Atom feeds, tags,\nsearching, OpenID authentication, comments, and more.\n\nWhen  building the  system, I  started off  with a  collection of  essentially\nstatic web  pages. I  then added cgi  scripts only where  I thought  they were\nabsolutely necessary  to give my site  the interactive features I  desired. If\nyou're someone who likes lots of widgets and gadgets on their site --- I won't\nbe programming  them. However,  because of the  simple philosophy  behind this\napproach, the pages should be compatible  with just about anything you want to\nadd that doesn't require a backend database.\n\nHowever,  keep in  mind that  my  goal is  simplicity.  I don't  want lots  of\nplugins, extensions, modules, etc. I don't  want lots of different themes that\nI can choose from. If you want these things, then another package might be for\nyou. But if  you want a simple method  of creating a web site  that focuses on\ncontent, this may be for you.\n\nThis package  certainly requires more  tinkering than a prebuilt  solution. If\nyou're not  familiar with .htaccess  files, configuring apache,  changing file\npermissions, and examining error logs then you might run into some roadblocks.\nHowever, that could also be considered an opportunity to track down solutions!\n\n\n# Where do I get it? #\n\n\nYou can download the package:\n\n\u003chttp://github.com/fletcher/MultiMarkdown-CMS\u003e\n\nYou can also use git to clone the source:\n\n\tgit clone git://github.com/fletcher/MultiMarkdown-CMS.git\n\nIf you know  how to use git,  I recommend that approach for  reasons that will\nbecome clear later.\n\n\n# How do I install it? #\n\nOnce you download and unpack the  software, place the directory where your web\nserver software expects it, and rename it as desired.\n\n*Please note: if you have trouble installing  the software, do a web search to\nfigure out what to do. I'm happy to help troubleshoot my software, but I don't\nwant to get into trying to troubleshoot everyone's web server setup....*\n\n\nFor example, I place mine in `/Users/fletcher/Sites/mmd-static`.\n\n\nYou should now be able to go to something like:\n\n\thttp://127.0.0.1/~fletcher/mmd_static/index.html\n\nAnd see *something* --- it will likely give you some error messages, however.\n\n\n# How to configure Apache #\n\nMultiMarkdown CMS is fairly easy to install with Apache. You are only required\nto modify your Apache configuration files so that:\n\n\tAllowOverride none\n\nbecomes\n\n\tAllowOverride All\n\nOn a mac, for example, you would modify `/etc/apache2/users/username.conf`.\n\n\nThere are two versions of the software --- the regular, and the advanced.\n\nThe regular version  of the software is  designed to be easier  to install. It\ncan go in  any folder/URL in your web  host (i.e. it does *not* have  to be at\nthe root). You  do have to configure  the .htaccess file so  that the software\nknows where it  is located so that  links are coded properly.  When using this\nversion, when you want  to link to your home page, for  example you would link\nto \"index.html\", **NOT** \"/index.html\".\n\nThis flexibility comes at a cost --- links *within* a page, e.g. \"#footnote1\",\nwill not work with the regular version of MMD CMS. This is a limitation of the\n`\u003cbase href\u003e` feature.\n\nIf you want to allow internal links, then you need to use the advanced version\nof MMD  CMS. This version *does*  need to be installed  so that it lives  at a\ntop-level URL.  This can be accomplished  by putting it at  the webserver root\nfolder (wherever  that is for your  particular server), or by  using a virtual\nhost. I  can't support everyone  in figuring  out how to  do that, but  I have\nincluded what I did to get it working on my particular machine.\n\nFor Apache  2 on a Mac,  do the following (all  others will need to  seek help\nelsewhere):\n\n* as an admin, go to `/etc/apache2/extra`\n* `sudo pico httpd-vhosts.conf` (or similar)\n* comment out the existing virtualhost sections (add a \"#\" at the beginning of \n  the line)\n* then, add something like the following at the end of the file:\n\n\t\t\u003cVirtualHost *:80\u003e\n\t\t    DocumentRoot \"/Users/fletcher/Sites/mmd_static\"\n\t\t    ServerName mmd.local\n\t\t\u003c/VirtualHost\u003e\n\n* then add the following to `/etc/hosts`:\n\n\t\t127.0.0.1       mmd.local\n\n* finally, `sudo pico /etc/apache2/httpd.conf` and uncomment the following\n  line:\n\n\t\tInclude /private/etc/apache2/extra/httpd-vhosts.conf\n\nIf you  restart Web Sharing in  the control panel,  you should now be  able to\naccess your  site by pointing  your browser to `http://mmd.local/`.  It should\nlook much better than  the first time, but the default CSS  is ugly. There are\ntwo sample articles, and one sample tag, to get you started.\n\nYou can then modify the `.htaccess` file just like the regular version.\n\n\n\n# How do I add content to my site? #\n\nYou can add  content anywhere within the MultiMarkdown CMS  directory. You can\ncreate folders,  and bury your  content away. Keep  in mind that  the archives\nfeature only locates  pages in a `/YYYY/MM/` folder, e.g.  the sample posts in\n`/2010/01/`. Other  folders are  not treated  as \"blog posts\".  My site  is an\nexample of this structure.\n\nTo process  the files into  HTML, you need to  have a working  installation of\n[MultiMarkdown](http://fletcherpenney.net/multimarkdown/).\n\nOnce you add  the text files, you  need to run `mmd2web.pl` to  create an html\nfile.  This uses  the  `xhtml-static-site.xslt` file  to  add the  appropriate\ntemplates to your  documents. You will also need to  change the permissions on\nyour  `.html` files  so  that the  execute  bit is  enabled  (required by  the\n[XBitHack](http://httpd.apache.org/docs/1.3/mod/mod_include.html#xbithack)\nfeature in order to enable SSI without screwing everything else up).\n\nNow you just need to customize your templates and CSS files to make everything\nlook pretty....\n\n\n# Features #\n\n\nIncluded with  MultiMarkdown-CMS are several  cgi scripts that  add additional\nfeatures:\n\n* pages in the `/YYYY/MM/` hierarchy are treated as \"blog posts\"- organized by\n  date\n\n* an archive  of blog posts is  available at `/archives/`, you can  also go to\n  any year or year/month and see a list of posts in that month\n\n* visitors can  leave comments on any  blog post (by default  comments are not\n  accepted on other pages)\n\n* visitors are authenticated via OpenID for leaving comments\n\n* two Atom feeds are generated automatically - one for blog posts, and one for\n  comments\n\n* `/sitemap.xml` generates a Google compatible  sitemap of the content of your\n  site\n\n* by default, the home page lists the last 15 blog posts\n\n* by default, `index.html` pages include a list of the other pages within that\n  folder\n\n* a built-in search function is available (though setting up a \n  [Custom Search Engine](http://www.google.com/cse/) isn't a bad idea either)\n\n* a list of similar pages can be added to each page in the site\n\n* several  tag related  features are  available automatically  --- `/tags/foo`\n  searches for posts tagged `foo` and `/tagmap/` shows a list  of current tags\n  with links to those pages\n\n* default CSS allows you to switch from a right-sided sidebar, to a left-sided\n  sidebar with a  simple keyword  switch in `header.html`  --- `rightmenu`  vs\n  `leftmenu` (thanks to [Matthew James Taylor][MJT])\n\n* valid HTML 5 \u0026 valid CSS, with the exception of unsupported `\u003cmeta\u003e` elements if you have metadata\n\nThese features are  all demonstrated by the default configuration  - feel free\nto modify the scripts as needed for your own requirements.\n\n[MJT]: http://matthewjamestaylor.com/blog/ultimate-multi-column-liquid-layouts-em-and-pixel-widths\n\n\n# Metadata #\n\nThe primary metadata used to for this software consists of three tags:\n\n* Title --- Self-explanatory\n* Date --- either `01/31/2010 15:59:56`, or `01/31/2010`\n* Tags --- comma separated list of tags (case sensitive)\n\n# Settings #\n\nThere are a  couple of configuration changes that should  be done before going\nlive with this software:\n\n* the root `.htaccess` file should be changed to reflect your desired time\n  zone\n\n* four files in `/cgi/` contain the phrase \"enter your password here\" --- this\n  should be changed to a private passphrase for better security when handling\n  OpenID authentication\n\n\nObviously,  I recommend  improving the  CSS design,  and tweaking  the various\ntemplates to construct the look of your site.\n\n\n# Advanced use of git #\n\nOne of the things I really wanted to be able to do was to manage my site on my\nlaptop, experiment with it to be sure it works after any changes are made, and\nonly then to upload my changes to the  live server. I have tried to design the\ncgi scripts so that they configure themselves as much as possible, so that the\nsame code can be run locally, or from a production server.\n\nMy workflow is  that I make changes  in `/Users/fletcher/Sites/mmd_static/` as\ndescribed  above.  That   directory  was  created  as  a  git   clone  of  the\nMultiMarkdown-CMS software(as above).\n\nI then add a remote repository to the git repo:\n\n\tgit remote add live ssh://user@my.live.host/path/to/public\n\nwhere the username and  host are what I would normally use to  ssh into my web\nprovider. `/path/to/public`  is the path  to the  directory that holds  my web\nsite.\n\nThis allows me  to use git to  upload a copy of  my local site to  my web host\nwhen I am satisfied with the changes.  Additionally, by storing my web site in\na git repository, I can undo changes when  I make a mistake, and I can also go\nback to any previous version of my site.\n\nOne trick, though, is that you have to configure the remote repository to\nupdate the remote copies of all files after every `git push`. To do this, ssh\ninto your account, and go to the public directory. (You may want to back\neverything up at this point....) Then do the following to create the remote\ngit repository:\n\n\tgit init\n\tcd .git/hooks\n\tpico post-update\n\nand then put the following in the file:\n\n\t#!/bin/sh\n\t#\n\tcd /path/to/public\n\t/usr/bin/env -i /usr/local/bin/git reset --hard\n\tchmod g+s cgi/accept_comment.cgi\n\nWhat this does is force git on the remote server to reset the remote directory\nto match the state of the repository  itself. Then I change the permissions on\naccept_comment.cgi so that it is permission to write to the comments files.\n\nYou can, of course, add your own commands to this file as well.\n\nIf you use the same approach, whenever you want to upload your changes, simply\ntype:\n\n\tgit push live master\n\nYour changes  will be uploaded,  then the remote  repository will be  reset so\nit's up to date, and the permissions will be fixed on accept_comment.cgi.\n\nRemember, since you have a read-only  connection to my github repository, your\nchanges and  private files  cannot be  uploaded. You can  still use  `git pull\norigin master`  to update to the  latest version of software  I have released.\nThis should not overwrite any changes you  have made, since git is pretty good\nat  avoiding  \"collisions\". I've  only  been  using this  \"triple  repository\"\napproach for a little while, but so far it's been convenient in allowing me to\nkeep private and public files separate.\n\n**NOTE**: This set-up works  for me. I don't promise it will  work for you, or\nthat it won't mess something up. I am  not a git expert. I simply patched this\ntogether with a lot  of help from Google. I can't really  offer any support if\nit's not working for you.\n\n\n# Included Software #\n\nThis software  would not  be possible  without work  previously done  for many\nother projects:\n\n\n## Net-OpenID-Consumer ##\n\n* by Brad Fitzpatrick\n* \u003chttp://search.cpan.org/~mart/Net-OpenID-Consumer/\u003e\n\nUsed for OpenID authentication.\n\n\n## Crypt-DH ##\n\n* by Benjamin Trott\n* \u003chttp://search.cpan.org/dist/Crypt-DH/\u003e\n\nCrypt-DH is used to enable the OpenID authentication.\n\n\n## XML-Atom-Simplefeed ##\n\n* by Aristotle Pagaltzis\n* \u003chttp://search.cpan.org/~aristotle/XML-Atom-SimpleFeed/\u003e\n\nUsed to generate the atom feeds.\n\n## VectorMap.pm ##\n\n* by Fletcher T. Penney\n* \u003chttp://fletcherpenney.net/\u003e\n\nUsed to find similar pages, and perform searches of site content.\n\n## Lingua-Stem ##\n\n* by Benjamin Franz and Jim Richardson\n* \u003chttp://search.cpan.org/dist/Lingua-Stem/\u003e\n\nUsed by my VectorMap searching software to improve results\n\n\n## MultiMarkdown 3.0 ##\n\n* by Fletcher T. Penney\n* \u003chttp://fletcherpenney.net/mmd/\u003e\n\nMultiMarkdown is my update to John Gruber's\n[Markdown](http://daringfireball.net/projects/markdown/) syntax, and built\nusing modifications to [peg-markdown](https://github.com/jgm/peg-markdown) by\nJohn MacFarlane.\n\n\n# Known Issues #\n\n* Email is \"de-obfuscated\" when run through an XSLT, and it appears there is\n  no (straightforward) way around this. Not that this does *not* affect email\n  addresses that are placed in your HTML include statements --- in a sidebar,\n  for example.\n\n\n# License #\n\n\tCopyright (C) 2010-2011  Fletcher T. Penney \u003cfletcher@fletcherpenney.net\u003e\n\n\tThis program is free software; you can redistribute it and/or modify\n\tit under the terms of the GNU General Public License as published by\n\tthe Free Software Foundation; either version 2 of the License, or\n\t(at your option) any later version.\n\n\tThis program is distributed in the hope that it will be useful,\n\tbut WITHOUT ANY WARRANTY; without even the implied warranty of\n\tMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n\tGNU General Public License for more details.\n\n\tYou should have received a copy of the GNU General Public License\n\talong with this program; if not, write to the\n\t   Free Software Foundation, Inc.\n\t   59 Temple Place, Suite 330\n\t   Boston, MA 02111-1307 USA\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffletcher%2Fmultimarkdown-cms","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ffletcher%2Fmultimarkdown-cms","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ffletcher%2Fmultimarkdown-cms/lists"}