{builder-show} Macro
Description
The builder-show macro is used to show content in specific contexts, modes and other filters...
Usage
{builder-show:mode=view|context=page|label=meetings|metadata=mykey:myvalue}
stuff to show
{builder-show}
Parameters
Note:
Some parameters, marked "Theme Only", can only be used within Builder theme panels, ie. you cannot use them within pages, etc.
The "Ver" column shows which version of Theme Builder the parameter became available in.
| Property |
Required |
Default |
Notes |
Theme Panels Only |
Ver |
| decorator |
 |
all decorators |
Only show the content when a specific decorator us being used, eg. "printable", etc. |
 |
|
| action |
 |
all actions |
Only show the content for specific action(s), eg. "viewpage". NB: The ".action" part of the action name should not be included. |
|
3.0 |
| context |
 |
all contexts |
Only show the content for specific context(s), eg. "page", "global", etc. |
 |
|
| mode |
 |
all modes |
Only show the content for specific modes, eg. "view", "edit", etc. |
 |
|
| space |
 |
n/a |
Only show the content if a specific space (referred to by the Space Key) exists. |
|
|
| page |
 |
n/a |
Only show the content if a specific page (referred to by the page title) exists. |
|
|
| title |
 |
n/a |
Only show the content if the current page has a specific title |
|
|
| label |
 |
n/a |
Only show the content if the the current location (page, news, etc) has the specified label(s), eg. "my:favourite", "meetings", etc. |
|
|
| spaceLabels |
 |
n/a |
Only show the content if the the current space has the specified label(s), eg. "meetings", etc. |
|
3.0 |
| teamLabels |
 |
n/a |
Only show the content if the the current space has the specified team label(s), eg. "sales,marketing", etc. |
|
3.0 |
| metadata |
 |
n/a |
Metadata associated with the current location in the format: "myKey1:myValue1", etc. |
|
3.0 |
| user |
 |
All users |
A comma separated list of usernames. Use @anonymous for anonymous users only. |
|
3.0 |
| group |
 |
All groups |
A comma separated list of user groups. Use @anonymous for anonymous users only. |
|
3.0 |
| permission |
 |
Any permission |
A comma separated list of permissions:
- view - user has view permission
- comment - user can add comments
- createpage - user can create pages
- createnews - user can create news
- edit - user can edit pages or news
- remove - user can remove (delete) pages, news or comments
- attach - user can attach files
- export - user can export pages or the space
- createspace - user can create spaces
- spaceadmin - user is a space admin
- siteadmin - user is a site admin
|
|
3.0 |
| recurse |
 |
false |
Should parent pages (if applicable) be checked for title, labels and metadata?
- false - only check the current page (default)
- true - also check parent pages, eg. does the current page or any of it's parents have the specified label, etc.
|
|
3.0 |
While none of the parameters are mandatory, you must specify at least one of them for this macro to work.
You can specify multiple values for any parameter, for example:
{builder-show:mode=view,edit|context=page,blogpost}
stuff to show
{builder-show}
In the example above, "stuff to show" would only be shown if the content is being shown in "view" or "edit" mode and is also either a "page" or "blogpost".
Contexts, Modes and Decorators
You can determine the context and mode for any page by viewing the page source using your browser. A HTML comment output at the top of all pages shows the context and mode for each page.
View example...
If you view the HTML source of this web page you'll see the following:
You can specify multiple contexts and modes by separating them with commas as shown in the usage example earlier. For the macro content to show, all contexts and modes specified must match.
Examples
Display content on news items
To display some content only on news items (blogposts), you must use the macro within a panel in the Builder theme:
{builder-show:context=news}
{menulink:news}Back to News Summary{menulink}
{builder-show}
Display content on pages and news items
To show something in multiple contexts, simply separate them with commas:
{builder-show:context=page,blogpost}
something to show
{builder-show}
Display content in edit mode
When you change the view of something, eg. look at the normal view or editable view, the "mode" changes and you can take advantage of this to customise your theme depending on which mode is currently active. For example, if you only want to show something when it's being edited (eg. editing a page or news item), use the following:
{builder-show:mode=edit}
something to show
{builder-show}
You can show something in multiple modes by separating them with commas:
{builder-show:mode=edit,view}
something to show
{builder-show}
Specific modes within specific contexts
If you only want to show something in view mode within the context of a page, use the following:
{builder-show:mode=view|context=page}
something to show
{builder-show}
When more than one parameter of the macro is specified, both parameters must match so in the example above the user must be looking at a page context in view mode.
You can specify multiple modes and contexts, for example:
{builder-show:mode=view,edit|context=page,blogpost}
something to show
{builder-show}
In the example above, the content would be shown if the user is looking at either a "page" or a "blogpost" (news item) that must also be in either the "view" or "edit" mode.
Display content based on labels
You can display content if the current location has one or more of the specified labels:
{builder-show:label=my:favourite,meetings}
This stuff is either in my favourites list or something to do with meetings!
{builder-show}
Beware! Most people assume that only pages and news articles can have labels, but this is not the case. When viewing space-level pages that aren't normal content pages or news articles, for example when viewing the space labels or even space admin, this macro uses any defined space labels and even team labels.
Displaying content if a space exists
You can show content only if a space exists by specifying it's space key as follows:
{builder-show:space=ACCOUNTS}
Here's some info about the accounts space, but you'll only see this
if you have privileges to access the accounts space.
{builder-show}
As you can see, this is ideal for customising content based on which spaces a user has privilegs to access.
Display content based on existence of a page
You can display content only if a specific page exists:
{builder-show:page=My Page}
{include:My Page}
{builder-show}
In the example shown above, we only include the page if it exists. This hides the nasty error message that the [USERGUIDE:include macro] generates if that page does not exist. While it might seem a little strange to only show things if a specific page exists (especially considering you know the title of that page), it's extremely useful in scenarios where you are using templates and only want to show content or links if a specific page exists within the current space.
Display content if the page has a parent
You can show content only if the current page has a parent page using the following notation:
{builder-show:page=@parent}
This page has a parent page!
{builder-show}
This is useful because you often want to include additional navigation on pages that have a parent page, for example you might want to include the scrollbar macro to show a linear navigation bar.
Pages which don't have a parent are:
- The space homepage
- Orphan pages (pages within a space that don't have a parent)
Display content for specific page titles
You can display content if the current page has a specific title, for example:
{builder-show:title=My Homepage}
Hi all, this must be my home page because it's title is "My Homepage"!
{builder-show}
This can come in handy if you are using templates to generate content and want to show something based on the page title.
Another use is if users are constantly using a page title that causes problems, for exmaple they might call a page "Meetings" and you want them to call it "yyyy/mm/dd - Meeting with x, y, z") - as such you could add this to the Title panel within theme configuration:
{builder-show:title=Meeting}
You muppet! Use a more descriptive page title that includes
the date (and time if appropriate), type of meeting and who
was involved, etc.
{builder-show}
OK, you might not want to be that harsh in explaining to users that "Meeting" isn't a great page title and that they should use something more descriptive, but you get the general idea.
Another use is to add labels to pages based on their title:
{builder-show:title=Home}{add-label:home-page}{builder-show}
Simply add that to the Header panel in theme config and any page called "Home" will get a label of "home-page" added to it thanks to the add-label macro. This is useful because it allows you to search all home pages within the site!
Displaying content based on metadata
Enter a list of metadata keys or metadata key:value pairs, if the metadata is found then the item will be shown/hidden. Ths check is recursable.
CSS Customisation
Not applicable for this macro.
Hints and Tips
You can use this macro, and the associated builder-hide macro to customise navigation and panel content depending on what the user is looking at.
When using either the mode, context or decorator parameters, remember that they only work if used within a panel of the Builder theme. If you put them inside a normal page, etc., they won't work. Even if you use the move-to macro to move something from a page in to a panel, it still won't work - the mode, context and decorator settings will only work if the macro is actually in the panel notation in the theme cofiguration settings.
If you need to show or hide content based on the privileges within a space, use the [USERGUIDE:show-if] or [USERGUIDE:hide-if] macros that be found in the Visibility Plugin.
Frequently Asked Questions
None at present.
See Also
I want to display a vertical, unordered list of labels (as in, not a bulleted or numbered list) in a left navigation panel that is automatically updated as new labels are added. I only want to display the labels that are set at the space level from the Space Administration page in Confluence. (For a visual example, see Gmail.)
How do I accomplish this? Thanks.
Use the [page-info macro].
I want to display content, but only when I am in a page in mode 'attachments'.... how can I do this?
Thanks
Go to the attachments screen and view the HTML source - you should see a HTML comment at the top of the page which states the current context and mode. You can then use the builder-show macro with the desired mode or context to conditionally show content on that screen.
I set the vertical alignment of both my Pagetree2 (on the Left Sidebar), Title and Content items to TOP. However, when I expand my pagetree2 navigation, it forces my content to go down the page, leaving a white space between the Title and Content areas that grows longer the more I collapse my pagetree2 left navigation. How can I fix it?
I am using Theme Builder 3.0 b.19.
thanks,
Doods
Is it possible to only show something to the original page author?
Updated by Guy Fraser
Jul 21, 2008 19:00
Alain recently added some user/group features to the builder-show/hide macros so in theory, yes, but I'll need to check with him when he's back online. I imagine it would need a parameter like user=@author which should hopefully be fairly easy to add in for the final release.
Alternatively, you might be able to use the [show-to macro] (I've not checked if it has a similar meta user) but I'm aware that Cutomware's visibility plugin is a tad broken in recent versions of Confluence.
Hurrah! This got added (user=@author, page author, and user=@owner, space owner).
Is it possible to change the operator to OR instead of using AND?
Take this example, for instance:
{builder-show:mode=view,edit|context=page,blogpost} stuff to show {builder-show}Is there a way to say:
"Show 'stuff to show' if the mode is view or edit OR if the context is a page or a blogpost."
Not that you'd want to do that, but I do want to hide sidebars based on some page titles using that new feature Alain added, and I want to hide them as well based on what .action the user is doing. And it doesn't seem like I can specify all that in the same blurb of code without it hiding them based on all of the conditions...
The difficult part is defining the notation tha creates the rules ... I think it would be likely that we would need to make a fairly large change to the notation so that it is no-longer separate params separated by | signs, but a single param which defines the rules to be used internally, eg:
{builder-show:mode:view,mode:edit,context:page,context:blogpost}...{builder-show}alternately:
{builder-show:mode:view,mode:edit+context:page,context:blogpost}...{builder-show}might mean mode=edit/view AND context=page/blogpost
This idea is by no means mature, and any/all input would be useful.
Hi Alain. I like the colon separated pairs, but I'm not sure that the syntax in your second example makes it clear enough that the two sides of the plus are effectively grouped separately, visually the + sign looks like it belongs to just the "context:page" pair.
It seems that the combination
does not work.
user=xx or group=yyy works when not used together.
bug, feature or user error?
How do I show/hide the entire Right Side Bar (and its contents) based on a group? I would like to show it to a group called Editors and hide it from a group called Viewers.
Thanks
This requires 3.0.2, but the following should work
{builder-show:group=mygroup,myothergroup}{builder-sidebar:left|collapse=true}{builder-show}There is an error at the labels documentation. The example reads
{builder-show:labels=my:favourite,meetings} This stuff is either in my favourites list or something to do with meetings! {builder-show}There is no labels parameter, this should be label!
Thanks for that .. i have updated the content.
When in doubt about parameters be sure to check the notation guide, since this is maintained by the developer rather than the person who writes up the documentation, which means that it is your most authoritative source as to what is available and what isnt.