Direkt zum Inhalt

Artikel kopieren in Drupal – unveröffentlicht und mit aktuellem Datum

Autor
Michael Zenger
Datum
8 August 2025

Ein typischer Ablauf in der Redaktion: Man möchte einen neuen Artikel anlegen, nimmt sich ein bestehendes Beispiel und erstellt mit dem Replicate-Modul eine Kopie. Das funktioniert das wunderbar – fast.

Denn was dabei oft stört: Die Kopie übernimmt alle Eigenschaften des Originals – einschließlich dem Veröffentlichungsstatus. Das bedeutet, der neue Artikel geht sofort live, bis man den Haken manuell entfernt. Außerdem bleibt auch das Erstellungsdatum unverändert.

Das lässt sich mit einem kleinen Custom-Modul verbessern.

Voraussetzung: Das Replicate-Modul ist aktiv

Falls noch nicht geschehen: Installiere "Replicate":

composer require 'drupal/replicate:^1.3'

Damit du im Drupal-Backend das Modul konfigurieren kannst benötigst du noch "Replicate UI":

composer require 'drupal/replicate_ui:^1.2'

Nach der Installation wird das Modul aktiviert:

drush en replicate replicate_ui

Anschließend kannst du im Backend unter /admin/config/content/replicate die Replikation aktivieren – oft genügt die Auswahl „Content“.

Eigenes Drupal-Modul erstellen

Erstelle ein Modul mit dem Namen custom_replicate_status. Die beiden benötigten Dateien legst du z. B. hier ab:

  • web/modules/custom/custom_replicate_status/custom_replicate_status.info.yml

  • web/modules/custom/custom_replicate_status/custom_replicate_status.module

Inhalt von custom_replicate_status.info.yml :

name: 'Custom Replicate Status'
type: module
description: 'Sets copied articles to unpublished by default using Replicate module.'
package: Custom
core_version_requirement: ^9 || ^10 || ^11
dependencies:
  - node

Inhalt von custom_replicate_status.module :

<?php
use Drupal\node\NodeInterface;
use Drupal\Core\Entity\EntityInterface;
/**
 * Implements hook_entity_presave().
 */
function custom_replicate_status_entity_presave(EntityInterface $entity) {
  if ($entity instanceof NodeInterface && in_array($entity->bundle(), ['article']) && $entity->isNew()) {
    $entity->setUnpublished();
  }
}

Diese einfache Funktion prüft, ob ein neuer Artikel des Typs article erstellt wird – und setzt ihn standardmäßig auf „nicht veröffentlicht“. Weitere Inhaltstypen lassen sich leicht ergänzen.

Optional: Erstellungsdatum aktualisieren

Oft ist es praktisch, gleich noch das aktuelle Datum setzen. Das kannst du mit drei weiteren Zeilen lösen: 

<?php
use Drupal\node\NodeInterface;
use Drupal\Core\Entity\EntityInterface;
/**
 * Implements hook_entity_presave().
 */
function custom_replicate_status_entity_presave(EntityInterface $entity) {
  if ($entity instanceof NodeInterface && in_array($entity->bundle(), ['article']) && $entity->isNew()) {
    $entity->setUnpublished();
    // Aktuelles Datum setzen
    $current_time = \Drupal::time()->getRequestTime();
    $entity->set('created', $current_time);
    $entity->set('changed', $current_time);
  }
}

Nun musst du nur noch dein Modul aktivieren:

drush en custom_replicate_status

Fertig. 

Mit wenigen Zeilen Code wird das Kopieren von Artikeln deutlich komfortabler für die redaktionelle Pflege.

 

Viel Erfolg beim Nachbauen! 

Falls du weitere Unterstützung benötigst oder Hilfe bei individuellen Anpassungen suchst, melde dich gerne bei mir.