--- title: Construção de Widgets e Layouts source: https://tdn.totvs.com/pages/viewpage.action?pageId=113803693 path: \Plataforma Documentação técnica\Recurso de Páginas e Widgets (WCM)\Construção de Widgets e Layouts.md --- # Índice - 1 [Objetivo](#ConstruçãodeWidgetseLayouts-Objetivo) - 2 [Vídeos How To](#ConstruçãodeWidgetseLayouts-VídeosHowTo) - 3 [Construção de componentes WCM no Eclipse](#ConstruçãodeWidgetseLayouts-ConstruçãodecomponentesWCMnoEclipse) - 3.1 [Criação do Widget](#ConstruçãodeWidgetseLayouts-CriaçãodoWidget) - 3.2 [Estrutura dos diretórios de widgets](#ConstruçãodeWidgetseLayouts-Estruturadosdiretóriosdewidgetstabelaestruturawidget) - 3.3 [Exemplo de código JavaScript](#ConstruçãodeWidgetseLayouts-ExemplodecódigoJavaScript) - 3.4 [Exemplo de código HTML com FreeMarker (view.ftl)](#ConstruçãodeWidgetseLayouts-ExemplodecódigoHTMLcomFreeMarker(view.ftl)) - 3.5 [Criação de Layout](#ConstruçãodeWidgetseLayouts-CriaçãodeLayout) - 3.6 [Exemplo de código FreeMarker (layout.ftl)](#ConstruçãodeWidgetseLayouts-ExemplodecódigoFreeMarker(layout.ftl)) - 3.7 [Exemplo de código JavaScript](#ConstruçãodeWidgetseLayouts-ExemplodecódigoJavaScript.1) - 3.8 [Exemplo de códigos para inclusão de componentes nos layouts (view.ftl)](#ConstruçãodeWidgetseLayouts-Exemplodecódigosparainclusãodecomponentesnoslayouts(view.ftl)) - 4 [Snippets](#ConstruçãodeWidgetseLayouts-Snippets) - 5 [Autocompletar para FreeMarker e JavaScript](#ConstruçãodeWidgetseLayouts-AutocompletarparaFreeMarkereJavaScript) - 6 [Exportar componente para o servidor Fluig](#ConstruçãodeWidgetseLayouts-ExportarcomponenteparaoservidorFluig) # Objetivo O objetivo deste guia é possibilitar ao desenvolvedor criar componentes WCM via Eclipse ou Fluig Studio. # Vídeos How To Assista! Confira os vídeos How To sobre [Criação de páginas com layouts e widgets](https://tdn.totvs.com/pages/viewpage.action?pageId=270925442). Compatibilidade no modo escuro Este recurso ainda não é compatível com o modo escuro lançado na atualização [Voyager 2.0](https://tdn.totvs.com/x/6HxjN). Para mais detalhes, consulte a documentação em: add link # Construção de componentes WCM no Eclipse Para iniciar o desenvolvimento de um componente WCM no Eclipse ou [Fluig Studio](../Instalação e Atualização/Guia de instalação Fluig Studio.md), é necessário acessar a perspectiva Fluig e criar um novo projeto. - Acionar o menu ***Window*** na barra de menu. - Selecionar ***Perspective*** → ***Open Perspective*** → ***Other*...**. - Selecionar **Fluig** e acionar **OK**.  **Perspectiva Fluig no Eclipse** - Clicar com o botão direito do *mouse* no espaço *Package Explorer*. - Selecionar ***New*** → **Projeto Fluig**. - Informar o nome do projeto no campo *Project name*. - Acionar ***Finish***.  **Criação de um novo projeto Fluig** ### Criação do Widget Com o ambiente de desenvolvimento preparado, pode ser iniciada a criação do *widget* no projeto conforme os passos a seguir. - Clicar com o botão direito do *mouse* sobre o projeto Fluig criado. - Selecionar ***New*** → ***Widget***.  - Informar o código do *widget* no campo **Código**. Este campo é uma **chave única** e obrigatório. O campo Código aceita apenas letras, números e sublinhado. - Informar o nome do *widget* no campo **Nome**. - Informar uma breve descrição do *widget* no campo **Descrição**. - Escolher um dos *templates* disponíveis para o desenvolvimento do *widget* no campo **Template** ou manter o padrão "Nenhum" para não utilizar um modelo de desenvolvimento. - Acionar ***Next*** para avançar.  - Informar o código, nome e URL para identificação do desenvolvedor do componente (Opcional). - Informar a categoria do *widget* (Opcional). As categorias funcionam como filtros para localizar *widgets* mais rapidamente e são listadas no painel esquerdo da janela de seleção de *widgets* exibido ao incluir novos *widgets* em um *slot*. - Apenas um renderizador é disponibilizado atualmente (FreeMarker). - Acionar ***Finish*** para concluir a criação do *widget*.  - Concluída a etapa de criação do *widget*, uma estrutura de diretórios será gerada abaixo da pasta "wcm/widget" do projeto. A descrição dos arquivos gerados está disponível no item [Estrutura dos diretórios de *widgets*](https://tdn.totvs.com/pages/viewpage.action?pageId=113803693).  ### Estrutura dos diretórios de *widgets* | Arquivo/Pasta | Descrição | | --- | --- | | [código\_do\_widget] | Nome/Identificador do *widget*. | | src/main/java | Localização das classes Java, caso exista alguma regra de negócio específica do *widget*. | | src/main/resources/application.info | Arquivo de configuração do *widget* onde são gravados o código, título e desenvolvedor do *widget*, entre outros dados. Este arquivo será detalhado nas próximas páginas deste documento. | | src/main/resources/view.ftl | Arquivo de *template* do FreeMarker que será interpretado durante a renderização do *widget*. | | src/main/resources/edit.ftl | Arquivo que será interpretado durante a renderização do *widget* em modo de edição. Usado para configurar opções específicas para renderização do *widget*, como por exemplo, filtros de data, cotação do dólar, etc. Este arquivo é opcional. Caso não exista, será considerado que o *widget* não possui modo de edição, somente visualização. | | src/main/resources/[código\_do\_widget].properties | Arquivo de *strings* traduzíveis utilizadas pelo *widget*. Deve possuir derivações de acordo com o idioma suportado pelo *widget*. O padrão será sempre o código do *widget* seguido do sufixo referente à sua linguagem. Por exemplo: um arquivo de tradução para o idioma inglês ficaria “código-do-widget\_EN\_US.properties”. | | src/main/webapp/icon.png | Ícone utilizado para representar o *widget* no menu lateral da aplicação, ou em qualquer tela que necessite de uma representação visual do componente. Deve possuir a dimensão 55 x 30 *pixels*. | | src/main/webapp/WEB-INF/web.xml | Descritor padrão de uma aplicação Java para *web*. | | src/main/webapp/WEB-INF/jboss-web.xml | Descritor específico para o servidor de aplicação. Deve conter obrigatoriamente a propriedade “context-root”. O context-root representa o contexto *web* do *widget* e o recomendado é que o valor seja o próprio código do *widget*. | | src/main/webapp/resources/css/[código\_do\_widget].css | Folha de estilo do *widget*. | | src/main/webapp/resources/js/[código\_do\_widget].js | Arquivo JavaScript do *widget* (caso seja necessário). | | src/main/webapp/resources/images | Pasta específica de imagens do *widget*, caso necessário. | | src/test/java | Pasta específica para a construção de testes unitários. | Atenção! **01.** Não devem ser criadas novas pastas no diretório *"*src/main/resources*"*. O recomendado é que sejam utilizadas as pastas já existentes no projeto. **02.** Ao criar um *widget*, os itens abaixo devem possuir o mesmo nome. Este nome deve ser **único**, ou seja, não pode ser utilizado em nenhum outro *widget*, pois a duplicidade pode causar problemas durante o *deploy* dos componentes: - Nome do *widget*. - Propriedade "context-root" do arquivo jboss-web.xml. - Propriedade "application.code" do arquivo application.info. ### Exemplo de código JavaScript ``` var HelloWorld = SuperWidget.extend({ message: null, init: function () { //code }, bindings: { local: { 'show-message': ['click_showMessage'] } }, showMessage: function () { $div = $('#helloMessage_' + this.instanceId); $message = $('