Wie ich in getgrav/grav#421 erklärt habe, wäre es toll, die Möglichkeit zu haben, benutzerdefinierte Seitentypen basierend auf Blaupausen im Add Page Menu hinzuzufügen.
Zum Beispiel hat das Menü standardmäßig diese Auswahlmöglichkeiten:
Diese Optionen würden automatisch so einrichten, dass beispielsweise eine Seite innerhalb des Blogs/Verzeichnisses mit einer "Item"-Seitenvorlage erstellt wird, um einen Blogbeitrag usw. zu erstellen.
Dies wäre eine sehr nützliche Funktion, insbesondere wenn die Site an Kunden weitergegeben wird, die sich nicht um Seitenvorlagen und Ordnerstruktur kümmern müssen.
Ich würde das bald für einen Kunden brauchen
habt ihr hinweise, wie ich das selbst umsetzen könnte?
Nun, wenn Sie einem Kunden sagen, dass er eine Seite hinzufügen soll, muss er nur eine Vorlage für das Richtige auswählen. Wenn Sie den Blog, die Galerie usw. einrichten, ist es genauso einfach. Wenn Sie jedoch wirklich Schaltflächen hinzufügen möchten, duplizieren Sie einfach die Schaltfläche zum Hinzufügen einer Seite, aber setzen Sie die Feldvorlage vorausgewählt und ausgeblendet (wenn Sie dies wünschen).
@ricardo118 Ich wünschte, ich könnte ihnen einfach sagen, dass sie die richtige Vorlage und den richtigen Ordner auswählen sollen, leider listet die Auswahlbox des Ordners aufgrund der Art und Weise, wie das Modal derzeit aufgebaut ist, alle Seiten der Site auf, was problematisch ist, weil in der richtigen Reihenfolge Um den richtigen Ordner zu finden, müssen sie möglicherweise Hunderte von Seiten durchblättern. Daher die vordefinierten Modalitäten.
Ich hatte auf eine elegantere Lösung gehofft, dies zu implementieren, als einfach die Modals zu kopieren und einzufügen und die Dateien des Plugins direkt zu bearbeiten. (Wegen Updates)
Ich habe es zwar versucht, aber ich habe Probleme, wenn ich versuche, den Standardwert von Auswahlfeldern anzugeben: Seltsamerweise bekomme ich standardmäßig nie die richtige Option.
Gibt es eine Möglichkeit, das Admin-Plugin zu erweitern, ohne seinen Code zu ändern, um das zu tun, was ich will?
Ich denke, wir könnten eine Konfiguration dafür vornehmen.
Ich habe dies in meiner lokalen Version, wenn wir uns auf die Konfigurationsstruktur einigen können, kann ich es in eine PR umwandeln.
Standardmäßig wird die Vorlage verwendet, die von Seite hinzufügen verwendet wird.
admin.yaml
add_modals:
post:
label: Add Post
blueprint: admin/pages/new_post
template: custom_template
link_classes: some_class
modal_classes: some_modal_class
with:
some_data: for the template
show_in: dropdown
image:
label: Add Image
blueprint: admin/pages/new_image
show_in: bar
Ein Beispielplan. Auf meinem Blog habe ich mehr als 1 Autoren, also kann ich mit der getNewPostRoute eine Route für den Benutzer generieren, zum Beispiel für mein Konto generiert es: "/dave/posts"
new_post.yaml
form:
validation: loose
fields:
section:
type: section
title: Add Post
title:
type: text
label: Post Title
validate:
required: true
folder:
type: hidden
route:
type: hidden
data-default@: '\Grav\Plugin\MyPlugin::getNewPostRoute'
name:
type: hidden
default: 'post'
visible:
type: hidden
default: ''
blueprint:
type: blueprint
Einige Bilder
@david-szabo97 Genau das hatte ich im Sinn. Gut gemacht! Diese Konfiguration sieht für mich ziemlich vernünftig aus. Besonders gut gefällt mir das show_in: bar|dropdown, ordentlich. Wie gehen Sie mit dem Ordnernamenteil um?
Während Sie darauf warten, dass das Team seinen Eindruck für eine PR anbietet, haben Sie irgendwo online eine Version Ihres Codes?
@fireraccoon Ich habe den Javascript-Teil der Hinzufügen-Seite bearbeitet, um den Titel automatisch zu slugifizieren. Genau wie beim Erstellen einer Seite. In diesem Fall können Sie den Ordner jedoch nicht sehen, da er ausgeblendet ist. Aber es würde das gleiche tun, wenn Sie eine normale Seite erstellen, kopieren Sie einfach den Slugified-Titel in das Ordnertextfeld.
Da es die neue Seite (Ordner) in die Route einfügt, können Sie eine benutzerdefinierte Route angeben, genau wie ich es getan habe data-default@: '\Grav\Plugin\MyPlugin::getNewPostRoute
und am Ende haben Sie den gleichen Effekt. ($route . $ordner)
Ich habe es noch nirgendwo verfügbar, aber ich kann es für Sie hochladen, wenn Sie möchten.
@david-szabo97 Ok ich verstehe! Ich habe mich gefragt, ob Sie es mit JS oder mit einer Art Post-Form-Processing-Hook gemacht haben. Ja, ich würde es gerne sehen, wenn Sie die Zeit haben, danke!
@fireraccoon Es könnte mit einem Ereignis-Hook gemacht werden, aber JS scheint besser zu sein.
Ich habe eine ZIP-Datei angehängt, ersetze einfach deine Plugins/Admin durch diesen Admin-Ordner.
Sie können die von mir vorgenommenen Änderungen nachschlagen, indem Sie nach * MessedCode
suchen (das ist mein kommender Blog, der auf Grav basiert)
Ich hatte einige andere Änderungen darin, also hoffe ich, dass ich alles andere entfernt habe und es gut funktioniert.
Der Code, den Sie in der admin.min.js finden, wird aus der add.js kopiert. Auf diese Weise kann ich vermeiden, das gesamte JS-Projekt neu zu packen.
Wir haben ein paar Benutzer in meinem Blog, also musste ich viele Änderungen vornehmen, um das Posten für alle angenehm zu machen. Dies ist eine der Änderungen, die wir dringend brauchen.
admin.zip
@david-szabo97 Vielen Dank! Du hast meinen Tag gerettet. Ich habe es mit der neuesten Version ganz einfach zum Laufen bekommen. Klappt wunderbar. Ich denke, dies ist ein ziemlich wichtiger Anwendungsfall, und ich hoffe wirklich, dass er bald in das Plugin integriert wird. Außerdem sind die Änderungen sehr einfach.
Eine PR wäre gut. Ich würde es jedoch vorziehen, wenn ich mich nicht auf JS verlassen würde.
Funktion zusammengeführt in https://github.com/getgrav/grav-plugin-admin/issues/1104
@rhukster , ich möchte beliebige Frontmatter-Daten aus dem Modal übergeben. Dies scheint im Moment nicht zu funktionieren. Könnten Sie vorschlagen, wo ich in der Codebasis nachsehen sollte, um das zu beheben? Bin ich hinsichtlich des Zwecks dieser Modalitäten falsch?
form:
validation: loose
fields:
section:
type: section
title: Add Fancy Page
title:
type: text
label: Title
a_custom_attribute:
type: text
default: dummy
label: Won't pre-populate the corresponding field
header.another_custom_attr:
type: text
label: Neither will this
validate:
required: true
@k8n
Ich kann bestätigen, dass es nicht so funktioniert, wie man es erwarten würde. Im Moment funktionieren nur die Verzeichnis- und Vorlagenfelder, aber alle benutzerdefinierten Titelattribute werden nicht ausgefüllt.
Ich bin mir nicht sicher, wie das with-Feld Daten an die eigentliche Seite weitergibt, die es generiert. Ich habe ein benutzerdefiniertes Modal erstellt; wie unten - versucht, Felder in der Kopfzeile zu setzen, aber es wird nichts in der Kopfzeile angezeigt, noch werden Fehler hinterlegt?
```Formular:
Validierung: lose
Felder:
Sektion:
Typ: Abschnitt
Titel: Medienelement hinzufügen
title:
type: text
label: Media Item Title
validate:
required: true
header.article_hyperlink:
type: text
label: Article Hyperlink (URL)
validate:
required: true
type: url
header.article_date:
type: date
label: Article Date
validate:
required: true
header.article_blurb:
type: textarea
label: Article Blurb
folder:
type: hidden
default: '@slugify-title'
route:
type: hidden
default: /media
name:
type: hidden
default: 'media-item'
blueprint:
type: blueprint
```
Das Modal wird angezeigt und erstellt den Inhalt, aber es werden keine Daten aus den Feldern weitergegeben?
@sjclark , wie ich in meinem Kommentar über
Hoffentlich macht bald jemand eine PR dafür!
+1 dazu.
Hilfreichster Kommentar
Ich denke, wir könnten eine Konfiguration dafür vornehmen.
Ich habe dies in meiner lokalen Version, wenn wir uns auf die Konfigurationsstruktur einigen können, kann ich es in eine PR umwandeln.
Standardmäßig wird die Vorlage verwendet, die von Seite hinzufügen verwendet wird.
admin.yaml
Ein Beispielplan. Auf meinem Blog habe ich mehr als 1 Autoren, also kann ich mit der getNewPostRoute eine Route für den Benutzer generieren, zum Beispiel für mein Konto generiert es: "/dave/posts"
new_post.yaml
Einige Bilder