Grav-plugin-admin: Benutzerdefinierte Optionen zum Hinzufügen von Seiten

Erstellt am 13. Apr. 2017  ·  16Kommentare  ·  Quelle: getgrav/grav-plugin-admin

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:

  • Seite hinzufügen
  • Ordner hinzufügen
  • Modular hinzufügen
    Ich würde gerne Dinge hinzufügen können wie:
    Blogbeitrag hinzufügen
    Galerie hinzufügen
    Anderen speziellen Seitentyp hinzufügen.

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.

enhancement

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

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

screenshot from 2017-04-26 11-45-05
screenshot from 2017-04-26 11-45-26

Alle 16 Kommentare

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

screenshot from 2017-04-26 11-45-05
screenshot from 2017-04-26 11-45-26

@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.

@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.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen