Grok Framework
Grok 是否該留在 Plone Core 裡,結論是不要,目的是減少技術相依性。
grok framework on developer documentation grok rules five.grok Core Grok Concepts
Plone 4.3 環境下 static 目錄不再自動被掃描
Dexterity
grok (five.grok, grokcore.view, grokcore.security, grokcore.component, grokcore.viewlet, grokcore.site, grokcore.annotation, martian?, plone.directives.form or plone.directives.dexterity) relations (from z3c.relationfield.schema import RelationList, RelationChoice)
Optional Extras: [grok] [relations]
sc.social.like: plone.directives.form is superfluos, all the directives were merged into plone.autoform and plone.supermodel. This works also in Plone 4.3 latest. IIRC the directives are deprecated anyway and are BBB imported in plone.directives.form.
http://www.martinaspeli.net/articles/dexterity-meet-grok
http://www.martinaspeli.net/articles/grok-and-martian-rocks
install_requires=[ ..., 'plone.app.dexterity [grok]', ...,
Learning By Examples
Dependency
Plone 4.3 開始昇級並移除相依關係 Plone 5 文件移除 Grok 範例: collective.upload
- setup.py 移除 five.grok,configure.zcml 移除 <grok:grok>
- 移除 from five import grok
- 手動註冊 static media folder
- 透過 configure.zcml 註冊 View 和 Form
- 透過 <browser:page> 來移除 grok.templatedir() 並註冊 View Class
移除相依關係範例: <grok.grok package="."> plone.app.standardtiles collective.twitter.portlets plone.directives.form collective.history collective.z3cform.datagridfield collective.fingerpointing collective.polls grok.context grok.name grok.implements grok.Adapter plone.app.stagingbehavior collective.dexteritytextindexer grok_component #1 #2 collective.z3cform.datagridfield
setup.py
my/package/configure.zcml
my/package/interfaces.py
https://github.com/collective/collective.contact.plonegroup/pull/3
plone.directives.form 相依於 five.grok 和 grokcore.* 模組,已經不鼓勵使用,建議改用 plone.supermodel 和 plone.autoform,移除範例: collective.cover。
grok.name() 在 Plone 4.3 預設已不支援。
@grok.provider() 可用 @provider() 取代
from five import grok @grok.provider(IContextSourceBinder) from zope.component import provider @provider(IContextSourceBinder)
grok.implements() 等同於 implements() 或 @implementer()
from five import grok class ImportantStuff(object): grok.implements(IImportant) from zope.interface import implementer @implementer(IImportant) class ImportantStuff(object):
plone.directive.form Removal: collective.dexteritytextindexer
collective.cover 額外安裝了 grokcore.view grokcore.viewlet grokcore.site grokcore.security grokcore.component grokcore.annotation