Page MenuHomePhabricator

Getting [[SMW::on]] in query result set when used in Mediwiki:Sidebar
Closed, DeclinedPublic

Description

Author: mitchell_neill

Description:
I want the sections of my website automatically appear in my MW sidebar as they are created by a SMW form.

So in http://localhost/mediawiki/index.php/Mediawiki:Sidebar I have:

  • navigation
    • mainpage|mainpage-description
    • portal-url|portal
    • currentevents-url|currentevents
    • recentchanges-url|recentchanges
    • randompage-url|randompage
    • helppage|help

{{#ask:
[[Category:Sections]]
[[Title::+]]

?Section Link#-
link=none
format=template
template=Sidebar Query

}}

The Sidebar Query Template is:

  • {{{1}}}|{{{2}}}

The result is that I get the section names and their links appearing in the sidebar as expected, except for one problem. The last one has [[SMW::on]] after it. e.g.:

Section1
Section2
Section3
Section4[[SMW::on]]

The [[SMW::on]] should not be showing. Where is it coming from?

Posted on SMW mailing list but got no answer.

Thanks
Neill


Version: unspecified
Severity: minor

Details

Reference
bz23297

Event Timeline

bzimport raised the priority of this task from to Lowest.Nov 21 2014, 10:59 PM
bzimport set Reference to bz23297.

SMW::on is an internal pseudo-annotation that SMW uses to avoid semantic markup in templates being interpreted when using templates in queries.

The problem here is that MediaWiki does not interpret link syntax [[ ... ]] in MediaWiki:Sidebar. Now on the other hand, this is not really a problem: the parsing of complex markup in such heavily used locations is disabled on purpose. I am even surprised that parser functions and templates are allowed there.

Your problem thus is simply due to an unexpected use of SMW in a context it is not made for. You will find that many #ask formats, and many other parser functions do not work properly in MediaWiki:Sidebar. This is a consequence of some design choices in MediaWiki, and not a bug as such. It simply was intentionally disabled.

Since this use of MW or SMW is not intended, it is likely to cause unforeseen problems or to break in future versions, even if worked around for now. But if you *really* want to do this, the following works:

  • Create a new Type:String property, say "sidebar item".
  • For each page that should appear in the sidebar, assign the value

    "* Pagename|Sectionname"

to this property. Due to the | symbol, this cannot be done with the [[ :: ]] syntax. Instead, use #set like this:

{{#set: sidebar item=* Pagename{{!}}Sectionname}}

where the Template:! is the usual | template like on Wikipedia. This assignment could be accomplished via some template.

  • Then modify your MediaWiki:Sidebar to contain something like this:

"""

  • Some section name
    • help|A fixed help link
    • Test|Some other fixed link

{{#ask: [[Sidebar item::+]]

mainlabel=-
intro=*
?sidebar item=
link=none
format=list
sep=

}}

"""

This works for me on MW 1.17alpha (r63248), SMW (r66801).

Let me repeat: this is a gross hack that is likely to cause trouble of various kinds. If it works properly, any editor of your site gains the ability to modify the sidebar in arbitrary ways (to the extent that editing MediaWiki:Sidebar would allow it). It is also not clear how the use of queries in messages affects performance or how it interacts with in-memory caches used for messages.

This is all that I can do for this feature request.

  • Bug 23212 has been marked as a duplicate of this bug. ***

mitchell_neill wrote:

Hi.

Thanks very much for the information. I have found a non hacky way to do this :)
You put the following in LocalSettings.php:

$wgHooks['MonoBookTemplateToolboxEnd'][] = 'wfNavTree';
function wfNavTree() {

global $wgUser, $wgTitle, $wgParser;
if ( is_object( $wgParser ) ) $psr =& $wgParser; else $psr = new Parser;
$opt = ParserOptions::newFromUser( $wgUser );
$nav = new Article( Title::newFromText( 'NavTree', NS_MEDIAWIKI ) );
$out = $psr->parse( $nav->fetchContent( 0, false, false ), $wgTitle, $opt, true, true );
echo '</ul></div>' . $out->getText();
return true;

}

You can then have a normal page called "NavTree" (in this example) with any markup in you like. This includes SMW queries. They then appear in the sidebar.

So I do not think it will be a good use of your valuable time to implement a hack in SMW.

Many thanks
Neill.