Erstellung eines eigenen CTs: Erstellun des Schemas

  • Hallo Zusammen,

    bin gerade dabei, einen neuen CT zu erstellen, kann aber offensichtlich keine 2 Textfelder einfügen.
    Werde hier mal den Code einfügen:
    """ This file define the attributes and the widgeds a.s.o. for the newCT.
    Some of the imports are not needed in this basic setup, but they show
    who these fields and widgeds to be import.
    """
    import DateTime
    from Products.validation import V_REQUIRED
    from Products.Archetypes.public import AnnotationStorage
    from Products.Archetypes.Marshall import PrimaryFieldMarshaller
    from Products.ATContentTypes.configuration import zconf
    from Products.ATContentTypes.content.schemata import finalizeATCTSchema
    from Products.ATContentTypes.content.schemata import ATContentTypeSchema

    from Products.Archetypes.public import BaseSchema, Schema
    from Products.Archetypes.public import StringField, FileField, DateTimeField
    from Products.Archetypes.public import ImageField, TextField, LinesField
    from Products.Archetypes.public import StringWidget, FileWidget, CalendarWidget
    from Products.Archetypes.public import ImageWidget, RichWidget, LinesWidget
    from Products.Archetypes.public import SelectionWidget

    from Products.doktorandenbericht.config import *

    # Definition of the newCTSchemata
    #---------------------------------
    doktorandenberichtSchema = ATContentTypeSchema.copy() + Schema((
    TextField('achievedresults',
    required=True,
    searchable=True,
    primary=True,
    storage = AnnotationStorage(migrate=True),
    validators = ('isTidyHtmlWithCleanup',),
    default_content_type = zconf.ATDocument.default_content_type,
    default_output_type = 'text/x-html-safe',
    allowable_content_types = zconf.ATDocument.allowed_content_types,
    widget = RichWidget(
    label = "Welche wichtigen Ergebnisse wurden erzielt?",
    label_msgid = "label_protocol",
    rows = 25,
    i18n_domain = "doktorandenbericht",
    )
    ),
    TextField('achievedresults',
    required=True,
    searchable=True,
    primary=True,
    storage = AnnotationStorage(migrate=True),
    validators = ('isTidyHtmlWithCleanup',),
    default_content_type = zconf.ATDocument.default_content_type,
    default_output_type = 'text/x-html-safe',
    allowable_content_types = zconf.ATDocument.allowed_content_types,
    widget = RichWidget(
    label = "Welche wichtigen Ergebnisse wurden erzielt?",
    label_msgid = "label_protocol",
    rows = 25,
    i18n_domain = "doktorandenbericht",
    )
    ),
    ),marshall=PrimaryFieldMarshaller(),
    )

    finalizeATCTSchema(doktorandenberichtSchema)

    Es sollen im Ganzen noch mehr Textfelder werden, die alle mit Kupu editierbar sein sollen. Wenn man das so ausprobiert, bekommt im im skin nur das Titel- und Beschreibungsfeld sowie ein Textfeld. Ist es prinzipiell überhaupt möglich?
    Torty sollte den Code ganz gut kennen ;)

    Viele Grüße
    Bibi

  • Habe das Problem soeben gelöst. Wens interessiert:
    Da es nur primäres Textfeld gibt, muss das zweite und alle weiteren statt primary "secondary" sein.

    Viele Grüße und schönen Abend
    Bibi

  • Oder andersrum: nur dem 1 primären Feld das primary=True verpassen. Dann passt es auch und ist nach Standard. :)

    Torty

    "Carpe Diem" powered by positiv Feelings

  • Habe nun das Schema erstellt und es wird auch in plone als Oberfläche angezeigt. Wenn man nun allerdings seine Felder mit Inhalt füllen möchte, kommt ein attribute error. Da das Portal auch nur einsprechig sein kann, finde ich es schwierig, immer Übersetzungen mit einzufügen. Gibt es eine Möglichkeit, das zu umgehen. Oder andersrum gefragt: Muss ich nun nur meinen view anpassen, oder müssen die i18n-Dateien ebenfalls geändert werden?

    Grüße
    bibi

  • Wenn du einen CT erstellen willst, der nicht mehrsprachig ist, so musst du:
    * das i18n-Verz. weglassen
    * im Schema auf 18n-domain verzichten
    * in deinen Templates auf die Verwendung aller i18n-Tags verzichten
    * alle sonst zu übersetzenden Texte direkt im Template angeben

    Hier ein Bsp.:

    Code
    statt:
    <div ...
      i18n:translate="my_id_for_this_text">...</div>
    
    
    nutze:
    <div ...>mein Text der hier her soll</div>

    PS:
    Ich gehe davon aus, dass du dir meinen CT-Prototyp as Grundlage genommen hast. Das ist ok nur hatte ich ihn vorsetzlich multilingual gehalten, damit der Interessierte erkennt wie er das anstellt. Und multilinguale CT's sind wirklich auch "zukunftssicherer". :)

    Torty

    "Carpe Diem" powered by positiv Feelings

  • Super,
    vielen Dank. Bin ja schon froh, wenns überhaupt läuft ;)
    Werde mich dann jetzt nochmal ransetzen.
    Möchte es einfach so einfach wie möglich halten.
    Ist es möglich, statt "titel" z.b. datum einzusetzen?
    Muss das dann im allgemeinen Schema des ATCT geändert werden?

    Danke vielmals
    Bibi

  • Zitat von Anonymous

    Ist es möglich, statt "titel" z.b. datum einzusetzen?
    Muss das dann im allgemeinen Schema des ATCT geändert werden?


    Ähmmm...wie meinst du das? Das Attribut title darf für ATCT's nicht fehlen. Belass es also drin und füge dir ggf. ein zusätzliches Datumsfeld hinzu.
    Mal schauen wie ich das machen würde...

    Ist sicher nicht direkt lauffähig, aber google hilft dir da erstmal weiter. :)
    Du kannst dir auch in /Products/ATContentTypes/content die Dateoi event.py mal näher anschauen.

    Torty

    "Carpe Diem" powered by positiv Feelings

  • Hallo Torty,

    ist es gar nicht möglich, die Überschriften der beiden Felder "title" und "description" im eigenen Contenttype zu ändern?
    Idee ist nämlich, dass die Leute ihre Berichte nach Datum ordnen. Sie sollen ja nur wissen, dass sie als Titel sozusagen das Datum eintippen sollen.
    Klar könnte ich auch ein Datumsfeld machen, aber dann weiß ja niemand, welchen Titel er wählen soll.

    Viele Grüße
    Bibi

  • Oh - man könnte es natürlich aus dem Schema wieder löschen aber da weiß ich nicht welche Nebenwirkungen es dann zeigt. Anderenfalls kannst du statt dem ATCTSchema auch nur das Schema benutzen um deine Felder anzulegen.
    In meinem Bsp. hatte ich wohl vom ATCTSchema abgeleitet und dann mit + Schema() weitergemacht. Hier könnte man auch nur das Schema() verwenden. Dann hat er keinen Title mehr, aber hat er dann auch eine ID? Hmmm...bin ich im Moment überfragt.

    Schau mal ob dich dies hier weiter bringt: Archetype Development Guide

    Torty

    "Carpe Diem" powered by positiv Feelings

  • Ok, das hatte ich befürchtet... ;)
    Werde mich heut abend ransetzen und sehn, was geht.

    Grüßle
    Bibi

  • Hallo,

    habe die folgende tolle Seite gefunden, die das Problem eigentlich beheben sollte, allerdings funktionieren bei mir die Lösungen nicht. Habe versucht das Schema abzuändern, aber es klappt nicht. Der Contentype erscheint dann nicht mehr in der Liste der Artikeltypen.
    Falls jemand eine Idee hat, wäre ich dankbar.
    http://plone.org/products/arche…earchterm=title

    Bibi

  • Bei Zope/Plone-Problemen bitte immer unter error.log im Plonesite-Root den entspr. Traceback posten. Sonst kann man nicht helfen. ;)

    Torty

    "Carpe Diem" powered by positiv Feelings

  • Alles klar, das problem ist gelöst:
    Einfach nach dem Schema folgende Befehle eingeben:

    berichtSchema['title'].widget.label = "Datum"
    berichtSchema['title'].widget.label_msgid='label_date'
    berichtSchema['title'].widget.description = "Bitte in der Form dd.mm.yy eingeben."
    berichtSchema['title'].widget.description_msgid = 'help_notdisplayed_text'
    berichtSchema['description'].required = 0
    berichtSchema['description'].widget.visible = {'edit': 'invisible', 'view': 'invisible'}


    Damit bekomm ich nicht nur meinen Titel verändert, sondern auch gleich noch die Beschreibung unsichtbar.

    Grüßle
    Bibi