Grav-plugin-admin: カスタム追加ページオプション

作成日 2017年04月13日  ·  16コメント  ·  ソース: getgrav/grav-plugin-admin

getgrav / grav#421で説明したように、[ページの追加]メニューでブループリントに基づいてカスタムページタイプを追加できると便利です。

たとえば、メニューにはデフォルトで次の選択肢があります。

  • ページを追加
  • フォルダーを追加
  • モジュラーを追加
    次のようなシンを追加できるようにしたいと思います。
    ブログ投稿を追加
    ギャラリーを追加
    その他の特殊ページタイプを追加します。

これらのオプションは、ブログ投稿などを作成するために、たとえば「アイテム」ページテンプレートを使用してblog /ディレクトリ内にページが作成されるように自動的に設定されます。

これは、特にページテンプレートやフォルダ構造について心配する必要がないクライアントにサイトを渡すときに非常に便利な機能です。

enhancement

最も参考になるコメント

このための構成を作成できると思います。
構成構造に同意できれば、ローカルバージョンにこれがあり、PRにリファクタリングできます。

デフォルトでは、ページの追加で使用されるテンプレートを使用します。

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

設計図の例。 私のブログには複数の作成者がいるので、getNewPostRouteを使用して、ユーザーのルートを生成できます。たとえば、私のアカウントでは、「/ 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

いくつかの画像

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

全てのコメント16件

私はクライアントのためにこれをすぐに必要とします
これを自分で実装する方法について何か指摘はありますか?

クライアントにページを追加するように指示するとき、クライアントがしなければならないのは、正しいもののテンプレートを選択することだけです。 ブログやギャラリーなどを設定すれば、同じように簡単になります。 ただし、本当にボタンを追加したい場合は、[ページの追加]ボタンを複製し、フィールドテンプレートを事前に選択して非表示にします(必要に応じて)

@ ricardo118モーダルが現在設計されている方法のために、残念ながら、フォルダの選択ボックスにサイトのすべてのページが一覧表示されます。これは、順番に問題があるため、問題があります。適切なフォルダを見つけるには、潜在的に数百ページをスクロールする必要があります。 したがって、事前定義されたモーダル。

モーダルを単にコピーして貼り付け、プラグインのファイルを直接編集するよりも、これを実装するためのより洗練されたソリューションを望んでいました。 (更新のため)
私はそれをやろうとしましたが、選択ボックスのデフォルト値を指定しようとすると問題が発生します。不思議なことに、デフォルトで正しいオプションを取得することはできません。

コードを変更せずに管理プラグインを拡張して、必要な処理を実行する方法はありますか?

このための構成を作成できると思います。
構成構造に同意できれば、ローカルバージョンにこれがあり、PRにリファクタリングできます。

デフォルトでは、ページの追加で使用されるテンプレートを使用します。

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

設計図の例。 私のブログには複数の作成者がいるので、getNewPostRouteを使用して、ユーザーのルートを生成できます。たとえば、私のアカウントでは、「/ 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

いくつかの画像

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

@ david-szabo97これはまさに私が考えていたものです。 よくやった! この構成は私にはかなり賢明に見えます。 私は特にそのshow_inが好きです:bar | dropdown、きちんと。 フォルダ名の部分はどのように扱いますか?

チームがPRの印象を与えるのを待っている間、オンラインのどこかにコードのバージョンがありますか?

@fireraccoon追加ページのjavascript部分を編集して、タイトルを自動スラッグ化しました。 ページを作成するときと同じように。 この場合、フォルダは非表示になっているため表示できません。 ただし、通常のページを作成する場合も同じように機能します。スラッグ化されたタイトルをフォルダのテキストボックスにコピーするだけです。

新しいページ(フォルダ)がルートに配置されるため、 data-default@: '\Grav\Plugin\MyPlugin::getNewPostRouteと同じようにカスタムルートを指定でき、最終的には同じ効果が得られます。 ($ route。$ folder)

まだどこにもありませんが、必要に応じてアップロードできます。

@ david-szabo97わかりました、なるほど! それをJSの方法でやったのか、それとも何らかのポストフォーム処理フックを使ってやったのだろうかと思いました。 はい、時間があれば見たいです!

@fireraccoonイベントフックを
zipファイルを添付しました。plugins/ adminをこのadminフォルダーに置き換えてください。
* MessedCodeを検索して、私が行った変更を検索できます(これは、Gravに基づく今後のブログです)
他にもいくつか変更があったので、他のすべてを削除して問題なく動作することを願っています。

admin.min.jsにあるコードは、add.jsからコピーされます。 これは、JSプロジェクト全体の再パックを回避するための方法にすぎません。

私のブログには数人のユーザーがいるので、誰もが快適に投稿できるように多くの変更を加える必要がありました。 これは私たちがひどく必要とする変更の1つです。
admin.zip

@ david-szabo97どうもありがとうございました! あなたは私の日を救った。 私はそれを最新バージョンで非常に簡単に動作させることができました。 チャームのように機能します。 これは非常に重要なユースケースだと思います。プラグインにすぐに統合されることを本当に望んでいます。 さらに、変更は非常に簡単です。

PRがいいでしょう。 ただし、JSに依存していない場合は希望します。

@rhukster 、モーダルから任意のフロントマターデータを渡したいです。 現在、これは機能していないようです。 これに対処するために、コードベースのどこを見ればよいか提案していただけますか? これらのモーダルの目的について私は誤った方向に進んでいますか?

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
期待通りに動作しないことが確認できました。 現在、ディレクトリフィールドとテンプレートフィールドのみが機能しますが、すべてのカスタムフロントマター属性が入力されるわけではありません。

withフィールドが生成する実際のページにデータを渡す方法がわかりません。 カスタムモーダルを作成しました。 以下のように-ヘッダーにフィールドを設定しようとしていますが、ヘッダーに何も表示されず、エラーも発生しませんか?

`` `フォーム:
検証:緩い
田畑:
セクション:
タイプ:セクション
タイトル:メディアアイテムの追加

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

`` `

モーダルが表示され、コンテンツが作成されますが、フィールドからのデータはどれも渡されませんか?

@sjclark 、上記のコメントで述べたように、現在、モーダルからのデータの受け渡しは実装されていません

うまくいけば、誰かがこれのためにすぐにPRをするでしょう!

これに+1。

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

jundiya picture jundiya  ·  4コメント

orasik picture orasik  ·  6コメント

WilliamMiceli picture WilliamMiceli  ·  4コメント

maciejmatu picture maciejmatu  ·  3コメント

darkroastcreative picture darkroastcreative  ·  4コメント