Hi Sergio,

ran across these on the blog title page

<h1 class="heading">}}}*>value:structure|level=2*{{{</h1>
<h1>}}}*>value:structure|level=0|lower=3*{{{</h1>

can someone explain what level and lower are?

A good question - I didn't know the answer myself so did some delving. I'll answer indirectly via the journey I took to find the answer.


From: http://www.piercms.com/doc/syntax
value:structure - Display the current structure - but no help with parameters.

The object that holds value links is PRValueLink.
PRDocument elements are rendered using a visitor pattern [1]. By convention #accept: is the method that takes the visitor:

PRValueLink>>accept: aVisitor
aVisitor visitValueLink: self

so we look for all implementors of #visitValueLink: It looks like there are two possibilities PRReferenceRenderer and the default implementation in PRVisitor.

I set a conditional break-point in PRReferenceRenderer as:

self haltIf: ((aLink parameterAt: 'level' ifAbsent: []) notNil and: [ (aLink  parameterAt: 'lower' ifAbsent: []) notNil ]).

The break-point was hit and stepping through I end up in PRValueLink>>#lookupStructure:do:

which has the helpful comment:

Lookup aStructure and evaluate aBlock if it is found. This performs different kinds of navigation starting from aStructure. If the parameter path is given an absolute or relative lookup is started. The parameter level choses a structure at the specified level in the parent chain, where the root is 1 and direct children of the root 2, etc. 0 is the current structure, -1 the parent of the current structure, etc. Furthermore the levels can be delimited using lower and upper bounds

so:

 *>value:structure|level=0|lower=3*

means use the current structure (level=0) but only if the current structure is 3 or more levels down. Levels are defined as the number of parents e.g. a template displaying a blog entry at /pier/blog/downtobusiness would have 3 levels of parents.

What does it do with the structure? PRValueLink>>formatDescribed:default: is called. If a parameter "display" is defined it will try to find a description for the structure with a matching parameter. The default is #title. In this case there is no "display" parameter so the structure's title is displayed.

If you want to see what parameters could be displayed by say a blog post (magritte 3):

PBPost new magritteDescription children select: [:each | each parameterName notNil] thenCollect: [ :each | each parameterName ]

a SortedCollection('name' 'menu' 'title' 'tags' 'owner' 'group') 

The result of this is that when you display a blog post the title of the blog post is displayed so: http://localhost:8080/pier/blog/downtobusiness

Displays:

Blog
Down to business
I like blogging, so here is my second post.

Where "Down to business" is displayed by *>value:structure|level=0|lower=3*. 

Nick

[1] http://en.wikipedia.org/wiki/Visitor_pattern