r1 - 31 Aug 2006 - 17:09:46 - TWikiGuestYou are here: TWiki >  TWiki Web > BlogPlugin


This is the supplemental plugin for the BlogUp TWikiApplication. It bundles some of the features found in common blogging applications that are very hard or even impossible to implement using TWikiML. Note, that most of the tags are tightly related to the data model of BlogUp, i.e. it relies on its TopicType and TWikiForm definitions.

Shortcut: want to create a blog ... use the BlogFactory.

Syntax Rules


Format a link to another BlogEntry displaying its headline and date.


"<topic>" name of a BlogEntry topic, e.g. BlogEntry0





Count the BlogComments that refer to a given topic recursively, that is the number of BlogComment topics that refer to a given BlogEntry and each BlogComment referring to the BlogComment found so far. Reference is expressed by the BlogRef formfield in the BlogCommentForm.


%COUNTCOMMENTS{"<topic>" ... }%
"<topic>" name of a BlogEntry or BlogComment topic, e.g. BlogEntry0
web="..." web where to search for references; defaults to the web specified as part of the "topic" parameter or the current one
format="..." format string used to display the count; the variable $count is replaced by the calculated references; defaults to "$count"
single="..." format string used to display a single hit; defaults to the "format" value (see above)
null="..." format string used to display a zero hit; defaults to "0"
hidenull="on,off" if set to "on" nohting is displayed if no references where found; defaults to "off"
offset="..." add an "offset" to the computed number of hits; so if offset="9" and 11 references where found the $count is set to 20

Following variables are expanded in format strings:

  • $percnt: % sign
  • $dollar: $ sign
  • $n: newline
  • $t: tab
  • $nop: "empty string"
  • $count: the calculated number of references (plus an optional offset)


Display the previous/next topic in an ordered set. These tags can be used to establish a navigation within a set of related topics paging to the preceding or succeeding one. A set of related topics is defined using a "where" and an "order" clause which the given topic is supposed to be part of.


%PREVDOC{"<topic" where="..." ...}%, %NEXTDOC{"<topic" where="..." ...}%
"<topic>" topic which we search the predecessor/successor of
web="..." web where to search for related topics; defaults to the web given with the <topic> parameter or the current one
where="..." search clause, see documentation of the DBCacheContrib
order="..." document property used to sort the hit set; defaults to "created"
reverse="on,off" if set to on the sorting will be reversed, that is the logic of PREV and NEXT is inverted


Display an ordered list of most recent BlogComments, grouped by the referred BlogEntry.


%RECENTCOMMENTS{"<format>" ...}%
"<format>" format string used to display the hit results; each hit is displayed using the given format
header="..." format string to prepended to the list of hits being displayed
footer="..." format string to appended to the list of hits being displayed
separator="..." format string used to separate hits; defaults top "$n"; the special separator "none" disables separation
limit="..." restrict the number of hits being displayed; defaults to "-1" which means unlimited
age="..." restrict the age of comments being displayed; values must be given in epoch seconds, e.g. 5184000 being ca. 2 months; defaults to "0" which means unlimited
category="..." pattern that limits comments to those whose BlogEntries match the SubjectCategory; defaults to ".*"
author="..." pattern that limits comments to those on BlogEntries from the given author defaults to ".*"

(Each BlogEntry that is found given the above search parameters and limits is called a hit.)

Following variables are expanded in format strings:

  • $percnt: % sign
  • $dollar: $ sign
  • $n: newline
  • $t: tab
  • $nop: "empty string"
  • $count: the number of comments on the given BlogEntry
  • $topic: the topic name of the referring BlogEntry, e.g. BlogEntry0
  • $web: the web where the hit was found
  • $headline: the headline of the referring BlogEntry
  • $commenter: a list of links to the comments in the format [[BlogEntry0#BlogComment1][<author>]],... (author: name of commenter)
  • $date: date of the most recent comment on the current hit.

See also the interface TopicFunction "RenderRecentComments".


Display a list of BlogEntries related to a given one. The Relationship is manually encoded in the data model using the "Related" formfield. The relation is computed transitively and reflexively ('til a configurable depth). That is, two BlogEntries A and B are related if A points to B or vice versa or A and B are connected by a series of related postings C1,...CN, where A is related to C1 and B CN is related to B.


%RELATEDENTRIES{"<topic>" ...}%
"<topic>" topic name of a BlogEntry related once are search for
web="..." web where to search for related topics; defaults to the web given with the <topic> parameter or the current one
format="..." format string to display a hit; defaults to "$topic"
header="..." format string to prepended to the list of hits
footer="..." format string to appended to the list of hits
separator="..." format string used to separate hits; defaults to "$n"; the special separator "none" disables separation
depth="..." depth of recursion (the number of hops from posting A to posting B); defaults to "2";

Note, that large "depth" values will very soon include your complete blog archive. The hit set also depends on the amount of direct relationships that you add to your BlogEntries. So either use a low "depth" value and add more direct relations based on your own judgment, or just specify one related entry and use a "depth" value of up to 3 for good results.

Following variables are expanded in format strings:

  • $percnt: % sign
  • $dollar: $ sign
  • $n: newline
  • $t: tab
  • $topic: topic name of a hit
  • $web: web name where the hit was found
  • $depth: distance to the given <topic> (depth in which this topic was found)
  • $headline: headline of the related BlogEntry

The relatedness feature here is a very naïve and purely manual one. We'd like to semi-automate this task using some automatic classificator on document similarities. Making use of weights following links is an option too to improve the hit set quality.


And send me a patch if you've coded that into TWiki ;).

Plugin Installation Instructions

  • Download and install all additionally required plugins listed in the dependencies information below
  • Download the BlogPlugin ZIP file from the Plugin web (see below)
  • Unzip BlogPlugin.zip in your twiki installation directory. Content:
    File: Description:
    data/TWiki/BlogPlugin.txt plugin topic
    data/_BlogPlugin/*.txt blog template web
    data/Main/BlogAdminGroup.txt blog admin group
    data/Main/BlogAuthorGroup.txt blog author group
    lib/TWiki/Plugins/BlogPlugin.pm plugin perl module
    lib/TWiki/Plugins/BlogPlugin/Core.pm plugin core module
    lib/TWiki/Plugins/BlogPlugin/Factory.pm rest interface for the BlogFactory
    lib/TWiki/Plugins/BlogPlugin/WebDB.pm WebDB implementation for the DBCachePlugin
  • Open the TWiki configuration dialog, enable the plugin and change the PluginsOrder to GluePlugin, SpreadSheetPlugin, IfDefinedPlugin, AliasPlugin
  • Create a new Blog web using the _BlogPlugin template web
  • Edit the BlogAdminGroup? and the BlogAuthorGroup? to match your needs.
  • Optionally, run BlogPlugin_installer.pl to automatically check and install other TWiki modules that this module depends on. You can also do this step manually.
  • Alternatively, manually make sure the dependencies listed in the table below are resolved.
    TWiki::Plugins>=1.1TWiki Dakar release.
    TWiki::Plugins::AliasPlugin>=1.2Required; download from TWiki:Plugins/AliasPlugin
    TWiki::Plugins::DBCachePlugin>=1.20Required; download from TWiki:Plugins/DBCachePlugin
    TWiki::Plugins::ExtendedSelectPlugin>=1.10Required; download from TWiki:Plugins/ExtendedSelectPlugin
    TWiki::Plugins::FilterPlugin>=0.94Required; download from TWiki:Plugins/FilterPlugin
    TWiki::Plugins::GluePlugin>=1.5Required; download from TWiki:Plugins/GluePlugin
    TWiki::Plugins::HeadlinesPlugin>=1.91Required; download from TWiki:Plugins/HeadlinesPlugin
    TWiki::Plugins::IfDefinedPlugin>0.93Required; download from TWiki:Plugins/IfDefinedPlugin
    TWiki::Plugins::RedDotPlugin>=1.35Required; download from TWiki:Plugins/RedDotPlugin
    TWiki::Plugins::SpreadSheetPlugin>=1.001Required; download from TWiki:Plugins/SpreadSheetPlugin
    TWiki::Plugins::TagCloudPlugin>=0.20Required; download from TWiki:Plugins/TagCloudPlugin
    TWiki::Plugins::TimeSincePlugin>=0.99Required; download from TWiki:Plugins/TimeSincePlugin
    TWiki::Plugins::TwistyPluginRequired; download from TWiki:Plugins/TwistyPlugin
    TWiki::Plugins::UserInfoPlugin>=1.5Optional; download from TWiki:Plugins/UserInfoPlugin
    TWiki::Plugins::NatSkin>=2.9998Recommended; download from TWiki:Plugins/NatSkin
    TWiki::Plugins::ImagePlugin>=0.3Recommended; download from TWiki:Plugins/ImagePlugin

Plugin Info

Plugin Author: TWiki:Main.MichaelDaum
Copyright ©: 2006, MichaelDaum@WikiRing.com
License: GPL (GNU General Public License)
Version: v0.99
Change History:  
31 Aug 2006: added NO_PREFS_IN_TOPIC; added TWiki:Plugins/ImagePlugin support; fixed BlogArchive not to compute terms before calling the tagcloud; removed whitespaces from WebPreferences to prevent insecure eval warnings (strange); fixed use of NatSkin's IFSKINSTATE as it glues no more
21 Aug 2006: fixed error in RECENTCOMMENTS checking the posting's status; some css fixes; added default meta data keywords
15 Aug 2006: making use of new feature of the IfDefinedPlugin to speed up certain things; improved way to render meta data and pagetitle; generating relative urls instead of absolute where possible now
28 Jul 2006: hiding the breadcrumbs in the blog introduced in the recent NatSkin version; reordered sidebar section to "make more sense"; minor docu changes; added recommendation to use the BlogPlugin in combination with the TWiki:Plugins/NatSkin because some features will work with it only
23 Jul 2006: added view templates specific to PatternSkin; improved the blog's sidebar for PatternSkin; added standard WebSearch topics; improved PatternSkin css support; fixed rendering postings without a SubjectCategory; usability improvements in RenderAddComment; fighting back sprinkling <p />; small improvements to the BlogFactory; Upgrade warning: blogentries created with older versions of this plugin need to be editted to replace
%META:FIELD{name="State" ... value="enabled"}% with
%META:FIELD{name="State" ... value="published"}%;
replace disabled with unpublised respectively
15 June 2006: added BlogFactory to ease creation of blogs; fixed BlogImages feature introduced recently; added docu to to blog's WebPreferences; moved some hard-coded values to WebPreferences so that they can be set by the BlogFactory
09 June 2006: added last.fm support to display the 10 most recent tracks you listened to in the sidebar; simplified uploading/managing images using a new "Upload Image" button; cleaned up technorati sidebar functionality; minor fixes in the blog archive; added ENABLEPINGBACK to blog postings so that they can receive pings once that plugin is ready; added TAG parameter to TopicFunctions that extract blog entries; fixed error in RenderGoogleAdsense; displaying recent visitors within the last week (was today's visitors only) ; added a customized "page not found"; added support to render your blog's license in the sidebar, defaults to a creative common license for wiki
24 May 2006: added BlogImages: centralize all image resources; added affiliations to the sidebar; cleaned up code to detect multi-authored blog; cleaned up forms with singleton formfields ; removed all mandatory flags from formfields that are not auto-filled; improved rss and atom feeds to generate better titles for comments; added TAGCLOUDFADE to WebPreferences to make the archive's tagcloud customizable (was hardcoded before); fixed issue with rss feed icon in sidebar; added notion to register first before replying; added GOOGLE_*COLOR preference values to WebPreferences to make adsens customizable; added accesskeys 1-5 for the WebButtons; multiple css issues, more classes; fixed rss feed validation error due to symbolic html chars instead of numeric (hellip = #8230 etc)
05 May 2006: added views for all models: all BlogenTries, SubjectCategories etc only set a specific TopicView; this reduces redundancy, hides implementation and fixes a pagination error using URLPARAM in TopicTemplates, e.g. SubjectCategories pages couldn't be run over; separated BlogUp ring from blogroll using new NOCAT parameter of RenderBlogRoll; added TopicViews twisty to AdminTools; page through BlogLinks of the same category
30 Mar 2006: moved the createdate field in the WebDB into the DBCachePlugin; overriding it using a Date formfield if there is one; this means you need DBCachePlugin > 1.2; added RenderGoogleAdsense; fixed inconsequent parameter naming of categories (was sometimes NAME sometimes CAT) NOTE: you will need to correct preexisting SubjectCategory topics by hand if you upgrade (sorry again); fixed html in RenderBlogComments;
27 Mar 2006: fixed rendering of scroll helpers; using template comments instead of templateonly sections in TopicViews; initialize email fields of comment with USERINFO
12 Mar 2006: better separation of multiple authors: each BlogAuthor page renders a dedicated About info now taken from the new BlogAuthorForm; the sidebar renders the items that belong to the author only using the new Author section in RenderSideBar; unpublished postings are listed per author only; added RenderAuthors to the sidebar - disabled on a single-author blog; added BlogAuthor to BlogLinks so that every author can have his own sidebar as well as share parts with other authors; added AUTHOR to a couple of TopicTunctions to make them author-aware; added HOME parameter to RenderBlogEntriesOfAuthor link to a different topic than the default Main.AuthorName one; added author argument to RECENTCOMMENTS
11 Mar 2006: css fixes to catch up with the recent changes to the PatternSkin; replaced css based way to hide topic forms with VIEW_TEMPLATEs; added comments field to SubjectCategories; replaced CALF{IF(EXACT())} with new IFDEFINED{"" as=""}; hide postings for guests if they are not published yet; browsing postings coming from a SubjectCategory frontpage will propagate down the category so that pagination will be restricted to that category only; added mechanisms to propagate urlparams; componentized the BlogArchive: no need for CALC variables anymore; listing unpublished/unfinished postings in the sidebar for authors; packaging using the BuildContrib; CAUTION on upgrade: you need to add "Set VIEW_TEMPLATE = HiddenViewTemplate in your previous postings, links and categories (sorry)
03 Mar 2006: added easy way to add/remove tags in the BlogEntryForm; tags are displayed using a mini-tag cloud on the blog entry pages to sort them by weight and name (btw. you can weight each tag like mytag:2)
01 Mar 2006: grand rework of the BlogArchive; added BlogTags for BlogEntries; added dependency on TWiki:Plugins/TagCloudPlugin; added rel="tag" to links to tags and categories to make technorati happy; reworked category and archive in sidebar using the new DBSTATS tag of the recent DBCachePlugin resulting in a drastic speed improvement on the front pages; removed unused TopicFunctions
22 Feb 2006: tighter control of alias substitution; removed % in RenderBlogEntryButton;
21 Feb 2006: removed dependency on the NatSkin; added dependency on the IfDefinedPlugin; added PatternSkin specific styles for the blog web; lots of minor TopicFunction tweaks
14 Feb 2006: added and diverse rss and atom feeds; added comment syndication per blog entry; added TopicTypes BlogPage and TWikiTopic; added descriptive tooltips to all links; added reverse argument to PREVDOC, NEXTDOC; added header, footer arguments to COUNTCOMMENTS; renamed RELATEDENTRIES to RELATEDTOPICS to handle BlogPages with it too; added a filter argument to RELATEDTOPICS for more flexibility; preliminary BlogUp documentation and screenshots; reworked sidebar generation by removing BlogSideBar and adding; a proper RenderSideBar TopicFunction for it; added WebButtons to navigate inside the blog application; added nice rss feed icons everywhere; added scroll helper to blog entries (need more); moved most of the descriptive text in BlogAbout into a BlogHelpText and reuse the BlogAbout for a free-form "About" page that is added to the WebButtons; speed improvements rendering the front page by simplifying the navigation renderer; added a dedicated TopicFunction to render http-equivs, i.e. to list the feeds; added w3c validation button to the TWikiWorkbench; added example WebAggregation by rendering own feeds using the HeadlinesPlugin; added dependency to TWiki:Plugins/FilterPlugin for the FORMATLIST tag; unified redundant navigation renderer; improved admin tools using twisties; postings are owned by the author by default now; fixed print view to popup the print dialogue
30 Jan 2006: replaced NOPs with STARSECTIONs; fixed customized search view
27 Jan 2006: added permalink tooltips ; nicer autor and admin buttons; renamed SECTIONs to STARTSECTIONs; highlight current TopicFunction in sidebar list; added button to easily w3c validate a TopicFunction; lots of w3c fixes, mostly superfluous <p>s in the wrong place; css improvements
24 Jan 2006: Initial version
TWiki Dependency: $TWiki::Plugins::VERSION 1.1
Perl Version: 5.8
Benchmarks: GoodStyle nn%, FormattedSearch nn%, BlogPlugin nn%
Plugin Home: TWiki:Plugins/BlogPlugin
Feedback: TWiki:Plugins/BlogPluginDev
Appraisal: TWiki:Plugins/BlogPluginAppraisal

-- TWiki:Main.MichaelDaum - 31 Aug 2006

Edit | WYSIWYG | Attach | Printable | Raw View | Backlinks: Web, All Webs | History: r1 | More topic actions
Pixeon Medical Systems
Pixeon Medical Systems - Todos os direitos reservados. 2020