2013-03-28 14 views
6

Sto provando a copiare il contenuto degli articoli di notizie su un altro tipo di contenuto che ho scritto. Nel mio script ho l'articolo news e l'articolo project. Il secondo, project, è un tipo di contenuto definito utilizzando Destrezza. Sarebbe meraviglioso se potessi copiare l'immagine e il corpo del testo da news a project nel modo seguente.Migrazione delle notizie di Archetype ai tipi di contenuti di destrezza

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

in cui il testo e l'immagine sono definiti nel project schema come RTF e NamedBlobImage. Non so come siano gli attributi nella notizia. So solo che posso ottenere l'immagine nella notizia usando il metodo getImage() ma assegnarlo al progetto genera un errore durante il rendering del progetto.

Così ho bisogno di alcune indicazioni per risolvere i miei domande fondamentali:

  1. Come faccio a sapere i nomi degli attributi per i tipi di contenuto Archetype. Ad esempio, in questo caso ho bisogno di conoscere il nome dell'attributo per il corpo del testo dell'elemento di notizie.

  2. Come convertire un'immagine allegata a un articolo di notizie in un'immagine associata a un tipo di contenuto di destrezza.

risposta

6
  1. si utilizza il campo dallo schema archetipi per recuperare i valori, preferibilmente i valori grezzi in questo caso. Si passa nell'oggetto quindi chiamando sia .get() o .getRaw():

    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. L'oggetto restituito dalla chiamata ImageField.getRaw() è fondamentalmente un esempio OFS.Image. Puoi chiamare str() su di esso per ottenere i dati grezzi dell'immagine.

    Per impostare l'oggetto immagine, davvero si vuole ottenere il campo di immagine dallo schema e utilizzarlo è ._type attributo come una fabbrica:

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

    tipo qui il contenuto è facoltativo; i tipi NamedImage e NamedBlobImage annusano automaticamente anche il tipo di contenuto.

+0

Dank je vel, Martijn! –