English
Picture of a opened gift box

Ausgepackt

Kategorien:

Aktualisierung im April 2019

Dieser Beitrag ist etwas veraltet und gilt für Neos 1.0 bis 2.3.

Für Neos 3+ können Sie die Klasse der ContentCollection wie folgt überschreiben:

foo = Neos.Neos:ContentCollection {    
  attributes.class = "my-wrapper-class"
}

Damit dürften die meisten Anwendungsfälle bereits gelöst sein, da man in der Regel eine äußeren Div um eine Gruppe von Elementen hat.

Natürlich können Sie die Implementierungsklasse immer noch überschreiben und Sie müssen nur die folgenden Code-Beispiele an die neuen Namespaces etc. anpassen.

Warum wie was?

Standardmäßig hat das Inhaltssammlungsobjekt von Neos CMS beim Rendern einen umgebendes Element wie <div class="neos-contentcollection">.

Manchmal wollen wir das nicht, weil das resultierende Markup beispielsweise ein Problem für ein Javascript-Plugin eines Drittanbieters sein könnte.

Wir hatten genau dieses Problem in einem unserer Projekte und es konnte nicht durch die Verwendung eines anderen Tags oder das Setzen einer Klasse auf dem Umbruch selbst gelöst werden.

Unsere Lösung

Überschreiben der Standardklasse ContectCollectionImplementation durch Bereitstellung unserer eigenen modifizierten Klasse.

Die Klasse sollte wie im folgenden Ausschnitt aussehen.

Du solltest die Klasse in Ihrem Paket in den Pfad Classes/TypoScript haben.

<?php
namespace VendorName\SiteName\TypoScript;

use TYPO3\TypoScript\TypoScriptObjects\AbstractCollectionImplementation;

class ContentCollectionImplementation extends \Neos\Neos\TypoScript\ContentCollectionImplementation {

	/**
	 * {@inheritdoc}
	 *
	 * @var string
	 */
	public function evaluate() {
		$contentCollectionNode = $this->getContentCollectionNode();
		if ($contentCollectionNode !== NULL &amp;&amp; $contentCollectionNode->getContext()->getWorkspaceName() === 'live') {
			return AbstractCollectionImplementation::evaluate();
		}
		return parent::evaluate();
	}

}

Beim Aufruf von evaluate der übergeordneten Klasse AbstractCollectionImplementation wird nur der Inhalt und nicht der Umbruch dargestellt. Aber wir machen dies nur im Live-Arbeitsbereich, weil wir den Standard-Wrap im Neos-Backend benötigen, damit wir etwas anklickbares zum Bearbeiten haben.

Als nächstes musst du den Prototyp des Standard-TYPO3.Neos:ContentCollection TypoScript-Objekts überschreiben.

# ----------------------------------------
# Override the Neos Content Collection
# To remove the default wrap in frontend
# ----------------------------------------
prototype(TYPO3.Neos:ContentCollection).@class = 'VendorName\\SiteName\\TypoScript\\ContentCollectionImplementation'

Nun sollten alle Inhaltssammlungen ohne den Standard-Umschlag bei der Ansicht im Frontend sein.

Bitte sende mir eine E-Mail oder einen Tweet, wenn du glaubst, dass es eine bessere Lösung gibt oder wenn du Fragen hast.

Die Lösung wurde mit Neos 1.0.x und Neos 1.1.0-beta2 getestet.