Wenn ich neue Blog-Beiträge für diese Website schreibe, lege ich sie in einem Arbeitsbereich „Entwurf“ an. Im Laufe der Jahre habe ich leider auch eine ganze Reihe von Beiträgen erstellt, die nie das Licht der Welt erblickten, weil ich sie nie fertigstellen konnte. Das Problem ist, dass ich nicht unterscheiden kann, welche Blogeinträge nie veröffentlicht wurden, solange ich mich in diesem Arbeitsbereich „Entwurf“ befinde. Um das zu überprüfen, müsste ich das Backend zweimal öffnen, um zu vergleichen, oder zwischen den Arbeitsbereichen hin- und herspringen. Beides macht keinen Spaß. Deshalb stelle ich eine bessere Alternative vor, die ich mir vor einigen Tagen ausgedacht habe und die Sie im obigen Artikelbild sehen können.
Der Eel Helfer
Der erste Schritt besteht darin, eine neue Aal-Hilfsfunktion in Ihrem (Site-)Paket mit dem folgenden Code zu erstellen. Stellen Sie sicher, dass Sie den Namespace in Zeile 5 an Ihren eigenen anpassen.
<?php
declare(strict_types=1);
namespace My\Site\Eel;
use Neos\ContentRepository\Domain\Model\NodeInterface;
use Neos\Eel\ProtectedContextAwareInterface;
use Neos\Neos\Domain\Service\ContentContextFactory;
class NodeHelper implements ProtectedContextAwareInterface
{
public function __construct(protected ContentContextFactory $contextFactory)
{
}
/**
* Returns true if the given node exists (even if hidden or removed) in its base workspace,
* or its workspace has no base workspace.
*/
public function existsInBaseWorkspace(NodeInterface $node): bool
{
$workspace = $node->getWorkspace();
// If the node is in a personal workspace, we need to check its base workspace instead
if ($workspace->isPersonalWorkspace()) {
$workspace = $workspace->getBaseWorkspace();
}
$baseWorkspace = $workspace->getBaseWorkspace();
if (!$baseWorkspace) {
return true;
}
$baseContext = $this->contextFactory->create([
'workspaceName' => $baseWorkspace->getName(),
'dimensions' => $node->getContext()->getDimensions(),
'targetDimensions' => $node->getContext()->getTargetDimensions(),
'invisibleContentShown' => true,
'removedContentShown' => true,
'inaccessibleContentShown' => true,
]);
return $baseContext->getNodeByIdentifier($node->getIdentifier()) !== null;
}
public function allowsCallOfMethod($methodName): bool
{
return true;
}
}
Der Helfer akzeptiert einen Knoten als Parameter und prüft, ob er in einem Unterarbeitsbereich und seinem Basisarbeitsbereich vorhanden ist. In meinem Fall wäre das die Prüfung, ob er im aktuell ausgewählten Arbeitsbereich „Entwurf“ und im Arbeitsbereich „Live“ vorhanden ist. Wenn das der Fall ist oder ich gerade einen Knoten betrachte, der sich im Live-Arbeitsbereich befindet, gibt der Helfer true zurück.
Registrieren des neuen Helfers
Um den Helfer für die Verwendung in einem Nodetype verfügbar zu machen, müssen Sie ihn wie folgt in einer Settings.yaml-Datei registrieren:
Neos:
ContentRepository:
labelGenerator:
eel:
defaultContext:
'My.Site.Node': 'My\Site\Eel\NodeHelper'
Stellen Sie auch hier sicher, dass Sie den Namensraum an Ihren anpassen.
Anpassen der Labels
Und jetzt überschreiben wir das Label des Basisdokument-Knotentyp-Mixins (oder jeden anderen Knotentyp, den Sie auf diese Weise markieren wollen), um diesen Helfer zu verwenden, um den Knoten im Dokumentbaum bedingt ein Präfix hinzuzufügen:
Neos.Neos:Document:
label: "${Neos.Node.labelForNode(node).properties('title').prefix(Shel.Site.Node.existsInBaseWorkspace(node) ? '' : '(DRAFT) ')}"
Diese Änderung kann in eine neue yaml-Datei eingefügt werden, die sich z. B. in Ihrem Paket unter NodeTypes/Override/Document.yaml befindet.
Wenn Sie nun den Dokumentenbaum in Ihrem Neos-Backend neu laden, während Sie sich in einem Arbeitsbereich befinden, der Dokumente enthält, die noch nicht im „Live“-Arbeitsbereich existieren, sollten Sie das Präfix „(DRAFT)“ in der Beschriftung dieser Dokumente sehen.
Verwendung von Unicode
Sie können auch kreativer werden, indem Sie Unicode-Zeichen verwenden:

Zusammenfassung
Dieser Beitrag zeigt eine kompakte und gut handhabbare Möglichkeit, Knoten mit bestimmten Bedingungen im Seitenbaum hervorzuheben. Wir hoffen, dass wir für zukünftige Neos-Versionen gute Wege finden werden, um dies einfacher zu machen, z.B. indem wir mehrere Icons für einen Knoten oder benutzerdefinierte Farbvariationen erlauben.
Bitte melden Sie sich, wenn Sie auf diese Weise andere oder noch bessere Wege gefunden haben, um Knoten zu markieren, und ich werde Ihren Beitrag gerne verlinken oder erwähnen.