Skip to content

Commit e9a5ade

Browse files
committed
release: Version 1.0.1
- Fix: HTML-Ersetzung id nur aus GET gelesen → leere Felder beim Editieren - Fix: 'Name existiert bereits' beim Speichern bestehender Ersetzungsregeln - Fix: Suchwert-Whitespace verhinderte HTML-Ersetzung (trim beim Speichern) - Fix: i18n-Keys ohne Addon-Prefix in categories.php und listing.php - Fix: Abbrechen-Button in HTML-Ersetzung zeigte leeres Formular statt Uebersicht - Feat: HTML-Ersetzung OUTPUT_FILTER mit LATE-Prioritaet als eigener Filter
1 parent 38fec5a commit e9a5ade

File tree

9 files changed

+54
-27
lines changed

9 files changed

+54
-27
lines changed

CHANGELOG.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Changelog
2+
3+
## [1.0.1] – 2026-02-25
4+
5+
### Behoben
6+
7+
- **HTML-Ersetzung: Editieren zeigte leere Felder**`id` wurde nur aus GET gelesen, jedoch beim Formular-Submit per POST übertragen; `rex_request::request()` liest nun aus beiden Quellen
8+
- **HTML-Ersetzung: „Name existiert bereits" beim Speichern einer bestehenden Regel** – Folgefehler der fehlenden `id`, `nameExists()` schloss die eigene ID nun korrekt aus
9+
- **HTML-Ersetzung: Suchwert mit führenden/nachfolgenden Leerzeichen wurde nicht gefunden**`trim()` wird jetzt beim Speichern angewendet
10+
- **Kategorien: `[translate:cancel]` und `[translate:no_data_available]`** – falsche Core-Keys ersetzt durch addon-eigene Keys (`snippets_btn_cancel`, `snippets_category_no_data`)
11+
- **Kategorien/Listing: `[translate:edit]`** – in `categories.php` und `listing.php` durch `snippets_category_edit` / `snippets_btn_edit` ersetzt
12+
- **HTML-Ersetzung: Abbrechen-Button** verzweigte zurück zur leeren Bearbeiten-Seite statt zur Übersicht
13+
- **HTML-Ersetzung: `OUTPUT_FILTER`** in separate Extension mit `rex_extension::LATE` ausgelagert, damit die HTML-Ersetzung garantiert nach allen anderen `NORMAL`-Filtern (z. B. Sprog, YRewrite) ausgeführt wird
14+
15+
### Hinzugefügt
16+
17+
- Neue i18n-Keys: `snippets_category_edit`, `snippets_category_no_data`, `snippets_btn_edit` (de_de + en_gb)
18+
19+
## [1.0.0] – 2026-02-24
20+
21+
- Initiales Release

boot.php

Lines changed: 15 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -25,41 +25,38 @@
2525
// Frontend: Snippet-Replacement
2626
if (!rex::isBackend()) {
2727
rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {
28-
$content = $ep->getSubject();
29-
30-
// 1. Snippet-Keys ersetzen
31-
$content = ReplacementService::replace($content, [
28+
return ReplacementService::replace($ep->getSubject(), [
3229
'clang_id' => rex_clang::getCurrentId(),
3330
]);
34-
35-
// 2. HTML-Ersetzungen anwenden
36-
$content = HtmlReplacementService::process($content, 'frontend');
37-
38-
return $content;
3931
}, rex_extension::NORMAL);
32+
33+
// HTML-Ersetzungen immer als letzter Filter ausführen
34+
rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {
35+
return HtmlReplacementService::process($ep->getSubject(), 'frontend');
36+
}, rex_extension::LATE);
4037
}
4138

4239
// Backend: Snippet-Replacement (nur in sicheren Kontexten)
4340
if (rex::isBackend()) {
4441
rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {
45-
// Prüfen, ob wir uns in einem Edit-Kontext befinden
4642
if (ContextDetector::isEditContext()) {
4743
return $ep->getSubject();
4844
}
4945

50-
$content = $ep->getSubject();
51-
52-
// 1. Snippet-Keys ersetzen
53-
$content = ReplacementService::replace($content, [
46+
return ReplacementService::replace($ep->getSubject(), [
5447
'context' => 'backend',
5548
'clang_id' => rex_clang::getCurrentId(),
5649
]);
50+
}, rex_extension::NORMAL);
5751

58-
// 2. HTML-Ersetzungen anwenden
59-
$content = HtmlReplacementService::process($content, 'backend');
52+
// HTML-Ersetzungen immer als letzter Filter ausführen
53+
rex_extension::register('OUTPUT_FILTER', static function (rex_extension_point $ep) {
54+
if (ContextDetector::isEditContext()) {
55+
return $ep->getSubject();
56+
}
6057

61-
return $content;
62-
}, rex_extension::NORMAL);
58+
return HtmlReplacementService::process($ep->getSubject(), 'backend');
59+
}, rex_extension::LATE);
6360
}
6461

6562
// Sprog-Integration (falls Sprog aktiv ist)

fragments/snippets/html_replacement_form.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@
191191
<button type="submit" name="save_and_close" value="1" class="btn btn-apply">
192192
<i class="rex-icon rex-icon-apply"></i> <?= $addon->i18n('snippets_save_and_close') ?>
193193
</button>
194-
<a href="<?= rex_url::currentBackendPage(['func' => '']) ?>" class="btn btn-abort">
194+
<a href="<?= rex_url::backendPage('snippets/html_replacement') ?>" class="btn btn-abort">
195195
<i class="rex-icon rex-icon-abort"></i> <?= $addon->i18n('snippets_cancel') ?>
196196
</a>
197197
</div>

fragments/snippets/listing.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ class="btn btn-primary">
171171
<?php if ($canEditThis): ?>
172172
<a href="<?= rex_url::currentBackendPage(['page' => 'snippets/edit', 'func' => 'edit', 'id' => $snippet->getId()]) ?>"
173173
class="btn btn-xs btn-default">
174-
<i class="rex-icon fa-edit"></i> <?= rex_i18n::msg('edit') ?>
174+
<i class="rex-icon fa-edit"></i> <?= rex_i18n::msg('snippets_btn_edit') ?>
175175
</a>
176176
<?php endif; ?>
177177
</td>

lang/de_de.lang

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,8 @@ snippets_translation_missing = Noch keine Übersetzung vorhanden
9797
snippets_save = Speichern
9898
snippets_search = Suchen
9999
snippets_delete = Löschen
100+
snippets_edit_btn = Bearbeiten
101+
snippets_btn_edit = Bearbeiten
100102
snippets_required = Pflichtfeld
101103
snippets_confirm_delete = Wirklich löschen
102104
snippets_btn_save = Speichern
@@ -122,10 +124,12 @@ perm_general_snippets[viewer] = Snippets: Nur ansehen
122124

123125
# Kategorien
124126
snippets_category_add = Kategorie hinzufügen
127+
snippets_category_edit = Kategorie bearbeiten
125128
snippets_category_name = Name
126129
snippets_category_icon = Icon
127130
snippets_category_saved = Kategorie wurde gespeichert
128131
snippets_category_deleted = Kategorie wurde gelöscht
132+
snippets_category_no_data = Keine Kategorien vorhanden
129133

130134
# Einstellungen
131135
snippets_settings_title = Snippet-Einstellungen

lang/en_gb.lang

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,8 @@ snippets_translation_missing = No translation available yet
9696
snippets_save = Save
9797
snippets_search = Search
9898
snippets_delete = Delete
99+
snippets_edit_btn = Edit
100+
snippets_btn_edit = Edit
99101
snippets_required = Required
100102
snippets_confirm_delete = Really delete
101103
snippets_btn_save = Save
@@ -121,10 +123,12 @@ perm_general_snippets[viewer] = Snippets: View only
121123

122124
# Categories
123125
snippets_category_add = Add Category
126+
snippets_category_edit = Edit Category
124127
snippets_category_name = Name
125128
snippets_category_icon = Icon
126129
snippets_category_saved = Category has been saved
127130
snippets_category_deleted = Category has been deleted
131+
snippets_category_no_data = No categories available
128132

129133
# Settings
130134
snippets_settings_title = Snippet Settings

package.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package: snippets
2-
version: '1.0.0'
2+
version: '1.0.1'
33
author: REDAXO Community
44
supportpage: https://github.com/FriendsOfREDAXO/snippets
55

pages/categories.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@
8484
$icon = is_array($category) && isset($category['icon']) ? (string) $category['icon'] : '';
8585
$sortOrder = is_array($category) && isset($category['sort_order']) ? (int) $category['sort_order'] : 0;
8686

87-
$formTitle = 'add' === $func ? rex_i18n::msg('snippets_category_add') : rex_i18n::msg('edit');
87+
$formTitle = 'add' === $func ? rex_i18n::msg('snippets_category_add') : rex_i18n::msg('snippets_category_edit');
8888

8989
$content = '
9090
<form method="post" action="' . rex_url::currentBackendPage() . '">
@@ -117,7 +117,7 @@
117117
<i class="rex-icon rex-icon-save"></i> ' . rex_i18n::msg('snippets_save') . '
118118
</button>
119119
<a href="' . rex_url::currentBackendPage() . '" class="btn btn-abort">
120-
' . rex_i18n::msg('cancel') . '
120+
' . rex_i18n::msg('snippets_btn_cancel') . '
121121
</a>
122122
</div>
123123
</div>
@@ -151,7 +151,7 @@
151151
if (0 === $sql->getRows()) {
152152
$listContent .= '
153153
<tr>
154-
<td colspan="5" class="text-center">' . rex_i18n::msg('no_data_available') . '</td>
154+
<td colspan="5" class="text-center">' . rex_i18n::msg('snippets_category_no_data') . '</td>
155155
</tr>';
156156
} else {
157157
for ($i = 0; $i < $sql->getRows(); ++$i) {
@@ -169,7 +169,7 @@
169169
<td>' . $catSort . '</td>
170170
<td>
171171
<a href="' . rex_url::currentBackendPage(['func' => 'edit', 'id' => $catId]) . '" class="btn btn-xs btn-default">
172-
<i class="rex-icon fa-edit"></i> ' . rex_i18n::msg('edit') . '
172+
<i class="rex-icon fa-edit"></i> ' . rex_i18n::msg('snippets_btn_edit') . '
173173
</a>
174174
<a href="' . rex_url::currentBackendPage(['func' => 'delete', 'id' => $catId] + $csrfToken->getUrlParams()) . '"
175175
class="btn btn-xs btn-delete"

pages/html_replacement.edit.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020

2121
$csrf = rex_csrf_token::factory('snippets_html_replacement_edit');
2222

23-
$id = rex_request::get('id', 'int', 0);
23+
// id aus GET (initialer Aufruf) ODER aus POST (nach Formular-Submit, da currentBackendPage() kein id enthält)
24+
$id = rex_request::request('id', 'int', 0);
2425
$replacement = null;
2526

2627
// Bestehende Regel laden
@@ -40,7 +41,7 @@
4041
$name = rex_post('name', 'string', '');
4142
$description = rex_post('description', 'string', '');
4243
$type = rex_post('type', 'string', HtmlReplacement::TYPE_CSS_SELECTOR);
43-
$searchValue = rex_post('search_value', 'string', '');
44+
$searchValue = trim(rex_post('search_value', 'string', ''));
4445
$replacementContent = rex_post('replacement', 'string', '');
4546
$position = rex_post('position', 'string', HtmlReplacement::POSITION_REPLACE);
4647
$scopeContext = rex_post('scope_context', 'string', HtmlReplacement::CONTEXT_FRONTEND);

0 commit comments

Comments
 (0)