Wikka Wiki Default Category Pages
What It Does
With these changes, a category page reference such as CategoryLinux or CategorySoftware when displayed on an existing page, will not render as a missing page. It will look the same as any other page link to a page that does exist. If the category page has not been created by a user, WikkaWiki will generate the page with default contents including links to all pages in that category.Why It's Useful
The goal is to simplify the user experience by allowing them to categorize their pages by simply putting the category in the page. They no longer have to separately create the category page. Hopefully, the result of this will be better categorized pages resulting in a better organized documentation set (wiki).License
WikkaWiki is licensed under the GPL as are these changes.Usage
Nothing special needs done to use and see the results of this hack. Simply start adding categories to your pages.Installation
Please note that since this is a change to the default functionality of the engine and not simply an add-on action, it will need reapplied after any upgrades.
Although there are more recent versions of WikkaWiki available, these modifications were made and reference version 1.1.6.0. The code may differ slightly in newer versions, so adjust accordingly.This change requires a simple modification to two WikkaWiki core php files. Since the changes are minor and the core files may differ by version, it is recommended that you simply make the changes noted here. No download is provided for this change.
show.php
The default show.php file must be altered to create the default text for missing category pages.- Change directories to your WikkaWiki install directory
- Backup the existing file: cp handlers/page/show.php handlers/page/show.php.bk
- Edit the file and make the following replacement: vi handlers/page/show.php
Replace line
print("<p>This page doesn't exist yet. Maybe you want to <a href=\"".$this->Href("edit")."\">create</a> it?</p></div>");
with
if (strpos($this->GetPageTag(),"Category") === 0) { //if (substr($this->GetPageTag(),0,8) == "Category") { // Build a default category page. $defaultPage = "\"\"<p>\"\"This is a default category page. Please edit to add your own content.\"\"</p>\"\""; $defaultPage .= "\n----\n\n{{Category col=\"3\"}}\n\n\n----"; $defaultPage .= "\n[[CategoryCategory List of all categories]]\n"; // Display the default category page print($this->Format($defaultPage, "wakka")."</div>"); } else { print("<p>This page doesn't exist yet. Maybe you want to <a href=\"".$this->Href("edit")."\">create</a> it?</p></div>"); }
diff
Here’s a diff of my two files.diff show.php show.php.bk 11,21c11 < if (strpos($this->GetPageTag(),"Category") === 0) { < //if (substr($this->GetPageTag(),0,8) == "Category") { < // Build a default category page. < $defaultPage = "\"\"<p>\"\"This is a default category page. Please edit to add your own content.\"\"</p>\"\""; < $defaultPage .= "\n----\n\n{{Category col=\"3\"}}\n\n\n----"; < $defaultPage .= "\n[[CategoryCategory List of all categories]]\n"; < // Display the default category page < print($this->Format($defaultPage, "wakka")."</div>"); < } else { < print("<p>This page doesn't exist yet. Maybe you want to <a href=\"".$this->Href("edit")."\">create</a> it?</p></div>"); < } --- > print("<p>This page doesn't exist yet. Maybe you want to <a href=\"".$this->Href("edit")."\">create</a> it?</p></div>");
wikka.php
The default wikka.php file must be altered to set the link type correctly for missing category pages.- Change directories to your WikkaWiki install directory
- Backup the existing file: cp wikka.php wikka.php.bk
- Edit the file and make the following replacement: vi wikka.php
Replace line
return ($linkedPage ? "<a href=\"".$this->Href($method, $linkedPage['tag'])."$anchor\" title=\"$title\">".$text."</a>" : "<a class=\"missingpage\" href=\"".$this->Href("edit", $tag)."\" title=\"Create this page\">".$text."</a>");
with
if (strpos($tag,"Category") === 0) { //if (substr($tag,0,8) == "Category") { // Treat Category [[]]pages as if they always exist and we will create // a default if not. return ("<a href=\"".$this->Href($method, $tag)."$anchor\" title=\"$title\">".$text."</a>"); } else { return ($linkedPage ? "<a href=\"".$this->Href($method, $linkedPage['tag'])."$anchor\" title=\"$title\">".$text."</a>" : "<a class=\"missingpage\" href=\"".$this->Href("edit", $tag)."\" title=\"Create this page\">".$text."</a>"); }
diff
Here’s a diff of my two files.diff wikka.php wikka.php.bk 680,688c680 < //return strpos($tag,"Category"); < if (strpos($tag,"Category") === 0) { < //if (substr($tag,0,8) == "Category") { < // Treat Category pages as if they always exist and we will create < // a default if not. < return ("<a href=\"".$this->Href($method, $tag)."$anchor\" title=\"$title\">".$text."</a>"); < } else { < return ($linkedPage ? "<a href=\"".$this->Href($method, $linkedPage['tag'])."$anchor\" title=\"$title\">".$text."</a>" : "<a class=\"missingpage\" href=\"".$this->Href("edit", $tag)."\" title=\"Create this page\">".$text."</a>"); < } --- > return ($linkedPage ? "<a href=\"".$this->Href($method, $linkedPage['tag'])."$anchor\" title=\"$title\">".$text."</a>" : "<a class=\"missingpage\" href=\"".$this->Href("edit", $tag)."\" title=\"Create this page\">".$text."</a>");
That’s it! Default category pages are ready go on your site. Test it, then notify your users and have fun!
Issues
- Since default category pages are generated on request and not stored, they do not appear in the CategoryCategory page (listing of all categories). This may be remedied this in a future version.
Screenshots
Missing Category Page
Default Category Page
CategoryUserContributions