2013-03-28 26 views
6

Ich versuche, den Inhalt von Nachrichten in andere Inhaltstypen zu kopieren, die ich geschrieben habe. In meinem Skript habe ich den Artikel und den project Artikel. Die zweite, project, ist ein Inhaltstyp, der mit Dexterity definiert wird. Es wäre wunderbar, wenn ich das Bild und den Nachrichtentext von news zu project in der nächsten Weise kopieren könnte.Migrieren von Archetype-Nachrichten zu Dexterity-Inhaltstypen

project.text = news.text 
project.image = news.image 

Wo Text und Bild im project Schema als RichText- und NamedBlobImage definiert sind. Ich weiß nicht, wie die Attribute in der Nachricht sind. Ich weiß nur, dass ich das Bild in der Nachricht mit der Methode getImage() bekommen kann, aber es dem Projekt zuweisen erzeugt einen Fehler beim Rendern des Projekts.

Also ich brauche einige Hinweise meine grundlegenden Fragen zu lösen:

  1. Wie kann ich wissen, die Attributnamen für Urform Inhaltstypen. In diesem Fall muss ich beispielsweise den Namen des Attributs für den Nachrichtentext von Nachrichten kennen.

  2. Wie kann ich ein Bild, das an eine Nachricht angehängt ist, in ein Bild umwandeln, das an einen Geschicklichkeitsinhalt angehängt ist?

Antwort

6
  1. verwenden Sie das Feld aus der Urbilder Schema Werte abzurufen, vorzugsweise die Rohwerte in diesem Fall. Sie übergeben das Objekt dann entweder .get() oder .getRaw() Aufruf:

    schema = news.Schema() 
    news = schema.getField('text').getRaw(news) 
    imageField = schema.getField('image') 
    image = imageField.getRaw(news) 
    content_type = imageField.getContentType(news) 
    filename = imageField.getFilename(news) 
    
  2. Das zurückgegebene Objekt vom ImageField.getRaw() Aufruf ist im Grunde eine OFS.Image Instanz. Sie können str() aufrufen, um die Rohbilddaten zu erhalten.

    Um gesetzt das Bildobjekt, Sie wollen wirklich das Bildfeld aus dem Schema zu bekommen und es zu verwenden, ist ._type Attribut als Fabrik:

    project.image = IProjectInterface.image._type(str(image), 
        contentType=content_type, filename=filename) 
    

    Der Inhalt gibt hier ist optional; Die Typen NamedImage und NamedBlobImage erkennen den Inhaltstyp automatisch auch.

+0

Dank je vel, Martijn! –