Grav-plugin-admin: Adicionar opções de página personalizadas

Criado em 13 abr. 2017  ·  16Comentários  ·  Fonte: getgrav/grav-plugin-admin

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:

  • Adicionar Página
  • Adicionar pasta
  • Adicionar Modular
    Eu gostaria de poder adicionar diluentes como:
    Adicionar postagem do blog
    Adicionar Galeria
    Adicione outro tipo de página especial.

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.

enhancement

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

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

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

Todos 16 comentários

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

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

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

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

Esta página foi útil?
0 / 5 - 0 avaliações