2015-04-28 10 views
5

W instancji Plone mam dwa witryny z warstwami. W jednym z nich mam dedykowany produkt.Jak zadeklarować subskrybenta, który będzie dostępny tylko dla jednej witryny typu plone?

Chcę zadeklarować subskrybenta w tym produkcie dla Products.PluggableAuthService.interfaces.events.IPrincipalCreatedEvent, który będzie uruchamiany tylko w przypadku tej witryny internetowej.

Próbowałem z zcml:condition="installed my.product", ale testuje się tylko wtedy, gdy można go zaimportować lub nie, więc subskrybent jest również dostępny na drugiej stronie z platformą.

Przenoszenie drugiej witryny z warstwami do innej instancji nie jest opcją.

Dzięki.

Odpowiedz

4

W wersji plone masz pojęcie Browserlayer.

Ponieważ można zainstalować przeglądarkę poprzez ogólną konfigurację, można ją aktywować/dezaktywować na jedną stronę.

Zaimplementowałem warunek w subskrybencie, który sprawdza zainstalowany program browserlayer.

Uwaga: Odtwarzacze przeglądarki są stosowane na REQUEST z hakiem przed przechodzeniem.

Przykład funkcja dla abonenta:

from my.package.interfaces import IMyPackageLayer 


def my_function(obj, event): 
    if IMyPackageLayer.providedBy(obj.REQUEST): 
     # Do something 
    else: 
     # Do nothing 

można zarejestrować/stworzyć browserlayer w pakiecie następujący sposób:

  1. Utwórz interfaces.py

    from zope.interface import Interface 
    
    class IMyPackageLayer(Interface): 
        """A layer specific to my package 
        """ 
    
  2. Utwórz browserlayer.xml w swoim profilu pakietu

    <layers> 
        <layer name="my.package" 
         interface="my.package.interfaces.IMyPackageLayer" /> 
    </layers> 
    

Przykład browserlayer pochodzi z plone.browserlayer readme

Powiązane problemy