Creating a Scaffold
To create a scaffold, go to the Tools console, then Default Page Scaffolding and create a page. A single page template type is available, the Scaffolding Template.
Go to the Page Properties of the new page and set the Title Text, Description, Target Template, and Target Path, as described above.
Next, you have to define the structure of the page that this scaffold will create. To do this, go into design mode on the scaffold page. A link appears, letting you edit the scaffold in the dialog editor.
Using the dialog editor, you specify the properties that will be created each time a new page is created using this scaffold.
The dialog definition for a scaffold works similarly to that of a component (see Components). However a few important differences apply:
- Component dialog definitions are rendered as normal dialog boxes (as shown in the middle pane of the dialog editor, for example) while scaffold dialog definitions, though they appear as normal dialog boxes in the dialog editor, are rendered on the scaffold page as a scaffold form (as shown in the News scaffold above).
- Component dialogs provide fields for only those values needed to define the content of a single specific component. A scaffold dialog must provide fields for every property in every paragraph of the page to be created.
- If there are component dialogs, the component used to render the specified content is implicit and therefore the
sling:resourceType
property of the paragraph is filled in automatically when the paragraph is created. With a scaffold all the information defining both the content and the assigned component for a given paragraph must be provided by the dialog itself. In scaffold dialogs this information must be provided by using Hidden fields to submit this information on page creation.
A look at the example News scaffold dialog in the dialog editor helps to explain how this works. Go into design mode on the scaffold page and click the dialog editor link.
Now, click the dialog field Dialog > Tab Panel > Text > Text, like this:
The property list for this field appears on the right side of the dialog editor, like this:
Notice the name property for this field. It has the value
./jcr:content/par/text/text
This is the name of the property to which the content of this field will be written when the scaffold is used to create a page. The property is stated as a relative path from the node representing the page to be created. It specifies the property text, below the node text, which is below the node par, which is itself a child of the jcr:content node below the page node.
This defines the location of the content storage for the text that will be inputted into this field. However, we also need to specify two more characteristics for this content:
- The fact that the string being stored here must be interpreted as rich text, and
- which component should be used to render this content to the resulting page.
In a normal component dialog you would not have to specify this information because it is implicit in the fact that the dialog is already bound to a specific component.
To specify these two pieces of information, you use hidden fields. Click the first hidden field Dialog > Tab Panel > Text > Hidden, like this:
The properties of this hidden field are as follows:
The name property of this hidden field is
./jcr:content/par/text/textIsRich
This is a boolean property used to interpret the text string stored at ./jcr:content/par/text/text
.
Because we know that the text should be interpreted as a rich text, let’s specify the value
property of this field as true
.
The second hidden field can be seen by clicking it like this:
The properties of this hidden field are as follows:
The name property of this hidden field is
./jcr:content/par/text/sling:resourceType
And the fixed value specified for this property is
foundation/components/textimage
This specifies that component to be used to render the text content of this paragraph is the Text Image component. Using with the isRichText
boolean specified in the other hidden field, the component can render the actual text string stored at ./jcr:content/par/text/text
in the desired way.