jan_bogutzki
I'm new here

Inhaltsbereich UND Inhalt entfernen

Jump to solution

Hallo Community,

ist es möglich einen Inhaltsbereich einer Seite zu entfernen, so dass auch aktuell vorhandene Inhalte an den Seiten verworfen werden? Aktuell bekomme ich die Meldung, dass der Inhalt "retained" wird. Dieser wird mir auch weiterhin angezeigt und der Bereich verschwindet nicht.

Wir würden hier gern unseren Redakteuren die Arbeit ersparen, dass alle alten Inhalte von Hand entfernt werden müssen.

beste Grüße

Jan Bogutzki

0 Kudos
1 Solution

Accepted Solutions

Hallo Jan,

erstelle einfach ein neues Skript im Projekt (Typ "Menü") mit folgendem Inhalt:

import de.espirit.firstspirit.agency.StoreElementAgent;

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

import de.espirit.firstspirit.access.store.IDProvider.UidType;

import de.espirit.firstspirit.access.ReferenceEntry;

import de.espirit.firstspirit.access.store.pagestore.Body;

import de.espirit.firstspirit.access.store.pagestore.Page;

// Der Referenzname deines Templates

final String TEMPLATE_UID = "pt_page";

// Der Referenzname des Inhaltbereichs

final String BODY_UID = "content";

StoreElementAgent agent = context.requireSpecialist(StoreElementAgent.TYPE);

IDProvider template = agent.loadStoreElement(TEMPLATE_UID, UidType.TEMPLATESTORE, false);

for (ReferenceEntry ref :template.getIncomingReferences()){

     if (ref.isType(ReferenceEntry.PAGE_STORE_REFERENCE)) {

          // Hole die Page über den Agent, da man sie sonst aus dem Releasestore erhält.

          Page page = (Page) agent.loadStoreElement(ref.getReferencedElement().getUid(), UidType.PAGESTORE, false);

          Body body = page.getBodyByName(BODY_UID);

          if (body!=null) {

               // Seite bearbeiten, Bereich löschen, Speichern, freigeben und Bearbeitung beenden.

               page.setLock(true, true);

               body.delete();

               page.save("Removed body " + BODY_UID);

               page.release();

               page.setLock(false, true);

          }

     }

}

Ich habe das gerade auf dem Smartphone runtergetippt - also kann es gut sein, dass hier und da ein Schreibfehler o. ä . ist oder die Packagenames nicht komplett stimmen.

Bei TEMPLATE_UID trägst du die UID der Seitenvorlage ein, bei BODY_UID den Referenznamen des Inhaltbereichs.

In Zeile 27-31 wird die Seite bearbeitet und im Anschluss gespeichert und freigegeben. Bedenke hierbei bitte, dass dein User dann als letzter Bearbeiter drin steht und die Seite zudem einfach so freigegeben wird. An dieser Stelle könntest du ggf. noch eine Prüfung einfügen, ob die Seite aktuell bereits freigegeben ist. Zudem fange ich keine Validierungsfehler ab - ist die Seite also nciht valide, so kann sie auch nicht gespeichert werden und das Skript schlägt fehl. Wenn du noch Hilfe brauchst sage Bescheid.

Viele Grüße

Felix

View solution in original post

0 Kudos
6 Replies
felix_reinhold
Returning Responder

Hallo Jan,

meinst du mit "inhaltsbereich aus der Seite entfernen" ihn aus dem seitentemplate zu entfernen? Wenn ja, so musst du nach dem Löschen noch rechtsklick auf die Vorlage machen und "Übernahme von Vorlageänderungen" wählen, damit die Änderung auch auf die Seiten angewendet wird. (ich glaube der Punkt heißt so - bin gerade unterwegs und habe kein FS zur Hand Smiley Wink 

Gruß

Felix

0 Kudos

Hallo Felix,

ja, genau das ist gemeint. Das ist der Teil den ich bereits gemacht habe. Bei der Anwendung kommen dann die Meldungen, dass die Inhaltsbereiche bei Seite mit Content darin erhalten bleiben (retained). Sprich die Bereiche sind bei allen Seiten weg, die keinen Inhalt gepflegt haben, bei denen mit Inhalt leider nicht.

Gruß

Jan

0 Kudos
felix_reinhold
Returning Responder

Oha, ich wäre wirklich davon ausgegangen, dass durch die Übernahme der Vorlagenänderungen diese Inhalte spätestens nach einer erneuten Freigabe der Seite verschwinden. Dann würde ich davon ausgehen, dass man diese leider doch per Skript löschen muss.Wenn du da Hilfe brauchst sage Bescheid - das geht ziemlich fix.

Gruß

Felix

0 Kudos

Hallo Felix,

dann sage ich mal "Bescheid". 🙂

Gruß

Jan

0 Kudos

Hallo Jan,

erstelle einfach ein neues Skript im Projekt (Typ "Menü") mit folgendem Inhalt:

import de.espirit.firstspirit.agency.StoreElementAgent;

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

import de.espirit.firstspirit.access.store.IDProvider.UidType;

import de.espirit.firstspirit.access.ReferenceEntry;

import de.espirit.firstspirit.access.store.pagestore.Body;

import de.espirit.firstspirit.access.store.pagestore.Page;

// Der Referenzname deines Templates

final String TEMPLATE_UID = "pt_page";

// Der Referenzname des Inhaltbereichs

final String BODY_UID = "content";

StoreElementAgent agent = context.requireSpecialist(StoreElementAgent.TYPE);

IDProvider template = agent.loadStoreElement(TEMPLATE_UID, UidType.TEMPLATESTORE, false);

for (ReferenceEntry ref :template.getIncomingReferences()){

     if (ref.isType(ReferenceEntry.PAGE_STORE_REFERENCE)) {

          // Hole die Page über den Agent, da man sie sonst aus dem Releasestore erhält.

          Page page = (Page) agent.loadStoreElement(ref.getReferencedElement().getUid(), UidType.PAGESTORE, false);

          Body body = page.getBodyByName(BODY_UID);

          if (body!=null) {

               // Seite bearbeiten, Bereich löschen, Speichern, freigeben und Bearbeitung beenden.

               page.setLock(true, true);

               body.delete();

               page.save("Removed body " + BODY_UID);

               page.release();

               page.setLock(false, true);

          }

     }

}

Ich habe das gerade auf dem Smartphone runtergetippt - also kann es gut sein, dass hier und da ein Schreibfehler o. ä . ist oder die Packagenames nicht komplett stimmen.

Bei TEMPLATE_UID trägst du die UID der Seitenvorlage ein, bei BODY_UID den Referenznamen des Inhaltbereichs.

In Zeile 27-31 wird die Seite bearbeitet und im Anschluss gespeichert und freigegeben. Bedenke hierbei bitte, dass dein User dann als letzter Bearbeiter drin steht und die Seite zudem einfach so freigegeben wird. An dieser Stelle könntest du ggf. noch eine Prüfung einfügen, ob die Seite aktuell bereits freigegeben ist. Zudem fange ich keine Validierungsfehler ab - ist die Seite also nciht valide, so kann sie auch nicht gespeichert werden und das Skript schlägt fehl. Wenn du noch Hilfe brauchst sage Bescheid.

Viele Grüße

Felix

0 Kudos

Hallo Felix,

danke für die schnelle Hilfe. In unserem DEV-System hat das alles schon super geklappt.

Gruß

Jan

0 Kudos