The macro defined below works as intended in it's source page (such as footer) but when the footer is rendered in a page which includes the footer it fails. It appears the script cannot detect the context. Any ideas why this doesn't work.
Source Page:
Target Page
## Macro title: Space Administrators ## Macro has a body: Y or N (N) ## Body processing: Selected body processing option ## Output: Selected output option ## ## Developed by: Andrew Frayling ## Date created: 28/04/2012 ## Installed by: <your name> ## Macro to list all users and groups with the permission to administer the current space. ## @noparams <h3>Space Adminstrators</h3> <p>The following users and groups have permission to administer the <strong>$space.getName()</strong> Space.</p> <h4>Users</h4> <ul> #foreach ($permission in $space.getPermissions()) #if ($permission.isUserPermission() && $permission.getType() == "SETSPACEPERMISSIONS") <li> #usernameLink($permission.getUserName())</li> #end </ul> #end </table> <h4>Groups</h4> #foreach ($permission in $space.getPermissions()) #if ($permission.isGroupPermission() && $permission.getType() == "SETSPACEPERMISSIONS") #set ( $groupString = $permission.getGroup() ) #set ( $groupObject = $userAccessor.getGroup($groupString) ) #set ( $memberList = $userAccessor.getMemberNamesAsList($groupObject) ) <h5>$groupString</h5> <ul> #foreach ($member in $memberList) <li>#usernameLink($member)</li> #end </ul> #end #end
Hmm... by default Theme Press renders the footer content in the context of the footer page (not in the context of the viewing page) so it shouldn't behave any differently, in theory. A couple of questions:
Regardless, I'm assuming that the intent is to display that permissions info for the target page. This won't be the case in the default mode, since the permissions for the space the footer is in (themepressdefault:) will be shown on all pages. You can remedy this by going to the footer page, and opening the Theme Press Designer's "Footer" tab. In the "Handling" section, check "Render in Context" so the footer will render in the target page's context. (Note, this means that rendered footers are no longer cached, so adds a slight amount of extra work for page views.) Give this a shot to see if that remedies the error you're seeing above.
An alternative to checking the Render in Context box is to add the macro to the page layout. Layout contents are merged into the page before rendering, so will always be in the target page's context, plus skips a rendering step so slightly faster (of course the macro itself adds overhead).
Note the performance implications discussed above are typically in the 50-100 milliseconds range, so not user detectable. Only a consideration on systems that are already stressed...
That works! BTW I wrapped the user macro in the Bob Swift Cache macro to workaround the caching issue.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.