getgrav / grav#421で説明したように、[ページの追加]メニューでブループリントに基づいてカスタムページタイプを追加できると便利です。
たとえば、メニューにはデフォルトで次の選択肢があります。
これらのオプションは、ブログ投稿などを作成するために、たとえば「アイテム」ページテンプレートを使用してblog /ディレクトリ内にページが作成されるように自動的に設定されます。
これは、特にページテンプレートやフォルダ構造について心配する必要がないクライアントにサイトを渡すときに非常に便利な機能です。
私はクライアントのためにこれをすぐに必要とします
これを自分で実装する方法について何か指摘はありますか?
クライアントにページを追加するように指示するとき、クライアントがしなければならないのは、正しいもののテンプレートを選択することだけです。 ブログやギャラリーなどを設定すれば、同じように簡単になります。 ただし、本当にボタンを追加したい場合は、[ページの追加]ボタンを複製し、フィールドテンプレートを事前に選択して非表示にします(必要に応じて)
@ 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
いくつかの画像
@ 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。
最も参考になるコメント
このための構成を作成できると思います。
構成構造に同意できれば、ローカルバージョンにこれがあり、PRにリファクタリングできます。
デフォルトでは、ページの追加で使用されるテンプレートを使用します。
admin.yaml
設計図の例。 私のブログには複数の作成者がいるので、getNewPostRouteを使用して、ユーザーのルートを生成できます。たとえば、私のアカウントでは、「/ dave / posts」を生成します。
new_post.yaml
いくつかの画像