MichaelN
I'm new here

PageTemplate per Api anlegen?

Jump to solution

Hallo,

ist es möglich per Api ein neues Template (per XML oder so) anzulegen?

0 Kudos
1 Solution

Accepted Solutions
mbergmann
Crownpeak employee

Hallo,

ja, das geht, hier z.B. mit einem Menüscript.

import de.espirit.firstspirit.access.BaseContext;

import de.espirit.firstspirit.access.store.ElementDeletedException;

import de.espirit.firstspirit.access.store.LockException;

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.templatestore.PageTemplate;

import de.espirit.firstspirit.access.store.templatestore.PageTemplates;

import de.espirit.firstspirit.access.store.templatestore.TemplateStoreRoot;

import de.espirit.firstspirit.agency.StoreAgent;

final StoreAgent storeAgent=context.requireSpecialist(StoreAgent.TYPE);

final TemplateStoreRoot templateStoreRoot= (TemplateStoreRoot) storeAgent.getStore(Store.Type.TEMPLATESTORE);

final String source="<html><head></head><body>$CMS_VALUE(#global.page.body(\"content\"))$</body></html>";

final PageTemplates pageTemplates=templateStoreRoot.getPageTemplates();

PageTemplate pageTemplate=null;

try {

          pageTemplate=pageTemplates.createTemplate("my_template_uid", true);

          pageTemplate.setLock(true);

          //alle nötigen Modifikationen, z.B.

          pageTemplate.createTemplateBody("content");

          pageTemplate.setChannelSource(pageTemplate.getProject().getTemplateSets().get(0),source);

          //...

          pageTemplate.save();

} catch (LockException e) {

          //... error handling

} catch (ElementDeletedException e) {

          //... error handling

} finally {

          if(pageTemplate!=null && pageTemplate.isLocked()){

                    try {

                              pageTemplate.setLock(false);

                    } catch (LockException e) {

                              //... error handling

                    } catch (ElementDeletedException e) {

                              //... error handling

                    }

          }

}

Man muss hier aber natürlich auch noch das Formular definieren (.setGomSource) usw.

Weitere Informationen zur Manipulation des Seitentemplates (wenn es erstmal mit createTemplate(...) angelegt ist) liefert die API. Für andere Templates geht es natürlich analog. Den Code für den Ausgabekanal kann man sich natürlich anders besorgen (z.B. aus einer Datei).

Viele Grüße

Michael

View solution in original post

0 Kudos
1 Reply
mbergmann
Crownpeak employee

Hallo,

ja, das geht, hier z.B. mit einem Menüscript.

import de.espirit.firstspirit.access.BaseContext;

import de.espirit.firstspirit.access.store.ElementDeletedException;

import de.espirit.firstspirit.access.store.LockException;

import de.espirit.firstspirit.access.store.Store;

import de.espirit.firstspirit.access.store.templatestore.PageTemplate;

import de.espirit.firstspirit.access.store.templatestore.PageTemplates;

import de.espirit.firstspirit.access.store.templatestore.TemplateStoreRoot;

import de.espirit.firstspirit.agency.StoreAgent;

final StoreAgent storeAgent=context.requireSpecialist(StoreAgent.TYPE);

final TemplateStoreRoot templateStoreRoot= (TemplateStoreRoot) storeAgent.getStore(Store.Type.TEMPLATESTORE);

final String source="<html><head></head><body>$CMS_VALUE(#global.page.body(\"content\"))$</body></html>";

final PageTemplates pageTemplates=templateStoreRoot.getPageTemplates();

PageTemplate pageTemplate=null;

try {

          pageTemplate=pageTemplates.createTemplate("my_template_uid", true);

          pageTemplate.setLock(true);

          //alle nötigen Modifikationen, z.B.

          pageTemplate.createTemplateBody("content");

          pageTemplate.setChannelSource(pageTemplate.getProject().getTemplateSets().get(0),source);

          //...

          pageTemplate.save();

} catch (LockException e) {

          //... error handling

} catch (ElementDeletedException e) {

          //... error handling

} finally {

          if(pageTemplate!=null && pageTemplate.isLocked()){

                    try {

                              pageTemplate.setLock(false);

                    } catch (LockException e) {

                              //... error handling

                    } catch (ElementDeletedException e) {

                              //... error handling

                    }

          }

}

Man muss hier aber natürlich auch noch das Formular definieren (.setGomSource) usw.

Weitere Informationen zur Manipulation des Seitentemplates (wenn es erstmal mit createTemplate(...) angelegt ist) liefert die API. Für andere Templates geht es natürlich analog. Den Code für den Ausgabekanal kann man sich natürlich anders besorgen (z.B. aus einer Datei).

Viele Grüße

Michael

0 Kudos