2012-03-19 8 views
6

Jaka jest zalecana metoda dostępu do trwałych programów Plone i dlaczego?getToolByName() a inne

  • getToolByName (kontekście "portal_url")

  • bezpośredniego pomiaru: context.portal_url interfejs

  • iTools

itp

+1

I ostatnie metody plone.api - http://readthedocs.org/docs/ploneapi/en/latest/utilities.html#get-tool –

+2

I nadal uważają, że plon e.api trochę experimetanl, a więc nie polecam ... również chciałbym wiedzieć wgląd za odpowiedź –

Odpowiedz

5

Myślę, że odpowiedź jest w kodzie samej getToolByName (http://svn.zope.org/Products.CMFCore/trunk/Products/CMFCore/utils.py?view=markup). Ta metoda działa w ten sposób:

  • jako pierwszą próbę próbuje uzyskać pożądany narzędzie patrząc się na styku z getUtility i umieszczając je w kontekście (który wydaje się być dobrą rzeczą dla mnie)
  • postaci awaryjne próbuje bezpośrednio nabyć narzędzie z kontekstu źródłowego

więc jedyną metodą „by wszystkimi rządzić” wydaje się być: getToolByName Ale, jak @keul powiedział, istnieje również buforowanie zaangażowany, i patrząc tutaj (http://collective-docs.readthedocs.org/en/latest/misc/context.html#itools-interface) jest jasne, że za pomocą interfejsu ITools, kiedy nie kończy się niepowodzeniem z powodu narzędzi, które jeszcze nie implementują tego interfejsu, jest szybszy.

Z powyższych względów, w końcu sugeruję:

  1. iTools (szybciej)
  2. getToolByName (bezpieczniej)

(jako bezpośrednie nabycie jest już wypróbowany przez getToolByName, jeśli zawiedzie, nie będziesz miał więcej fortuny)

+1

Zastanawiam się, dlaczego getToolByName nie wysyła zapytań do ITools. –

+0

ponieważ 'getToolByName' jest metodą w pakiecie CMFCore, podczas gdy' ITool' jest interfejsem w 'plone.app.layout'. Jak wskazuje nazwa domeny, p.a.layout jest pakietem wyższego poziomu i jest specyficzny dla Plona. –

2

Wykorzystanie iTools narzędzia muszą być najlepszą metodą, ponieważ są buforowane. Jednak czasami powodowało to problemy (związane z narzędziem portal_membership, ale nie pamiętam szczegółów), więc w rzadkich przypadkach przechodzę na getToolByName. Ten ostatni to bezpośrednie przejęcie.

Powiązane problemy