English, Nederlands
Donate with PayPal

Nocterra version 0.99.6

Nocterra 0.99.6 extends the APIs and extension points available to add-ons, allowing more of Nocterra’s existing infrastructure to be reused by independently released functionality.

The release expands access to caching, content handling, metadata, configuration and routing-related functionality, and includes related improvements throughout the blog, RDFa, layout and image handling code. These changes provide a broader foundation for add-ons such as the Event add-on while remaining generally available to other extensions.

Package
Nocterra
Version
0.99.6
Release date
September 22nd, 2026
Type
Archive TAR.GZ
Download
nocterra_0.99.6_noarch.tar.gz

Add-on APIs and reusable core facilities

Nocterra 0.99.6 makes more existing CMS functionality available for reuse outside the code in which it was originally implemented. This continues the work towards allowing separately released add-ons to make use of Nocterra's own infrastructure instead of implementing parallel mechanisms.

One example is stringToUrl(), which has moved from the blog code to the common layout API so it is available to other parts of Nocterra and to add-ons. Other changes in this release similarly separate generally useful functionality from the feature that first required it. This work is also part of the preparation for add-ons such as the Event add-on, which require access to more of Nocterra's routing, caching, content and structured-data facilities than the existing page and hook integration alone provides.

Blog URLs, routing and configuration

The blog gains per-author and per-category urlScheme configuration. Articles can use an URL scheme associated with their category or author, with configurable priority when both are available, and fall back to the general article URL schemes. The routing code has been reorganized around these schemes so the same configuration is used for URL generation, article lookup, canonical URLs and alternate URLs.

URL schemes also support the expanded case-prefix syntax used elsewhere in the blog, including first-letter and full-string case conversion. Article placeholders and definitions have corresponding capitalization options, and article text parsing can now return author, category and tag names without generating links when the surrounding output already supplies the link.

Links for year, author, category and tag configuration can now consistently use absolute URLs as well as local paths. Their configuration and normalization have been brought into the same model, making the same URL handling available across these definitions.

Structured data and semantics

The structured-data output has been reviewed as part of the continuing work to make semantics less dependent on the code path that happens to generate a page. In particular, the automatically generated year table of contents no longer declares a fixed Blog/BlogPosting relationship. Individual entries can instead use the RDFa setting and configured type associated with their category.

This work is preparatory to moving more structured-data handling into common Nocterra facilities and providing APIs for adding structured data. At present this responsibility is distributed between several parts of the core, including layout-generated data such as breadcrumbs and OpenGraph output, and structured data generated by the blog. Bringing these facilities together will allow pages, core components and independently released add-ons to contribute semantic information through the same infrastructure.

Article images and ImageSets

Article image handling now has a common API. blogGetArticleImage() first uses an image configured directly on the article and can then resolve an article image through the configured author and category, the general article configuration and finally the active site image. The author or category can be given priority independently of the URL-scheme priority.

The resolved image is used by article output and metadata generation and is also available through the article /images/logo_social.png placeholder. The API can preserve an existing ImageSet, replace it with another ImageSet, or return the underlying image without an ImageSet wrapper. ImageSet paths may also start with a slash in 0.99.6.

Layout and generated output

Menu items can now have an additional CSS class, allowing individual entries to be styled without changing the generated menu structure. Link processing has also been extended to more generated page content, including applicable prologues, epilogues and footer entries, so those areas can use the same Nocterra link handling as normal page content.

Footer configuration is more flexible as well: entries can obtain their displayed name from an existing menu path, contain plain text without a link, or act as separators.

The language selector now uses the correctly spelled separator class for the SPAN placed between language choices. Sites with CSS that explicitly refers to the previous seperator class should update that selector when moving to 0.99.6.

Page timestamping configuration now accepts a flat array of excluded paths in addition to the other supported forms, bringing its configuration normalization in line with similar Nocterra settings.

There are also small changes to generated HTML formatting. Leading and trailing empty lines are handled consistently, and the contents of PRE elements are no longer given the indentation that Nocterra adds to surrounding generated markup. This mainly keeps technical and preformatted source examples closer to their supplied formatting.

Detailed changes

2026-09-22#892:Blog: Add fallback image to article, category and author configuration
2026-09-20#891:Blog: Add function to get article image
2026-09-20#88:PRE element content should not be indented
2026-09-20#890:generateFromContent does not remove leading empty lines correctly
2026-09-20#885:Blog: Add support to definitions for case prefix syntax
2026-09-19#127:Ability to assign classes to menu items
2026-09-19#850:compileLanguages does not correctly support flat array timestamping page setting
2026-09-19#889:Move stringToUrl to layout.php
2026-09-19#888:Blog: Make RDFa generation type aware
2026-09-18#887:Blog: Should not override already defined menu items
2026-09-18#884:Blog: Add support to urlscheme for case prefix syntax
2026-09-17#886:Blog: Placeholder first letter uppercase without prefix overrides specified prefix
2026-09-17#883:Blog: Expand placeholder case prefix to include full lower and full upper case
2026-09-15#881:Blog: mismatch in handling absolute versus relative year, author, category and tag its value of link
2026-09-15#882:Blog: fatal error in blogParseDefText when configuring multiple urlschemes for a category or author
2026-08-17#880:Blog: Double slash possible in sitemap.xml
2026-08-08#879:imageSets cannot start with a slash
2026-08-06#743:Process links in some prologues and epilogues and footer string entries
2026-08-06#851:languageSelector uses incorrectly formed separator
2026-08-06#878:Footer check of item and link too strict for custom entry
2026-07-31#875:Blog: Support per author and per category urlScheme
2026-07-31#877:Blog: lookup_article_in_author_toc passed link directly as the author key
2026-07-31#876:Blog: wrong function name for blogGetArticleUrl
2026-07-30#874:Blog: article keys mix modified and updated
2026-07-30#873:Blog: Add parameter to blogParseArticleText to prevent links in links
2026-07-30#871:Blog: blogExtendMenuWithYear not called from blogGenerateYearContent
2026-07-30#872:Blog: toc and urlmap routing log messages that should be debug output
2026-07-30#869:Blog: Customizing TOC URL for a certain year/author/category/tag can result in a 404 not found
2026-07-28#870:Blog: urlScheme {date_ord} not parsed correctly
2026-07-28#868:Blog: urlScheme too greedy when the scheme includes dashes
2026-07-28#835:Blog: blogGetArtcleUrl {Day} and {day} use wrong capitalization flag
2026-07-28#867:Blog: Passing null to cacheAddDependency when articles are directly in the source directory
2026-07-28#832:Blog: Inconsistencies between year, author, category and tag settings and normalization