src/pyams_default_theme/features/header/skin/__init__.py
changeset 550 d7797830305b
parent 530 094d9b11bc83
equal deleted inserted replaced
549:3a1b042768da 550:d7797830305b
    23 from pyams_content.features.renderer.interfaces import HIDDEN_RENDERER_NAME
    23 from pyams_content.features.renderer.interfaces import HIDDEN_RENDERER_NAME
    24 from pyams_content.root import ISiteRoot
    24 from pyams_content.root import ISiteRoot
    25 from pyams_default_theme.features.header import SimpleHeaderRendererSettings
    25 from pyams_default_theme.features.header import SimpleHeaderRendererSettings
    26 from pyams_default_theme.features.header.interfaces import ISimpleHeaderRendererSettings, \
    26 from pyams_default_theme.features.header.interfaces import ISimpleHeaderRendererSettings, \
    27     PYAMS_HEADER_MAIN_CLASS_KEY, PYAMS_HEADER_NAVIGATION_INNER_CLASS_KEY, \
    27     PYAMS_HEADER_MAIN_CLASS_KEY, PYAMS_HEADER_NAVIGATION_INNER_CLASS_KEY, \
    28     PYAMS_HEADER_NAVIGATION_MAIN_CLASS_KEY, PYAMS_HEADER_TITLE_INNER_CLASS_KEY, \
    28     PYAMS_HEADER_NAVIGATION_MAIN_CLASS_KEY, PYAMS_HEADER_TEMPLATE_NAME_KEY, \
       
    29     PYAMS_HEADER_TITLE_INNER_CLASS_KEY, \
    29     PYAMS_HEADER_TITLE_MAIN_CLASS_KEY
    30     PYAMS_HEADER_TITLE_MAIN_CLASS_KEY
    30 from pyams_default_theme.features.header.skin.interfaces import IHeaderClass, \
    31 from pyams_default_theme.features.header.skin.interfaces import IHeaderClass, \
    31     IInnerNavigationClass, IInnerTitleClass, INavigationClass, ITitleClass
    32     IInnerNavigationClass, IInnerTitleClass, INavigationClass, ITitleClass
    32 from pyams_default_theme.features.renderer import BaseContentRenderer
    33 from pyams_default_theme.features.renderer import BaseContentRenderer
    33 from pyams_portal.interfaces import PREVIEW_MODE
    34 from pyams_portal.interfaces import PREVIEW_MODE
    34 from pyams_portal.portlet import PORTLETS_CACHE_KEY, PORTLETS_CACHE_NAME, PORTLETS_CACHE_REGION
    35 from pyams_portal.portlet import PORTLETS_CACHE_KEY, PORTLETS_CACHE_NAME, PORTLETS_CACHE_REGION
    35 from pyams_sequence.interfaces import IInternalReference
    36 from pyams_sequence.interfaces import IInternalReference
    36 from pyams_sequence.reference import get_reference_target
    37 from pyams_sequence.reference import get_reference_target
    37 from pyams_skin.layer import IPyAMSLayer
    38 from pyams_skin.layer import IPyAMSLayer
    38 from pyams_template.template import template_config
    39 from pyams_template.template import get_view_template, template_config
    39 from pyams_utils.adapter import adapter_config
    40 from pyams_utils.adapter import adapter_config
    40 from pyams_utils.interfaces import ICacheKeyValue
    41 from pyams_utils.interfaces import ICacheKeyValue
    41 from pyams_utils.traversing import get_parent
    42 from pyams_utils.traversing import get_parent
    42 
    43 
    43 
    44 
   131 
   132 
   132     @property
   133     @property
   133     def search_target(self):
   134     def search_target(self):
   134         return get_reference_target(self.settings.search_target, request=self.request)
   135         return get_reference_target(self.settings.search_target, request=self.request)
   135 
   136 
       
   137     @property
       
   138     def template_name(self):
       
   139         return self.request.annotations.get(PYAMS_HEADER_TEMPLATE_NAME_KEY, '')
       
   140 
       
   141     @property
       
   142     def template(self):
       
   143         template = get_view_template(name=self.template_name)
       
   144         return template(self)
       
   145 
   136     def render(self):
   146     def render(self):
   137         request = self.request
   147         request = self.request
   138         context = request.context
   148         context = request.context
   139         # root condition applies only when not displaying a shared content
   149         # root condition applies only when not displaying a shared content
   140         if ISiteRoot.providedBy(context) and \
   150         if ISiteRoot.providedBy(context) and \
   141                 not self.settings.can_apply_on_root:
   151                 not self.settings.can_apply_on_root:
   142             return ''
   152             return ''
   143         # don't use cache in preview mode
   153         # don't use cache in preview mode
   144         preview_mode = request.annotations.get(PREVIEW_MODE, False)
   154         preview_mode = request.annotations.get(PREVIEW_MODE, False)
   145         if preview_mode:
   155         if preview_mode:
   146             return super(BaseHeaderRenderer, self).render()
   156             return self.template
   147         else:
   157         else:
   148             portlets_cache = get_cache(PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME)
   158             portlets_cache = get_cache(PORTLETS_CACHE_REGION, PORTLETS_CACHE_NAME)
   149             cache_key = self.cache_key
   159             cache_key = self.cache_key
   150             if context is not self.context:  # display shared content
   160             if context is not self.context:  # display shared content
   151                 cache_key = '{0}::shared'.format(cache_key)
   161                 cache_key = '{0}::shared'.format(cache_key)
   152             try:
   162             try:
   153                 result = portlets_cache.get_value(cache_key)
   163                 result = portlets_cache.get_value(cache_key)
   154                 logger.debug("Retrieving header content from cache key {0}".format(cache_key))
   164                 logger.debug("Retrieving header content from cache key {0}".format(cache_key))
   155             except KeyError:
   165             except KeyError:
   156                 result = super(BaseHeaderRenderer, self).render()
   166                 result = self.template
   157                 portlets_cache.set_value(cache_key, result)
   167                 portlets_cache.set_value(cache_key, result)
   158                 logger.debug("Storing header content to cache key {0}".format(cache_key))
   168                 logger.debug("Storing header content to cache key {0}".format(cache_key))
   159             return result
   169             return result
   160 
   170 
   161 
   171