Como expliquei em getgrav / grav # 421, seria ótimo ter a possibilidade de adicionar tipos de página personalizados com base em projetos no Menu Adicionar Página.
Por exemplo, o menu padrão tem estas opções:
Essas opções configurariam automaticamente as coisas para que uma página, por exemplo, fosse criada dentro do blog / diretório com um modelo de página de "Item" para criar uma postagem de blog etc.
Esse seria um recurso muito útil, especialmente ao entregar o site a clientes que não precisariam se preocupar com modelos de páginas e estrutura de pastas.
Eu precisaria disso logo para um cliente
você tem alguma indicação de como eu poderia implementar isso sozinho?
Bem, quando você diz a um cliente para adicionar uma página, tudo o que ele precisa fazer é selecionar um modelo para a coisa certa. Se você configurar o blog, a galeria, etc., será tão fácil quanto. No entanto, se você realmente deseja adicionar botões, apenas duplique o botão adicionar página, mas coloque o modelo de campo pré-selecionado e oculto (se desejar)
@ ricardo118 Gostaria de poder simplesmente dizer a eles para selecionarem o modelo certo e a pasta certa, infelizmente devido à forma como o modal está projetado atualmente, a caixa de seleção da pasta lista todas as páginas do site, o que é problemático porque está em ordem para encontrar a pasta certa, eles precisam percorrer potencialmente centenas de páginas. Daí os modais predefinidos.
Eu esperava uma solução mais elegante para implementar isso do que simplesmente copiar e colar os modais e editar diretamente os arquivos do plugin. (Por causa das atualizações)
Eu tentei fazer isso, mas tive problemas ao tentar especificar o valor padrão das caixas de seleção: Estranhamente, nunca recebo a opção certa por padrão.
Existe alguma maneira de estender o plugin admin sem alterar seu código para fazer o que eu quero?
Acho que podemos fazer uma configuração para isso.
Eu tenho isso em minha versão local, se concordarmos com a estrutura de configuração, posso refatorá-la em um PR.
Por padrão, ele usa o modelo usado por Adicionar página.
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
Um exemplo de projeto. No meu blog tenho mais de 1 autores então com o getNewPostRoute posso gerar uma rota para o usuário, por exemplo para minha conta gera: "/ 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
Algumas imagens
@ david-szabo97 Isso é exatamente o que eu tinha em mente. Bom trabalho! Esta configuração parece bastante sensata para mim. Eu gosto especialmente daquele show_in: bar | dropdown, neat. Como você lida com a parte do nome da pasta?
Enquanto espera que a equipe dê sua impressão para um PR, você tem uma versão do seu código em algum lugar online?
@fireraccoon Eu editei a parte javascript da página de adição para auto-slugify o título. Exatamente como faria ao criar uma página. Embora, neste caso, você não consiga ver a pasta porque ela está oculta. Mas faria o mesmo quando você cria uma página normal, simplesmente copie o título slugified na caixa de texto da pasta.
Porque ele coloca a nova página (pasta) na rota, você pode especificar uma rota personalizada, assim como eu fiz data-default@: '\Grav\Plugin\MyPlugin::getNewPostRoute
e no final você terá o mesmo efeito. ($ route. $ pasta)
Ainda não o tenho em nenhum lugar disponível, mas posso carregá-lo para você, se quiser.
@ david-szabo97 Ok, entendo! Eu queria saber se você fez da maneira JS ou com algum tipo de gancho de processamento de pós-formulário. Sim, eu adoraria ver se você tiver tempo, obrigado!
@fireraccoon Poderia ser feito com um gancho de evento, mas o jeito JS parece melhor.
Anexei um arquivo zip, apenas substitua seus plug-ins / admin por esta pasta admin.
Você pode pesquisar as alterações que fiz procurando por * MessedCode
(é meu próximo blog baseado em Grav)
Eu tive algumas outras mudanças nele, então espero ter removido todo o resto e funcione bem.
O código que você encontrará em admin.min.js é copiado de add.js. É apenas uma maneira de evitar reembalar todo o projeto JS.
Temos alguns usuários em meu blog, então tive que fazer muitas alterações para tornar a postagem confortável para todos. Esta é uma das mudanças de que mais precisamos.
admin.zip
@ david-szabo97 Muito obrigado! Você salvou meu dia. Consegui fazê-lo funcionar com a versão mais recente com bastante facilidade. Funciona como um encanto. Acho que este é um caso de uso bastante importante e realmente espero vê-lo integrado ao plug-in em breve. Além disso, as mudanças são muito simples.
Um PR seria bom. Eu preferiria que não dependesse de JS para fazer, no entanto.
Recurso mesclado em https://github.com/getgrav/grav-plugin-admin/issues/1104
@rhukster , gostaria de passar dados arbitrários de frontmatter do modal. Isso parece não funcionar no momento. Você poderia sugerir onde devo procurar na base de código para resolver isso? Estou equivocado quanto ao propósito desses modais?
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
Posso confirmar que não funciona como esperado. No momento, apenas os campos de diretório e modelo funcionam, mas todos os atributos personalizados do front matter não serão preenchidos.
Não tenho certeza de como o campo com passa os dados para a página real que ele gera. Eu fiz um modal personalizado; como abaixo - tentando definir campos no cabeçalho, mas nada aparece no cabeçalho, nem há erros apresentados?
Forma `` `:
validação: solto
Campos:
seção:
tipo: seção
título: Adicionar item de mídia
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
`` `
O modal aparece e cria o conteúdo, mas nenhum dos dados dos campos é transmitido?
@sjclark , como falei no meu comentário acima do seu, atualmente repassando os dados do modal não está implementado, verifiquei com o Grav Dev Team.
Esperançosamente, alguém fará um PR logo para isso!
+1 sobre isso.
Comentários muito úteis
Acho que podemos fazer uma configuração para isso.
Eu tenho isso em minha versão local, se concordarmos com a estrutura de configuração, posso refatorá-la em um PR.
Por padrão, ele usa o modelo usado por Adicionar página.
admin.yaml
Um exemplo de projeto. No meu blog tenho mais de 1 autores então com o getNewPostRoute posso gerar uma rota para o usuário, por exemplo para minha conta gera: "/ dave / posts"
new_post.yaml
Algumas imagens