diff --git a/Dicas-de-Plone-6-e-Volto.md b/Dicas-de-Plone-6-e-Volto.md index 91ada9c..4202e8e 100644 --- a/Dicas-de-Plone-6-e-Volto.md +++ b/Dicas-de-Plone-6-e-Volto.md @@ -207,6 +207,100 @@ Projetos de exemplo: - [eea.banner](https://github.com/eea/eea.banner) (usado pelo volto-banner) - [collective.volto.cookieconsent](https://github.com/collective/collective.volto.cookieconsent) + +#### Behaviors para configuração do site + +"Behaviors" são schemas que pode ser atachados em tipos de conteúdo, acrescentando campos a eles. São excelentes para acrescentar configuração ao tipo de conteúdo `Plone Site`, que representa o site como um todo. Desta forma, não é necessário mexer com itens de painel de controle. + +Passo-a-passo para incluir configuração no `Plone Site`: + +1. Crie o schema com a configuração a ser incluída. É comum criar um diretório `behaviors` no seu addon padrão. + +``` +# tema.py +from plone.autoform.interfaces import IFormFieldProvider +from plone.supermodel import model +from zope.interface import provider +from zope import schema +from zope.schema.vocabulary import SimpleVocabulary, SimpleTerm + +THEMES = SimpleVocabulary([ + SimpleTerm(value="modern", title="Modern"), + SimpleTerm(value="solarized", title="Solarized"), + SimpleTerm(value="darcula", title="Darcula"), +]) + +@provider(IFormFieldProvider) +class IThemeSettings(model.Schema): + + theme = schema.Choice( + title="Tema do portal", + vocabulary=THEMES, + required=True, + description="Tema do Portal", + default="modern" + ) +``` + +2. Crie um arquivo `configure.zcml` para registrar o seu behavior: + +``` + + + + + + + +``` + +- em `provides`, coloque o nome do arquivo python ("tema" neste caso) e do schema (`IThemeSettings`) +- em `name`, coloque um identificador para o behavior. Será usado no próximo passo. + +3. Acrescente o diretório `behaviors` no `configure.zcml` da raiz do seu addon padrão: + +``` + +``` + +> Não é óbvio, mas o ponto de entrada do diretório "behaviors" é o arquivo `behaviors/configure.zcml` + +4. Atache o behavior no tipo de conteúdo. Para isto, crie um arquivo em `profiles/default/types/Plone_Site.xml` + +> O nome do arquivo é uma pegadinha. Tem de usar "_" no lugar de " ", se o tipo de conteúdo tiver espaços. + +``` + + + + + + + +``` + +> Como tudo que mexe dentro de profiles, é necessário ou recriar o site (`DELETE_EXISTING=1 make backend-create-site`) ou fazer um passo de atualização de dados (`migration`) + +> Mais coisas são possíveis na definição do schema (sub-títulos, usar widgets customizados, etc). Veja [o código do volto-light-theme para ideias](https://github.com/kitconcept/volto-light-theme/blob/main/backend/src/kitconcept/voltolighttheme/behaviors/customizations.py). + + +[Documentação](https://6.docs.plone.org/backend/behaviors.html) + + ## Frontend (Volto) O frontend é chamado de Volto. Escrito em react/javascript, é feito para substituir o antigo frontend do plone (feito em python, direto no backend).