Après une migration de Plone 2.5x vers Plone 3.x, comment puis-je résoudre le problème de kss_generic_macros?
Question
L'erreur ci-dessous s'affiche sur plusieurs vues. Ce qui semble identique à ce qui est décrit ici dans ce autre kss_generic_macros ". Cela est dû au fait que le processus de migration 2.5 - 3.0 n'a pas réussi à ajouter la couche plone_kss à une poignée de nos skins personnalisés. Quand je suis entré et que j'ai ajouté plone_kss à la main à ces skins, cela a résolu le problème. "
Cela n’est que très utile. Un exemple de code ou un pointeur réel permettant d’ajouter plone_kss facilitera la résolution du problème.
2009-06-24 15:24:28 ERROR Zope.SiteErrorLog 1245871468.060.103936823493 https://nasascience.on.my.mac/humanator-folder/what-is-six-plus-3/base_view
Traceback (innermost last):
Module ZPublisher.Publish, line 119, in publish
Module ZPublisher.mapply, line 88, in mapply
Module ZPublisher.Publish, line 42, in call_object
Module Shared.DC.Scripts.Bindings, line 313, in __call__
Module Shared.DC.Scripts.Bindings, line 350, in _bindAndExec
Module Products.CMFCore.FSPageTemplate, line 216, in _exec
Module Products.CacheSetup.patch_cmf, line 29, in FSPT_pt_render
Module Products.CacheSetup.patch_utils, line 9, in call_pattern
Module Products.CMFCore.FSPageTemplate, line 155, in pt_render
Module Products.CacheSetup.patch_cmf, line 77, in PT_pt_render
Module Products.CacheSetup.patch_utils, line 9, in call_pattern
Module Products.PageTemplates.PageTemplate, line 98, in pt_render
Module zope.pagetemplate.pagetemplate, line 117, in pt_render
- Warning: Macro expansion failed
- Warning: exceptions.KeyError: 'macro'
Module zope.tal.talinterpreter, line 271, in __call__
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 891, in do_useMacro
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 525, in do_optTag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 957, in do_defineSlot
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 861, in do_defineMacro
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 957, in do_defineSlot
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 525, in do_optTag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 949, in do_defineSlot
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 861, in do_defineMacro
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 891, in do_useMacro
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 536, in do_optTag_tal
Module zope.tal.talinterpreter, line 521, in do_optTag
Module zope.tal.talinterpreter, line 516, in no_tag
Module zope.tal.talinterpreter, line 346, in interpret
Module zope.tal.talinterpreter, line 870, in do_useMacro
Module zope.tales.tales, line 696, in evaluate
- URL: file:/Users/danny/projects/schwa/2.1.0a/trunk/eggs/Products.Archetypes-1.5.10-py2.4.egg/Products/Archetypes/skins/archetypes/base.pt
- Line 22, Column 10
- Expression: <PathExpr standard:u'here/kss_generic_macros/macros/generic_title_view'>
- Names:
{'container': <PloneSite at /msrd>,
'context': <Humanatorquestion at /msrd/humanator-folder/what-is-six-plus-3>,
'default': <object object at 0x1bf528>,
'here': <Humanatorquestion at /msrd/humanator-folder/what-is-six-plus-3>,
'loop': {},
'nothing': None,
'options': {'args': ()},
'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x9ea75f8>,
'request': <HTTPRequest, URL=https://nasascience.on.my.mac/humanator-folder/what-is-six-plus-3/base_view>,
'root': <Application at >,
'template': <FSPageTemplate at /msrd/base_view used for /msrd/humanator-folder/what-is-six-plus-3>,
'traverse_subpath': [],
'user': <PloneUser 'admin'>}
Module zope.tales.expressions, line 217, in __call__
Module Products.PageTemplates.Expressions, line 155, in _eval
Module zope.tales.expressions, line 124, in _eval
Module Products.PageTemplates.Expressions, line 82, in boboAwareZopeTraverse
Module OFS.Traversable, line 301, in restrictedTraverse
Module OFS.Traversable, line 269, in unrestrictedTraverse
- __traceback_info__: ([], 'kss_generic_macros')
AttributeError: kss_generic_macros
La solution
Connectez-vous à ZMI puis accédez à l'outil portal_skins. Cliquez maintenant sur le lien "Propriétés". languette. Le " Plone Default " la peau devrait ressembler à ceci:
custom
cmfeditions_views
CMFEditions
ChangeSet
kupu_plone
kupu
kupu_tests
archetypes
archetypes_kss
mimetypes_icons
plone_kss
ATContentTypes
ATReferenceBrowserWidget
ResourceRegistries
PasswordReset
gruf
plone_ecmascript
plone_wysiwyg
plone_prefs
plone_portlets
plone_templates
plone_styles
plone_form_scripts
plone_scripts
plone_forms
plone_images
plone_content
plone_login
plone_deprecated
plone_3rdParty
cmf_legacy
S'il vous en manque des éléments, vous devrez les ajouter. Cela devrait résoudre le problème.
Autres conseils
Il manque la couche plone_kss
dans vos skins. Accédez à ZMI (via la configuration du site ou en ajoutant / gérant sur votre page d'accueil Plone), recherchez l'outil portal_skins et vérifiez vos couches d'habillage dans l'onglet Propriétés. Assurez-vous que la couche plone_kss
est répertoriée avant le calque personnalisé et vous devriez être prêt à partir.
À l'avenir, vous pouvez utiliser un outil de ligne de commande tel que find pour localiser les méthodes de skin manquantes. J'ai trouvé celui-ci dans un buildout en utilisant la commande suivante:
$ find parts/plone -name kss_generic_macros.*
parts/plone/CMFPlone/skins/plone_kss/kss_generic_macros.pt
Vous pouvez automatiser cette opération à l'aide du script Python suivant:
from Products.CMFCore.utils import getToolByName
layer = 'plone_kss'
skins = getToolByName(context, 'portal_skins')
for name in skins.getSkinSelections():
path = skins.getSkinPath(name)
path = [i.strip() for i in path.split(',')]
if layer not in path:
try:
path.insert(path.index('custom') + 1, layer)
except ValueError:
path.append(layer)
skins.addSkinSelection(name, ','.join(path))
Ce script parcourt toutes les enveloppes de l'outil des enveloppes et insère plone_kss
dans l'un quelconque d'entre elles où il manque. soit juste après la couche custom
, ou à la fin s'il n'y a pas de couche custom
.
Si vous voulez que votre couche custom
soit la première, c'est que cette couche personnalisée (sans jeu de mots) contient des versions personnalisées des ressources de skin. Si vous deviez personnaliser un actif à partir de la couche portal_kss
via ZMI, la version personnalisée serait placée dans la couche personnalisée
. Étant donné que les règles d’apparence de la peau parcourent la pile de calques de haut en bas, vous souhaitez vous assurer que les versions personnalisées du calque personnalisé
se trouvent avant les originaux des calques inférieurs.