正如我在 getgrav/grav#421 中解释的那样,如果能够在“添加页面菜单”中添加基于蓝图的自定义页面类型,那就太好了。
例如,默认情况下菜单有以下选项:
这些选项将自动进行设置,以便例如在 blog/ 目录中使用“项目”页面模板创建一个页面,以便创建博客文章等。
这将是一个非常有用的功能,尤其是在将站点交给不必担心页面模板和文件夹结构的客户时。
我很快就会为客户需要这个
你对我如何自己实现这个有任何指示吗?
好吧,当您告诉客户添加页面时,他们要做的就是为正确的事情选择一个模板。 如果您设置博客、画廊等,它会同样简单。 但是,如果您真的想添加按钮,只需复制添加页面按钮,但预先选择和隐藏字段模板(如果您愿意)
@ricardo118我希望我可以简单地告诉他们选择正确的模板和正确的文件夹,不幸的是,由于模式当前的设计方式,文件夹的选择框列出了网站的所有页面,这是有问题的,因为按顺序为了找到正确的文件夹,他们可能需要滚动数百页。 因此,预定义的模态。
我希望有一个更优雅的解决方案来实现这一点,而不是简单地复制和粘贴模态,并直接编辑插件的文件。 (因为更新)
不过我确实尝试过,但是在尝试指定选择框的默认值时遇到了问题: 奇怪的是,默认情况下我从来没有得到正确的选项。
有什么方法可以在不更改其代码的情况下扩展管理插件来执行我想要的操作吗?
我认为我们可以为此进行配置。
如果我们就配置结构达成一致,我在本地版本中有这个,我可以将其重构为 PR。
默认情况下,它使用添加页面使用的模板。
管理文件
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
一个示例蓝图。 在我的博客上,我有 1 个以上的作者,因此使用 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 部分以自动调整标题。 就像创建页面时所做的那样。 尽管在这种情况下您看不到该文件夹,因为它是隐藏的。 但是当你创建一个普通页面时,它会做同样的事情,只需简单地将 slugified 标题复制到文件夹文本框中。
因为它将新页面(文件夹)放入路由中,您可以指定自定义路由,就像我所做的data-default@: '\Grav\Plugin\MyPlugin::getNewPostRoute
最终您将获得相同的效果。 ($route . $folder)
我还没有任何可用的地方,但如果你愿意,我可以为你上传。
@david-szabo97 好的,我明白了! 我想知道你是用 JS 的方式还是用某种形式的后处理钩子来做的。 是的,如果你有时间,我很想看看,谢谢!
@fireraccoon可以通过事件挂钩来完成,但 JS 方式似乎更好。
我附上了一个 zip 文件,只需用这个 admin 文件夹替换你的 plugins/admin。
您可以通过搜索* MessedCode
来查找我所做的更改(这是我即将发布的基于 Grav 的博客)
我对它进行了一些其他更改,所以我希望我删除了其他所有内容并且它可以正常工作。
您将在 admin.min.js 中找到的代码是从 add.js 复制的。 这只是我可以避免重新打包整个 JS 项目的一种方式。
我们在我的博客上有几个用户,所以我不得不做出很多改变,让每个人都能舒服地发帖。 这是我们非常需要的改变之一。
管理员.zip
@david-szabo97 非常感谢! 你救了我的一天。 我设法很容易地让它与最新版本一起工作。 奇迹般有效。 我认为这是一个非常重要的用例,我真的希望很快看到它集成到插件中。 此外,更改非常简单。
PR会很好。 但是,如果不依赖 JS,我更愿意这样做。
@rhukster ,我想从模态传递任意 frontmatter 数据。 目前这似乎不起作用。 您能否建议我应该在代码库中的何处查找以解决该问题? 我是否误解了这些模态的目的?
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 ,正如我在你上面的评论中所说,目前没有实现从模态传递数据,我与 Grav 开发团队核对过。
希望有人会为此做一个公关!
+1 对此。
最有用的评论
我认为我们可以为此进行配置。
如果我们就配置结构达成一致,我在本地版本中有这个,我可以将其重构为 PR。
默认情况下,它使用添加页面使用的模板。
管理文件
一个示例蓝图。 在我的博客上,我有 1 个以上的作者,因此使用 getNewPostRoute 我可以为用户生成路由,例如为我的帐户生成:“/dave/posts”
new_post.yaml
一些图片