Using Other Information about your Site on a Page
At some point or other you'll find you need to use the title of your site in a template; or you'll want your template to deliver something depending on the roles or permissions of your visitor or user. There are two approaches for obtaining this information:
1. Browser Views (recommended)
The first, newer, and recommended approach is to use the methods available in one of three browser views:
- @@plone_portal_state
- @@plone_context_state
- @@plone_tools
These are kept in
- [your egg location]/plone/app/layout/globals OR
- [your egg location]/plone.app.layout-[version]/plone/app/layout/globals
You can find a description of each method in interfaces.py in that directory, but the main methods are outlined below. This excerpt from the main_template in the core Plone Default templates in Plone 4, demonstrates how these views, or their individual methods, are made available to every page:
<html xmlns="http://www.w3.org/1999/xhtml"
...
tal:define="portal_state context/@@plone_portal_state;
context_state context/@@plone_context_state;
...
lang portal_state/language;
...
portal_url portal_state/portal_url;
..."
...
>
Here's an excerpt from the newsitem_view template in the core Plone Default templates illustrating how the @@plone_context_state can be used to establish whether an item is editable or not:
<p tal:define="is_editable context/@@plone_context_state/is_editable" tal:condition="python: not len_text and is_editable" i18n:translate="no_body_text" class="discreet"> This item does not have any body text, click the edit tab to change it. </p>
2. Global Defines (deprecated)
The second approach has been around for a long time, but is being phased out (as it is slower) in Plone 3 and has been pretty much removed in Plone 4. This is to use a set of variables that are available to every single page.
In Plone 3:
These are called by main_template:
<metal:block use-macro="here/global_defines/macros/defines" />
If you want to investigate them further, you'll find them in
- [your products directory]/CMFPlone/browser/ploneview.py.
These variables are used in a number of the default Plone templates in Plone 3 and so they are listed below alongside their equivalent in the available views.
In Plone 4:
The global_defines macro is not used at all and the variables have been entirely replaced in all Plone templates. However, should it be required, the global_defines macro is still available in the core Plone Default skin layers in the plone_deprecated folder. For more information on making a Plone 3 theme compatible with Plone 4, consult the upgrade guide.
Available Views and Methods
About the site
View @@plone_portal_state
| Method | What you get | global defines |
| portal | Portal Object | portal |
| portal_title | The title of your site | portal_title |
| portal_url | The URL of your site | portal_url |
| navigation_root_path | Path of the navigation root | |
| navigation_root_url | The URL of the navigation root | navigation_root_url |
| default_language | The default language of the site | |
| language | The current language | |
| locale | The current locale | |
| is_rtl | Whether the site is being viewed in an RTL language | isRTL |
| member | The current authenticated member | member |
| anonymous | Whether or not the current visitor is anonymous |
isAnon |
| friendly_types | Get a list of types that can be deployed by a user |
About the current context
View @@plone_context_state
|
Method |
what you get |
global defines |
|
current_page_url |
The URL of the current page |
current_page_url |
|
current_base_url |
The actual URL of the current page |
|
|
canonical_object |
The current object itself |
|
|
canonical_object_url |
The URL of the current object |
|
|
view_url |
The URL used for viewing the object |
|
|
view_template_id |
The id of the view template |
|
|
is_view_template |
True if the current URL refers to the standard view |
|
|
object_url |
The URL of the current object |
|
|
object_title |
The 'prettified' title of the current object |
|
|
workflow_state |
The workflow state of the current object |
wf_state |
|
parent |
The direct parent of the current object |
|
|
folder |
The current folder |
|
|
is_folderish |
True if this is a folderish object |
isFolderish |
|
is_structural_folder |
True if this is a structural folder |
isStructuralFolder |
|
is_default_page |
True if this is the default page in a folder |
|
|
is_portal_root |
True if this is the portal root or the default page in the portal root |
|
|
is_editable |
True if the current object is editable |
is_editable |
|
is_locked |
True if the current object is locked |
isLocked |
| actions (Plone 4) |
The filtered actions in the context. You can restrict the actions to just one category. | |
| portlet_assignable (Plone 4) |
Whether or not the context is capable of having locally assigned portlets. |
Tools
view @@plone_tools
|
method |
what you get |
global defines |
|
actions |
The portal actions tool |
atool |
|
catalog |
The portal_catalog tool |
|
|
membership |
The portal_membership tool |
mtool |
|
properties |
The portal_properties tool |
|
|
syndication |
The portal_syndication tool |
syntool |
|
types |
The portal_types tool |
|
|
url |
The portal_url tool |
utool |
|
workflow |
The portal_workflow tool |
wtool |

