From 71196b5c160289dff010b42a574d3d3704773a18 Mon Sep 17 00:00:00 2001 From: webfarben Date: Sun, 15 Mar 2026 20:33:46 +0100 Subject: [PATCH] UX: Ziel-Elternseite und Zielverzeichnis als Baumauswahl (1.2.3) --- contao/templates/be_dummy_copier.html5 | 143 ++++++++++++++++++++++--- src/Backend/DummyCopierModule.php | 47 ++++++++ 2 files changed, 178 insertions(+), 12 deletions(-) diff --git a/contao/templates/be_dummy_copier.html5 b/contao/templates/be_dummy_copier.html5 index 597ac58..7860052 100644 --- a/contao/templates/be_dummy_copier.html5 +++ b/contao/templates/be_dummy_copier.html5 @@ -17,6 +17,10 @@ .dc-page-tree li { margin: 0.1rem 0; } .dc-page-item { display: flex; align-items: center; gap: 0.45rem; } .dc-page-id { color: #777; font-size: 0.8rem; } + .dc-tree-option { padding: 0.2rem 0 0.4rem; border-bottom: 1px solid #eee; margin-bottom: 0.3rem; } + .dc-dir-item { cursor: pointer; border-radius: 3px; } + .dc-dir-item:hover { background: #f0f4f8; } + .dc-dir-selected { font-weight: bold; color: #0a5a8c; background: #e8f0fe; } @@ -160,24 +164,102 @@

- +

7. Ziel & Benennung

+

- + Ziel-Elternseite:
+ Die kopierten Seiten werden als Unterseiten der ausgewaehlten Seite angelegt. + +

+
+ +
+ selected['targetParentPage'] ?? 0); + + $renderTargetNodes = static function (array $nodes) use (&$renderTargetNodes, $selectedTargetPage): void { + if ($nodes === []) { + return; + } + + echo '
    '; + + foreach ($nodes as $node) { + $id = (int) ($node['id'] ?? 0); + $label = (string) ($node['label'] ?? ('Seite ' . $id)); + $children = (array) ($node['children'] ?? []); + $checked = ($id > 0 && $id === $selectedTargetPage) ? 'checked' : ''; + + echo '
  • '; + echo ''; + + if ($children !== []) { + $renderTargetNodes($children); + } + + echo '
  • '; + } + + echo '
'; + }; + + $renderTargetNodes((array) ($this->pageTreeNodes ?? [])); + ?> +

+

- + Ziel-Verzeichnis fuer Dateien (optional):
+ Quellverzeichnisse werden hierhin kopiert. Vorhandenes auswaehlen oder unten manuell eingeben (auch neue Pfade moeglich). + +

+ selected['targetDirectory'] ?? ''); + + $renderDirNodes = static function (array $nodes) use (&$renderDirNodes, $selectedTargetDir): void { + if ($nodes === []) { + return; + } + + echo '
    '; + + foreach ($nodes as $node) { + $path = (string) ($node['path'] ?? ''); + $label = (string) ($node['label'] ?? $path); + $children = (array) ($node['children'] ?? []); + $selClass = ($path !== '' && $path === $selectedTargetDir) ? ' dc-dir-selected' : ''; + + echo '
  • '; + echo ''; + echo '' . htmlspecialchars($label, ENT_QUOTES, 'UTF-8') . ''; + echo '' . htmlspecialchars($path, ENT_QUOTES, 'UTF-8') . ''; + echo ''; + + if ($children !== []) { + $renderDirNodes($children); + } + + echo '
  • '; + } + + echo '
'; + }; + + $renderDirNodes((array) ($this->directoryTreeNodes ?? [])); + ?> +
+

+