[pmwiki-users] RFC: Indexing categories and links

Petko Yotov 5ko at 5ko.fr
Wed Mar 3 13:58:36 CST 2010


Many times, there have been requests about improving the way Pagelists with 
Backlinks are generated, particularly about the category feature. 

  (:pagelist link=Category.Name:)

There are two different markups, [[Category/Name]] and [[!Name]] which both 
create a link to the page Category.Name, and pages both are currently 
displayed in the above pagelist.

Authors have asked for the possibility to list only pages containing the 
category link [[!Name]] but not containing the regular link [[Category/Name]].

Category links are stored in a special attribute in the page file, and also in 
a special file .pageindex to speed up the searches, in the form "Category.Name 
Category.Name2" etc.

We have come up with an idea to add both strings "Category.Name" and "!Name" 
to the page attribute and to the .pageindex file. 

* If a page contains a link [[!Name]], both "Category.Name" and "!Name" are
  stored in the indexes.

* If a page contains a link [[Category/Name]], only "Category.Name" is
  stored in the indexes.

* A pagelist with link=Category.Name will find all pages linking to
  Category.Name, both [[Category/Name]] and [[!Name]], like now. 
  No wikis will break because of the change.

* A pagelist with link=!Name will find only pages containing [[!Name]], which
  is new. Only newly created (:pagelist link=!Name:) will display these pages.

This way, with a few changes of 3 or 4 core functions, it is possible to add 
the much requested feature, and to stay backwards compatible with all current 
installations. (WikiAdmins may need to remove the wiki.d/.pageindex file after 
upgrading to let PmWiki reindex the site.)

So my first question is should we do this change?

Another feature was suggested by Peter Bowers. We can have globally defined 
link prefixes like :

  ! for Category
  ~ for Profiles

and others. These link prefixes can be defined in config.php and then used in 
the wiki, like for example
  [[:Name]] = [[Projects/Name]] or
  [[@Name]] = [[Tags/Name]] or
  [[+Name]] = [[ToDo/Name]] etc.

If we change the current !Category and ~Profiles links to be handled by the 
same mechanism as [[regular links]], adding more prefixes will be very easy 
for wiki admins. PmWiki will likely not have new link prefixes, but individual 
wikis could add them with such line in config.php:

  $LinkPrefixGroup['@'] = 'Tags';

Using a global way of dealing with links will fix some bugs we've had for a 
long time:

  "[[!My category | Alternative text ]]" doesn't work in 2.2.14
  "[[!My category |+]]" doesn't work in 2.2.14
  "[[!My category]]suffix"  doesn't work in 2.2.14

So my second question is should we enable this link-prefix feature?

If your answer is yes, I'll invite you to download the latest "pre-release" 
code from Subversion, test the new features and report any problems which we 
haven't discovered yet. 

Note, these changes in Subversion are for testing and discussing purposes, so 
don't build upon them. We (especially Pm) may conclude that we shouldn't 
release them at this moment.


P.S. The current proposition will not yet allow a pagelist with  
link=Page1,Page2 or link=Page1,-Page2 to list pages to 2 or more categories -- 
which would require more substantial changes to the Pagelist functions which 
should be done more carfully, not today.

More information about the pmwiki-users mailing list