ATCTContent создан с неверным идентификатором и названием - PullRequest
1 голос
/ 27 марта 2011

Я сделал дополнение с несколькими ATCTContent, все они созданы с paster addcontent contenttype.Все, кроме одного, GearContent работают как положено.Только когда я создаю экземпляры GearContent, они получают имена, такие как gear, gear-1 и т. Д., Игнорируя заголовок.В представлении по умолчанию тег H1 всегда имеет значение «Gear», но заголовок под ним является правильным.

Попытка изменить идентификаторы и заголовки в представлении содержимого папки ничего не дает.Там нет сообщения об ошибке.

То же самое с каталогом.Метаданные GearContent Title - это «Gear» для всех экземпляров.Он работает для всех других типов.

GearContent можно добавлять только внутри GearFolder.Другое содержимое имеет аналогичные ограничения и работает нормально.Я использую plone 4.0.4.

Что можно сделать, чтобы новые экземпляры получили правильный заголовок?

Ниже content / gearcontent.py:

 """Definition of the Gear Content content type
 """

 from zope.interface import implements

 from Products.Archetypes import atapi
 from Products.ATContentTypes.content import base
 from Products.ATContentTypes.content import schemata

 # -*- Message Factory Imported Here -*-
 from levity7.gears import gearsMessageFactory as _

 from levity7.gears.interfaces import IGearContent
 from levity7.gears.config import PROJECTNAME

 GearContentSchema = schemata.ATContentTypeSchema.copy() + atapi.Schema((

     # -*- Your Archetypes field definitions here ... -*-

     atapi.StringField(
         'title',
         storage=atapi.AnnotationStorage(),
         widget=atapi.StringWidget(
             label=_(u"Title"),
             description=_(u"Name for this content."),
         ),
         required=True,
     ),


     atapi.ReferenceField(
         'activities',
         storage=atapi.AnnotationStorage(),
         widget=atapi.ReferenceWidget(
             label=_(u"Adventure Activities"),
             description=_(u"Select all activities that apply to this content."),
         ),
         required=True,
         relationship='gearcontent_activities',
         allowed_types=('Gear Activity'), # specify portal type names here ('Example Type',)
         multiValued=True,
     ),


     atapi.ReferenceField(
         'category',
         storage=atapi.AnnotationStorage(),
         widget=atapi.ReferenceWidget(
             label=_(u"Category"),
             description=_(u"Select a category for this content."),
         ),
         required=True,
         relationship='gearcontent_category',
         allowed_types=('Gear Category'), # specify portal type names here ('Example Type',)
         multiValued=False,
     ),


     atapi.ImageField(
         'image',
         storage=atapi.AnnotationStorage(),
         widget=atapi.ImageWidget(
             label=_(u"Image"),
             description=_(u"A picture of this content."),
         ),
         validators=('isNonEmptyFile'),
     ),


     atapi.StringField(
         'imageLink',
         storage=atapi.AnnotationStorage(),
         widget=atapi.StringWidget(
             label=_(u"Image Link"),
             description=_(u"An URL to the image of this content."),
         ),
         validators=('isURL'),
     ),


     atapi.TextField(
         'description',
         storage=atapi.AnnotationStorage(),
         widget=atapi.RichWidget(
             label=_(u"Description"),
             description=_(u"Description for the content."),
         ),
         required=True,
     ),


     atapi.StringField(
         'reviewLink',
         storage=atapi.AnnotationStorage(),
         widget=atapi.StringWidget(
             label=_(u"Review Link"),
             description=_(u"Link to Review page."),
         ),
         validators=('isURL'),
     ),


     atapi.StringField(
         'diyLink',
         storage=atapi.AnnotationStorage(),
         widget=atapi.StringWidget(
             label=_(u"DIY Link"),
             description=_(u"Link to DIY page."),
         ),
         validators=('isURL'),
     ),


     atapi.TextField(
         'commentary',
         storage=atapi.AnnotationStorage(),
         widget=atapi.TextAreaWidget(
             label=_(u"commentary"),
             description=_(u"commentarys for the content. These will not be displayed."),
         ),
     ),


     atapi.TextField(
         'purchaseHtml',
         storage=atapi.AnnotationStorage(),
         widget=atapi.TextAreaWidget(
             label=_(u"Purchase HTML Code"),
             description=_(u"HTML used to display or add this item to the Cart."),
         ),
     ),


     atapi.IntegerField(
         'score',
         storage=atapi.AnnotationStorage(),
         widget=atapi.IntegerWidget(
             label=_(u"Life This Value"),
             description=_(u"Initial value of 'Life This'"),
         ),
         default=_(u"0"),
         validators=('isInt'),
     ),


 ))

 # Set storage on fields copied from ATContentTypeSchema, making sure
 # they work well with the python bridge properties.

 GearContentSchema['title'].storage = atapi.AnnotationStorage()
 GearContentSchema['description'].storage = atapi.AnnotationStorage()

 schemata.finalizeATCTSchema(GearContentSchema, moveDiscussion=False)


 class GearContent(base.ATCTContent):
     """Gear Content"""
     implements(IGearContent)

     meta_type = "GearContent"
     schema = GearContentSchema

     title = atapi.ATFieldProperty('title')
     description = atapi.ATFieldProperty('description')

     # -*- Your ATSchema to Python Property Bridges Here ... -*-
     title = atapi.ATFieldProperty('title')

     activities = atapi.ATReferenceFieldProperty('activities')

     category = atapi.ATReferenceFieldProperty('category')

     image = atapi.ATFieldProperty('image')

     imageLink = atapi.ATFieldProperty('imageLink')

     description = atapi.ATFieldProperty('description')

     reviewLink = atapi.ATFieldProperty('reviewLink')

     diyLink = atapi.ATFieldProperty('diyLink')

     commentary = atapi.ATFieldProperty('commentary')

     purchaseHtml = atapi.ATFieldProperty('purchaseHtml')

     score = atapi.ATFieldProperty('score')


 atapi.registerType(GearContent, PROJECTNAME)

Спасибо.

Ответы [ 2 ]

5 голосов
/ 27 марта 2011

Удалите ваше поле "заголовок". Это уже определено в ATContentTypeSchema. Вы эффективно его реализуете, но без базовой функциональности, такой как автоматическое присвоение имен объектам контента. Ваш маскирует тот, который определен в архетипах.

1 голос
/ 27 марта 2011

Проблема была в поле category. Кажется, это зарезервированное имя. (в приведенном выше тексте появляется слово «категория»; это была опечатка).

...