2017-10-02 8 views
1

J'ai une petite extension Plone qui contient un type de contenu simple basé sur les archétypes (le même que je n'avais pas pu ajouter TTW, voir my previous question); la configuration du projet est on GitHub.Mon type de contenu basé sur les archétypes ne peut pas être visualisé

Après avoir ajouté un objet, je reçois un KeyError: 'view' lors de l'exécution du fournisseur de contenu plone.abovecontenttitle:

{'container': <MyType at /plone/test-for-new-types/a-mytype-object>, 
'context': <MyType at /plone/test-for-new-types/a-mytype-object>, 
'default': <object object at 0x7fc4f8ebe520>, 
'here': <MyType at /plone/test-for-new-types/a-mytype-object>, 
'loop': {}, 
'nothing': None, 
'options': {'args':()}, 
'repeat': <Products.PageTemplates.Expressions.SafeMapping object at 0x7fc4c9484db8>, 
'request': <HTTPRequest, URL=https://my.testing.site/test-for-new-types/a-mytype-object/mytype_view>, 
'root': <Application at >, 
'template': <FSPageTemplate at /plone/test-for-new-types/a-mytype-object/mytype_view>, 
'traverse_subpath': [], 
'user': <PloneUser 'me'>} 

Il devrait être reproductible facilement avec ma petite extension installée en mode develop.

Edit: J'ai remarqué que, dans la vue "produit installé" (/portal_quickinstaller/MyCompany.MyProduct/manage_installationInfo), mon produit a Status: installed et Types MyType, mais Content Type Registry entries est vide (None).

+1

Non reproductible, était d'obtenir "AttributeError: @@ transformer", découlant de votre point de vue-modèle. –

+0

Désolé, merci d'avoir essayé. J'ai enlevé la partie 'transform'. – Tobias

+0

@Ida: J'ai changé les propriétés 'default_' et' immediate_view' en 'base_view'; maintenant mon type peut être vu de cette façon. Je reçois toujours le KeyError '' view'' quand j'utilise le 'mytype_view' (toujours existant), ne comprenant pas la raison. Peut-être est-ce lié aux fournisseurs de contenu? (J'espère que ceci est reproductible.) – Tobias

Répondre

2

Les fournisseurs de contenu appellent des adaptateurs qui s'attendent à ce qu'un argument view soit présent [1] et les modèles basés sur la peau ne le fournissent pas, contrairement aux modèles basés sur le navigateur. Pour résoudre ce problème, nous pouvons utiliser le @@plone global -var [2] comme il est fait dans main_template, parce @@plone est une instance de BrowserView, il fournit la vue argument:

tal:define="view context/@@plone;" 

Ce qui me fait penser, la adaptateurs que les fournisseurs de contenu utilisent, devraient considérer le cas qu'aucune vue n'est disponible.

Si vous voulez avoir l'habitude structure du site et juste personnaliser la partie de contenu, vous pouvez également remplir votre modèle dans la fente de contenu, puis tout de main_template est héritée, aussi le point de vue-var:

<metal:main metal:use-macro="context/main_template/macros/master"> 
    <metal:content fill-slot="content"> 
    Hey, a working content-provider: 
    <div tal:replace="structure provider:plone.abovecontenttitle" /> 
    Oh, so much more much, here... 
    </metal:content> 
</metal:main> 

Ce que je recommanderais, car alors vous n'avez pas besoin de vous soucier de tout faire correctement dans la partie en-tête. Par exemple. l'utilisation de "raiseAnon" ne devrait pas être nécessaire, car l'état de workflow de l'élément prend en charge cela et des choses comme la langue actuelle seront évaluées, etc.

Si vous voulez seulement personnaliser la partie du corps du contenu -item, change content à content-core, les fournisseurs de contenu habituels seront rendus alors de toute façon, vous n'avez pas besoin de les insérer, si vous les voulez dans l'ordre habituel.

[1] https://docs.plone.org/4/en/old-reference-manuals/portlets/rendered.html

[2] https://github.com/plone/Products.CMFPlone/blob/master/Products/CMFPlone/browser/ploneview.py

+0

Merci beaucoup! J'ai poussé la solution minimale possible au repo GibHub. – Tobias