CINXE.COM
Reply to comment | Richard Atterer
<!DOCTYPE html> <html lang="en" dir="ltr"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Reply to comment | Richard Atterer</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <link rel="shortcut icon" href="/sites/all/themes/canvas_spring/favicon.ico" type="image/x-icon" /> <meta name="viewport" content="width=device-width; initial-scale=0.6666; maximum-scale=1.5; minimum-scale=0.25;" /> <link type="text/css" rel="stylesheet" media="all" href="/sites/atterer/files/css/css_14af49e6e7b401453d58159b97e0a114.css" /> </head> <body class="not-front not-logged-in page-comment no-sidebars"> <div id="page"><div id="page-inner"> <a name="top" id="navigation-top"></a> <div id="skip-to-nav"><a href="#navigation">Skip to Navigation</a></div> <div id="header"><div id="header-inner" class="clear-block"> <div id="header-background"></div> <div id="logo-title"> <div id="logo"><a href="/" title="Home" rel="home"></a></div> </div> <!-- /#logo-title --> <div id="header-blocks" class="region region-header"> <div id="block-user-0" class="block block-user"> <h2>User login</h2> <div class="content"> <form action="/comment/reply/35?destination=comment%2Freply%2F35" accept-charset="UTF-8" method="post" id="user-login-form"> <div><div class="form-item" id="edit-name-1-wrapper"> <label for="edit-name-1">Username: <span class="form-required" title="This field is required.">*</span></label> <input type="text" maxlength="60" name="name" id="edit-name-1" size="15" value="" class="form-text required" /> </div> <div class="form-item" id="edit-pass-wrapper"> <label for="edit-pass">Password: <span class="form-required" title="This field is required.">*</span></label> <input type="password" name="pass" id="edit-pass" maxlength="60" size="15" class="form-text required" /> </div> <input type="submit" name="op" id="edit-submit-1" value="Log in" class="form-submit" /> <div class="item-list"><ul><li class="first last"><a href="/user/password" title="Request new password via e-mail.">Request new password</a></li> </ul></div><input type="hidden" name="form_build_id" id="form-9rcmp-iWjrXU2RScswhTIyFDcZrbUXKvAw2D_ORdonk" value="form-9rcmp-iWjrXU2RScswhTIyFDcZrbUXKvAw2D_ORdonk" /> <input type="hidden" name="form_id" id="edit-user-login-block" value="user_login_block" /> </div></form> </div> </div> </div> <!-- /#header-blocks --> </div></div> <!-- /#header-inner, /#header --> <div id="main"><div id="main-inner" class="clear-block with-navbar"> <div id="content"><div id="content-inner"> <div id="content-header"> <div class="breadcrumb"><a href="/">Home</a> › <a href="/destrictor">Destrictor - an SVN-based Web CMS</a></div> <h1 class="title">Reply to comment</h1> </div> <!-- /#content-header --> <div id="content-area"> <div id="node-35" class="node clear-block"> <h2><a href="/destrictor" title="Destrictor - an SVN-based Web CMS">Destrictor - an SVN-based Web CMS</a></h2> <div class="meta"> <span class="submitted">Last update by Richard on 2010-05-06</span> <div class="terms terms-inline"><ul class="links inline"><li class="taxonomy_term_3 first last"><a href="/taxonomy/term/3" rel="tag" title="">software</a></li> </ul></div> </div> <div class="content"> <p>Destrictor is a CMS which takes a fundamentally different approach to some technical aspects of content generation. Its aim is to get maximum performance by not building pages when they are fetched, but only whenever their content is edited.</p> <p>Content is not stored in a database, but an SVN repository. The CMS is written in PHP, but it does not execute any of its code when individual pages are fetched. Instead, Destrictor is called from an SVN post-commit hook (and releated hooks) when content changes. It works out what has changed, regenerates the appropriate HTML files, and writes them to a “cache” directory, which is served by Apache or another web server as static content.</p> <p>So-called dependencies play a role in making the generation work. For example, one of the supplied modules is responsible for generating a menu on each page. If the title of a page appears in the navigation menu on other pages, then the content of these other pages needs to be regenerated whenever the first page changes. The dependency system takes care of this, and also takes dependency loops into account.</p> <p>The above description may sound as if only static HTML web pages can be generated, but this is not the case. The output can also include PHP code snippets, from which the system will generate “static PHP files”. As a result, only your PHP code will execute when the respective page is fetched, and not any of Destrictor's code.</p> <p>This CMS has been in use on a production website for a few years. Still, I think a lot of additional work would be required to make it fully-featured.</p> <p>Snapshot release: <a href="/sites/atterer/files/2010-05/destrictor/destrictor-091206.tar.gz">destrictor-091206.tar.gz</a></p> </div> <ul class="links inline"><li class="comment_add first last active"><a href="/comment/reply/35#comment-form" title="Share your thoughts and opinions related to this posting." class="active">Add new comment</a></li> </ul></div> <div class="box"> <h2>Reply</h2> <div class="content"><form action="/comment/reply/35" accept-charset="UTF-8" method="post" id="comment-form"> <div><div class="form-item" id="edit-name-wrapper"> <label for="edit-name">Your name: </label> <input type="text" maxlength="60" name="name" id="edit-name" size="30" value="Anonymous" class="form-text" /> </div> <div class="form-item" id="edit-mail-wrapper"> <label for="edit-mail">E-mail: </label> <input type="text" maxlength="64" name="mail" id="edit-mail" size="30" value="" class="form-text" /> <div class="description">The content of this field is kept private and will not be shown publicly.</div> </div> <div class="form-item" id="edit-homepage-wrapper"> <label for="edit-homepage">Homepage: </label> <input type="text" maxlength="255" name="homepage" id="edit-homepage" size="30" value="" class="form-text" /> </div> <div class="form-item" id="edit-subject-wrapper"> <label for="edit-subject">Subject: </label> <input type="text" maxlength="64" name="subject" id="edit-subject" size="60" value="" class="form-text" /> </div> <div class="form-item" id="edit-comment-wrapper"> <label for="edit-comment">Comment: <span class="form-required" title="This field is required.">*</span></label> <textarea cols="60" rows="15" name="comment" id="edit-comment" class="form-textarea resizable required"></textarea> </div> <ul class="tips"><li>Web page addresses and e-mail addresses turn into links automatically.</li><li>Allowed HTML tags: <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd></li><li>Lines and paragraphs break automatically.</li><li>Use [toc list: ol; title: Table of Contents; minlevel: 2; maxlevel: 3; attachments: yes;] to insert a mediawiki style collapsible table of contents. All the arguments are optional.</li><li>Each email address will be obfuscated in a human readable fashion or (if JavaScript is enabled) replaced with a spamproof clickable link.</li></ul><p><a href="/filter/tips">More information about formatting options</a></p><input type="hidden" name="form_build_id" id="form-Febjgy0_EVtU80sTi_7jkmIBY13GVGjqZz0AwFGZayQ" value="form-Febjgy0_EVtU80sTi_7jkmIBY13GVGjqZz0AwFGZayQ" /> <input type="hidden" name="form_id" id="edit-comment-form" value="comment_form" /> <div class="captcha"><input type="hidden" name="captcha_sid" id="edit-captcha-sid" value="482045" /> <input type="hidden" name="captcha_token" id="edit-captcha-token" value="d064cc1dc8e1a034842c616d75810304" /> <div class="form-item" id="edit-captcha-response-wrapper"> <label for="edit-captcha-response">Please enter my last name (to protect this site against spam): <span class="form-required" title="This field is required.">*</span></label> <input type="text" maxlength="50" name="captcha_response" id="edit-captcha-response" size="50" value="" class="form-text required" /> <div class="description">Fill in the blank</div> </div> </div><input type="submit" name="op" id="edit-submit" value="Save" class="form-submit" /> <input type="submit" name="op" id="edit-preview" value="Preview" class="form-submit" /> </div></form> </div> </div> </div> </div></div> <!-- /#content-inner, /#content --> <div id="navbar"><div id="navbar-inner" class="clear-block region region-navbar"> <a name="navigation" id="navigation"></a> <div id="search-box"> <form action="/comment/reply/35" accept-charset="UTF-8" method="post" id="search-theme-form"> <div><div id="search" class="container-inline"> <div class="form-item" id="edit-search-theme-form-1-wrapper"> <input type="text" maxlength="128" name="search_theme_form" id="edit-search-theme-form-1" size="15" value="Search" title="Enter the terms you wish to search for." class="form-text" /> </div> <input type="hidden" name="form_build_id" id="form-ATACprzJQZzYV7N1nKU69uBV5Xj2as6-JsRniIzrvO0" value="form-ATACprzJQZzYV7N1nKU69uBV5Xj2as6-JsRniIzrvO0" /> <input type="hidden" name="form_id" id="edit-search-theme-form" value="search_theme_form" /> </div> </div></form> </div> <!-- /#search-box --> <div id="primary"> <ul class="links"><li class="menu-344 first"><a href="/photo" title="">Photography</a></li> <li class="menu-362"><a href="/software" title="">Software</a></li> <li class="menu-190"><a href="/jigdo" title="jigdo (Jigsaw Download) - a download manager for CD/DVD images">jigdo</a></li> <li class="menu-376"><a href="/research" title="">Research</a></li> <li class="menu-193 last"><a href="/about" title="About">About</a></li> </ul> </div> <!-- /#primary --> </div></div> <!-- /#navbar-inner, /#navbar --> </div></div> <!-- /#main-inner, /#main --> <div id="footer"><div id="footer-inner" class="region region-footer"> <div id="footer-message"><div class="aller"><i>© Copyright 2014 Richard Atterer</i></div> <div class="breadcrumb"> <a href="#page"> Top of page </a> • <a href="/"> Home </a> • <a href="/sitemap"> Sitemap </a> • <a href="/contact"> Contact </a> • <a href="/about"> About </a></div></div> </div></div> <!-- /#footer-inner, /#footer --> </div></div> <!-- /#page-inner, /#page --> <script type="text/javascript" src="/sites/atterer/files/js/js_9bb08a6654a3a712ed83ce1fe7cd8c4c.js"></script> <script type="text/javascript"> <!--//--><![CDATA[//><!-- jQuery.extend(Drupal.settings, { "basePath": "/", "spamspan": { "m": "spamspan", "u": "u", "d": "d", "h": "h", "t": "t" } }); //--><!]]> </script> </body> </html>