Display a subtree in a different tab
This configuration was tested with a Hippo ECM 2.10.00 pre-release and is expected to work with 2.09.01 and later.
The documents tree can contain all kinds of folders. Some of these folders may contain regular content, like news or event documents. Other folders, may contain documents that help your site look better, like labels or banners. Let's call the latter "construction".
Normal authors and editors don't need to maintain the contents of the construction folder but they may need the files inside for picking a value from a list so you can't deny access. If you separate the view of construction, most of the time they won't see its contents in their documents tree.
Configuring the construction folder
In the CND, add the construction folder for your namespace
[demonamespace:constructionfolder] > hippostd:folder orderable
Then create a folder "construction" of type "demonamespace:constructionfolder" inside documents.
Add the tree view
Add into
/hippo:configuration/hippo:frontend/cms/cms-tree-views/
<?xml version="1.0" encoding="UTF-8"?> <sv:node xmlns:sv="http://www.jcp.org/jcr/sv/1.0" sv:name="construction"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:plugincluster</sv:value> </sv:property> <sv:property sv:name="frontend:properties" sv:type="String"> <sv:value>use.width.from.classname</sv:value> <sv:value>bind.to.layout.unit</sv:value> <sv:value>register.context.menu</sv:value> </sv:property> <sv:property sv:name="frontend:references" sv:type="String"> <sv:value>wicket.model</sv:value> <sv:value>browser.id</sv:value> <sv:value>editor.id</sv:value> </sv:property> <sv:property sv:name="frontend:services" sv:type="String"> <sv:value>wicket.id</sv:value> </sv:property> <sv:node sv:name="addfolderPlugin"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:plugin</sv:value> </sv:property> <sv:property sv:name="browser.id" sv:type="String"> <sv:value>${browser.id}</sv:value> </sv:property> <sv:property sv:name="editor.id" sv:type="String"> <sv:value>${editor.id}</sv:value> </sv:property> <sv:property sv:name="option.location" sv:type="String"> <sv:value>/content/documents/construction</sv:value> </sv:property> <sv:property sv:name="plugin.class" sv:type="String"> <sv:value>org.hippoecm.frontend.plugins.standardworkflow.FolderShortcutPlugin</sv:value> </sv:property> <sv:property sv:name="wicket.id" sv:type="String"> <sv:value>${cluster.id}.addfolder</sv:value> </sv:property> <sv:property sv:name="wicket.variant" sv:type="String"> <sv:value>addfolder</sv:value> </sv:property> <sv:property sv:name="workflow.categories" sv:type="String"> <sv:value>threepane</sv:value> </sv:property> </sv:node> <sv:node sv:name="constructionBrowser"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:plugin</sv:value> </sv:property> <sv:property sv:name="bind.to.layout.unit" sv:type="String"> <sv:value>${bind.to.layout.unit}</sv:value> </sv:property> <sv:property sv:name="extension.addfolder" sv:type="String"> <sv:value>${cluster.id}.addfolder</sv:value> </sv:property> <sv:property sv:name="path" sv:type="String"> <sv:value>/content/documents/construction</sv:value> </sv:property> <sv:property sv:name="plugin.class" sv:type="String"> <sv:value>org.hippoecm.frontend.plugins.cms.browse.tree.FolderTreePlugin</sv:value> </sv:property> <sv:property sv:name="register.context.menu" sv:type="String"> <sv:value>${register.context.menu}</sv:value> </sv:property> <sv:property sv:name="rootless" sv:type="String"> <sv:value>true</sv:value> </sv:property> <sv:property sv:name="use.width.from.classname" sv:type="String"> <sv:value>${use.width.from.classname}</sv:value> </sv:property> <sv:property sv:name="wicket.id" sv:type="String"> <sv:value>${wicket.id}</sv:value> </sv:property> <sv:property sv:name="wicket.model" sv:type="String"> <sv:value>${wicket.model}</sv:value> </sv:property> <sv:node sv:name="module.workflow"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:plugin</sv:value> </sv:property> <sv:property sv:name="browser.id" sv:type="String"> <sv:value>${browser.id}</sv:value> </sv:property> <sv:property sv:name="editor.id" sv:type="String"> <sv:value>${editor.id}</sv:value> </sv:property> <sv:property sv:name="plugin.class" sv:type="String"> <sv:value>org.hippoecm.addon.workflow.ContextWorkflowPlugin</sv:value> </sv:property> <sv:property sv:name="workflow.categories" sv:type="String"> <sv:value>threepane</sv:value> </sv:property> </sv:node> <sv:node sv:name="filters"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:pluginconfig</sv:value> </sv:property> <sv:node sv:name="showFolderType"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:pluginconfig</sv:value> </sv:property> <sv:property sv:name="child" sv:type="String"> <sv:value>hippostd:folder</sv:value> </sv:property> <sv:property sv:name="display" sv:type="Boolean"> <sv:value>true</sv:value> </sv:property> </sv:node> <sv:node sv:name="showDirectoryType"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:pluginconfig</sv:value> </sv:property> <sv:property sv:name="child" sv:type="String"> <sv:value>hippostd:directory</sv:value> </sv:property> <sv:property sv:name="display" sv:type="Boolean"> <sv:value>true</sv:value> </sv:property> </sv:node> <sv:node sv:name="hideHandleType"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:pluginconfig</sv:value> </sv:property> <sv:property sv:name="child" sv:type="String"> <sv:value>hippo:handle</sv:value> </sv:property> <sv:property sv:name="display" sv:type="Boolean"> <sv:value>false</sv:value> </sv:property> </sv:node> <sv:node sv:name="hideResultsetType"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:pluginconfig</sv:value> </sv:property> <sv:property sv:name="child" sv:type="String"> <sv:value>hippo:facetresult</sv:value> </sv:property> <sv:property sv:name="display" sv:type="Boolean"> <sv:value>false</sv:value> </sv:property> </sv:node> </sv:node> </sv:node> </sv:node>
Add into
/hippo:configuration/hippo:frontend/cms/cms-browser/
<?xml version="1.0" encoding="UTF-8"?> <sv:node xmlns:sv="http://www.jcp.org/jcr/sv/1.0" sv:name="constructionTreeLoader"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:plugin</sv:value> </sv:property> <sv:property sv:name="cluster.name" sv:type="String"> <sv:value>cms-tree-views/construction</sv:value> </sv:property> <sv:property sv:name="plugin.class" sv:type="String"> <sv:value>org.hippoecm.frontend.plugin.loader.PluginClusterLoader</sv:value> </sv:property> <sv:node sv:name="cluster.config"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:pluginconfig</sv:value> </sv:property> <sv:property sv:name="bind.to.layout.unit" sv:type="Boolean"> <sv:value>true</sv:value> </sv:property> <sv:property sv:name="browser.id" sv:type="String"> <sv:value>service.browse</sv:value> </sv:property> <sv:property sv:name="editor.id" sv:type="String"> <sv:value>service.edit</sv:value> </sv:property> <sv:property sv:name="register.context.menu" sv:type="Boolean"> <sv:value>true</sv:value> </sv:property> <sv:property sv:name="wicket.id" sv:type="String"> <sv:value>service.browse.tree.construction</sv:value> </sv:property> <sv:property sv:name="wicket.model" sv:type="String"> <sv:value>model.browse.folder</sv:value> </sv:property> </sv:node> </sv:node>
Add translations into
/hippo:configuration/hippo:frontend/cms/cms-static/configTranslator/hippostd:translations/
<?xml version="1.0" encoding="UTF-8"?> <sv:node xmlns:sv="http://www.jcp.org/jcr/sv/1.0" sv:name="section-construction"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>nt:base</sv:value> </sv:property> <sv:property sv:name="jcr:mixinTypes" sv:type="Name"> <sv:value>hippo:translated</sv:value> </sv:property> <sv:node sv:name="hippo:translation"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>hippo:translation</sv:value> </sv:property> <sv:property sv:name="hippo:language" sv:type="String"> <sv:value>en</sv:value> </sv:property> <sv:property sv:name="hippo:message" sv:type="String"> <sv:value>Construction</sv:value> </sv:property> </sv:node> <sv:node sv:name="hippo:translation"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>hippo:translation</sv:value> </sv:property> <sv:property sv:name="hippo:language" sv:type="String"> <sv:value>nl</sv:value> </sv:property> <sv:property sv:name="hippo:message" sv:type="String"> <sv:value>Constructie</sv:value> </sv:property> </sv:node> </sv:node>
Replace
/hippo:configuration/hippo:frontend/cms/cms-browser/browserPlugin
with
<sv:node xmlns:sv="http://www.jcp.org/jcr/sv/1.0" sv:name="browserPlugin"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:plugin</sv:value> </sv:property> <sv:property sv:name="extension.configuration" sv:type="String"> <sv:value>service.browse.tree.configuration</sv:value> </sv:property> <sv:property sv:name="extension.construction" sv:type="String"> <sv:value>service.browse.tree.construction</sv:value> </sv:property> <sv:property sv:name="extension.content" sv:type="String"> <sv:value>service.browse.tree.content</sv:value> </sv:property> <sv:property sv:name="extension.files" sv:type="String"> <sv:value>service.browse.tree.files</sv:value> </sv:property> <sv:property sv:name="extension.images" sv:type="String"> <sv:value>service.browse.tree.images</sv:value> </sv:property> <sv:property sv:name="headers" sv:type="String"> <sv:value>section-documents</sv:value> <sv:value>section-construction</sv:value> <sv:value>section-images</sv:value> <sv:value>section-files</sv:value> <sv:value>section-configuration</sv:value> </sv:property> <sv:property sv:name="plugin.class" sv:type="String"> <sv:value>org.hippoecm.frontend.plugins.cms.browse.tree.SectionTreePlugin</sv:value> </sv:property> <sv:property sv:name="translator.id" sv:type="String"> <sv:value>service.translator.config</sv:value> </sv:property> <sv:property sv:name="wicket.extensions" sv:type="String"> <sv:value>extension.content</sv:value> <sv:value>extension.construction</sv:value> <sv:value>extension.images</sv:value> <sv:value>extension.files</sv:value> <sv:value>extension.configuration</sv:value> </sv:property> <sv:property sv:name="wicket.id" sv:type="String"> <sv:value>service.browse.tree</sv:value> </sv:property> <sv:property sv:name="wicket.model" sv:type="String"> <sv:value>model.browse.folder</sv:value> </sv:property> </sv:node>
Change the folders and documents trees
Hide construction in the documents tab.
Add into
/hippo:configuration/hippo:frontend/cms/cms-tree-views/documents/documentsBrowser/filters/
and
/hippo:configuration/hippo:frontend/cms/cms-folder-views/hippostd:directory/root/filters/
the following configuration
<?xml version="1.0" encoding="UTF-8"?> <sv:node xmlns:sv="http://www.jcp.org/jcr/sv/1.0" sv:name="hideConstructionFolderType"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:pluginconfig</sv:value> </sv:property> <sv:property sv:name="child" sv:type="String"> <sv:value>demonamespace:constructionfolder</sv:value> </sv:property> <sv:property sv:name="display" sv:type="Boolean"> <sv:value>false</sv:value> </sv:property> </sv:node>
Display regular folders
Replace
/hippo:configuration/hippo:frontend/cms/cms-tree-views/documents/documentsBrowser/filters/showFolderType
and
/hippo:configuration/hippo:frontend/cms/cms-folder-views/hippostd:directory/root/filters/showFolderType
with
<?xml version="1.0" encoding="UTF-8"?> <sv:node xmlns:sv="http://www.jcp.org/jcr/sv/1.0" sv:name="showFolderType"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:pluginconfig</sv:value> </sv:property> <sv:property sv:name="child" sv:type="String"> <sv:value>hippostd:folder</sv:value> </sv:property> <sv:property sv:name="display" sv:type="Boolean"> <sv:value>true</sv:value> </sv:property> </sv:node>
Configure the pickers
Replace
/hippo:configuration/hippo:frontend/cms/cms-pickers/documents/dialogBrowserPlugin
with
<?xml version="1.0" encoding="UTF-8"?> <sv:node sv:name="dialogBrowserPlugin" xmlns:sv="http://www.jcp.org/jcr/sv/1.0"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:plugin</sv:value> </sv:property> <sv:property sv:name="extension.construction" sv:type="String"> <sv:value>service.dialog.tree.construction</sv:value> </sv:property> <sv:property sv:name="extension.content" sv:type="String"> <sv:value>service.dialog.tree.content</sv:value> </sv:property> <sv:property sv:name="extension.files" sv:type="String"> <sv:value>service.dialog.tree.files</sv:value> </sv:property> <sv:property sv:name="extension.images" sv:type="String"> <sv:value>service.dialog.tree.images</sv:value> </sv:property> <sv:property sv:name="headers" sv:type="String"> <sv:value>section-documents</sv:value> <sv:value>section-construction</sv:value> <sv:value>section-images</sv:value> <sv:value>section-files</sv:value> </sv:property> <sv:property sv:name="plugin.class" sv:type="String"> <sv:value>org.hippoecm.frontend.plugins.cms.browse.tree.SectionTreePlugin</sv:value> </sv:property> <sv:property sv:name="translator.id" sv:type="String"> <sv:value>service.translator.config</sv:value> </sv:property> <sv:property sv:name="wicket.extensions" sv:type="String"> <sv:value>extension.content</sv:value> <sv:value>extension.construction</sv:value> <sv:value>extension.images</sv:value> <sv:value>extension.files</sv:value> </sv:property> <sv:property sv:name="wicket.id" sv:type="String"> <sv:value>service.dialog.shortcuts</sv:value> </sv:property> <sv:property sv:name="wicket.model" sv:type="String"> <sv:value>${cluster.id}.model.folder</sv:value> </sv:property> <sv:node sv:name="yui.config.accordion"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:pluginconfig</sv:value> </sv:property> <sv:property sv:name="ancestor.classname" sv:type="String"> <sv:value>hippo-picker</sv:value> </sv:property> <sv:property sv:name="register.render.listener" sv:type="Boolean"> <sv:value>false</sv:value> </sv:property> <sv:property sv:name="register.resize.listener" sv:type="Boolean"> <sv:value>false</sv:value> </sv:property> </sv:node> </sv:node>
Add construction to the breadcrumb
Replace
/hippo:configuration/hippo:frontend/cms/cms-pickers/documents/dialogBreadcrumbPlugin
with
<?xml version="1.0" encoding="UTF-8"?> <sv:node sv:name="dialogBreadcrumbPlugin" xmlns:sv="http://www.jcp.org/jcr/sv/1.0"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:plugin</sv:value> </sv:property> <sv:property sv:name="model.folder" sv:type="String"> <sv:value>${cluster.id}.model.folder</sv:value> </sv:property> <sv:property sv:name="plugin.class" sv:type="String"> <sv:value>org.hippoecm.frontend.plugins.standards.browse.BreadcrumbPlugin</sv:value> </sv:property> <sv:property sv:name="root.paths" sv:type="String"> <sv:value>/content/documents</sv:value> <sv:value>/content/documents/construction</sv:value> <sv:value>/content/gallery</sv:value> <sv:value>/content/assets</sv:value> </sv:property> <sv:property sv:name="translator.id" sv:type="String"> <sv:value>service.translator.config</sv:value> </sv:property> <sv:property sv:name="wicket.id" sv:type="String"> <sv:value>service.dialog.breadcrumb</sv:value> </sv:property> <sv:property sv:name="wicket.model" sv:type="String"> <sv:value>${cluster.id}.model.folder</sv:value> </sv:property> </sv:node>
Load the construction tree
Add into
/hippo:configuration/hippo:frontend/cms/cms-pickers/documents
<?xml version="1.0" encoding="UTF-8"?> <sv:node sv:name="constructionTreeLoader" xmlns:sv="http://www.jcp.org/jcr/sv/1.0"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:plugin</sv:value> </sv:property> <sv:property sv:name="cluster.name" sv:type="String"> <sv:value>cms-tree-views/construction</sv:value> </sv:property> <sv:property sv:name="plugin.class" sv:type="String"> <sv:value>org.hippoecm.frontend.plugin.loader.PluginClusterLoader</sv:value> </sv:property> <sv:node sv:name="cluster.config"> <sv:property sv:name="jcr:primaryType" sv:type="Name"> <sv:value>frontend:pluginconfig</sv:value> </sv:property> <sv:property sv:name="bind.to.layout.unit" sv:type="Boolean"> <sv:value>false</sv:value> </sv:property> <sv:property sv:name="register.context.menu" sv:type="Boolean"> <sv:value>false</sv:value> </sv:property> <sv:property sv:name="use.width.from.classname" sv:type="String"> <sv:value>hippo-picker-tree</sv:value> </sv:property> <sv:property sv:name="wicket.id" sv:type="String"> <sv:value>service.dialog.tree.construction</sv:value> </sv:property> <sv:property sv:name="wicket.model" sv:type="String"> <sv:value>${cluster.id}.model.folder</sv:value> </sv:property> </sv:node> </sv:node>