Include all child pages

Include all child pages

Scenario

This recipe is helpful if you want a parent page to display an aggregated view of all its children in full. It includes an edit link for each section, which will automatically allow the user to edit the listed page.

The steps will guide you on how to include the content of all children of a page, headed by the page title and a link to edit the page.

Result

 

Recipe

Apps

Linking for Confluence, Reporting for Confluence, Visibility for Confluence

Level

Advanced

Estimated time

30 minutes

Macros

Content Reporter, Report Block, Report Body, Report Info, Text Sort

Suppliers

Content Supplier

Storage format

You can copy and paste this code into the Confluence Source Editor:

<p class="auto-cursor-target"> <br /> </p> <ac:structured-macro ac:macro-id="9250fecf-e394-4533-aefa-737973f26698" ac:name="report-block" ac:schema-version="1"> <ac:parameter ac:name="atlassian-macro-output-type">INLINE</ac:parameter> <ac:rich-text-body> <p class="auto-cursor-target"> <br /> </p> <ac:structured-macro ac:macro-id="a8b07332-112a-468b-aa12-144feaac98f8" ac:name="content-reporter" ac:schema-version="1"> <ac:parameter ac:name="scope">@self &gt; children</ac:parameter> <ac:rich-text-body> <ac:structured-macro ac:macro-id="b645edb4-b2ea-4cde-a68b-11b8ad9df2f7" ac:name="text-sort" ac:schema-version="1"> <ac:parameter ac:name="">content:title</ac:parameter> </ac:structured-macro> </ac:rich-text-body> </ac:structured-macro> <p class="auto-cursor-target"> <br /> </p> <ac:structured-macro ac:macro-id="a7f431c4-4ce8-44c4-b231-01eb6e988daa" ac:name="report-body" ac:schema-version="1"> <ac:rich-text-body> <h2> <ac:structured-macro ac:macro-id="0a1652b8-bff2-4543-a75e-65f24043a7fb" ac:name="report-info" ac:schema-version="1"> <ac:parameter ac:name="link">true</ac:parameter> <ac:parameter ac:name="">content:title</ac:parameter> </ac:structured-macro> </h2> <ac:structured-macro ac:macro-id="7f427c06-26e1-476c-94ff-f48c14e1c190" ac:name="show-if" ac:schema-version="1"> <ac:parameter ac:name="spacePermission">edit</ac:parameter> <ac:parameter ac:name="atlassian-macro-output-type">INLINE</ac:parameter> <ac:rich-text-body> <p> <em>(<ac:structured-macro ac:macro-id="3adaafeb-d74e-4f39-b4ac-d9e2a8908e24" ac:name="link-to" ac:schema-version="1"> <ac:parameter ac:name="linkText">Edit</ac:parameter> <ac:parameter ac:name="">page edit</ac:parameter> </ac:structured-macro>)</em> </p> </ac:rich-text-body> </ac:structured-macro> <p> <ac:structured-macro ac:macro-id="649d8ebc-de47-4937-96ae-8a1dd9adc97a" ac:name="report-info" ac:schema-version="1"> <ac:parameter ac:name="render">richtext</ac:parameter> <ac:parameter ac:name="atlassian-macro-output-type">INLINE</ac:parameter> <ac:parameter ac:name="">content:body</ac:parameter> </ac:structured-macro> </p> </ac:rich-text-body> </ac:structured-macro> <p class="auto-cursor-target"> <br /> </p> </ac:rich-text-body> </ac:structured-macro> <p class="auto-cursor-target"> <br /> </p> <ac:structured-macro ac:macro-id="0a6c97bc-a3ba-4fa7-bb6f-5ad1fd3438ff" ac:name="show-if" ac:schema-version="1"> <ac:parameter ac:name="spacePermission">@self:edit</ac:parameter> <ac:parameter ac:name="atlassian-macro-output-type">INLINE</ac:parameter> <ac:rich-text-body> <p> <ac:structured-macro ac:macro-id="9c7e5a7f-1977-4dca-be02-626118bc427e" ac:name="add-page" ac:schema-version="1"> <ac:parameter ac:name="parent">@self</ac:parameter> <ac:parameter ac:name="linkText">(+) Add a new section</ac:parameter> </ac:structured-macro> </p> </ac:rich-text-body> </ac:structured-macro> <p class="auto-cursor-target"> <br /> </p>

Macro structure

You can recreate the example in the editor view:

Steps

  1. Create a Report Block macro.

  2. Within the Report Block macro, create a Content Reporter macro with the Scope parameter set to @self > children.

  3. Within the Content Reporter, create a Text Sort macro with Key set to content:title.

  4. Within the Report Block macro, under the Content Reporter, create a Report Body macro and select Injected so that we can inject values within the field of Link to Location macro (see step 7).

  5. Within the Report Body macro, create a Report Info with Key set to content:title to display the title of each page returned from the Content Reporter macro.

  6. Within the Report Body macro, under the Report Info, create a Show If macro (from the Visibility app) with the Space Permissions parameter set to @self:edit or edit.
    The Show If macro will only display the contained contents (see step 7) if the current user can edit the current space.

  7. Within the Show If macro, create a Link to Location macro (from the Linking app) with the following parameters:

    • Location: page edit. The link will go to the edit page of each child page from the Content Reporter macro.

    • Content: %content:title%. The percentage (%) sign indicates that the enclosed text is injected, that is, the text within will be replaced by the value of the supplier key content:title.

    • Link Text: Edit

  8. Within the Report Body macro, under the Show If macro, create another Report Info macro with the following parameters:

    • Key: content:body

    • Render: richtext

  9. Under the Report Block macro, create another Show If macro (from the Visibility app) with the Space Permissions parameter set to @self:edit or edit.

  10. Within the Show If macro, create an Add Page macro (from the Linking app) with the following parameters:

    • Parent: @self. The link will create a page under the current page.

    • Link Text: (+) Add a new section