# Crocoblock — Padrões de Integração Avançados ## Padrão 1: Directório com Filtros + Mapa **Plugins:** JetEngine + JetSmartFilters + JetElements (Maps) ``` Arquitectura: CPT "Negócio" (com meta: morada, coordenadas, categoria, horário) ↓ Query Builder (posts, post_type=negocio) ↓ ┌────────────────┬──────────────────┐ │ Listing Grid │ Listing Map │ │ (cards) │ (pins) │ └────────────────┴──────────────────┘ ↑ sincronizados ↑ JetSmartFilters: - Categoria (checkbox, taxonomy) - Localização (select, meta) - Pesquisa (search text) - Raio de distância (range, meta GPS) ``` **Configuração de sincronização:** ``` Listing Map > Settings: ├── Synchronize with Listing Grid: YES └── Listing Grid Selector: ID do widget Listing Grid JetSmartFilters > Apply For: └── Seleccionar ID do Listing Grid (o mapa segue automaticamente via sincronização) ``` --- ## Padrão 2: Marketplace / Multi-vendor Simples **Plugins:** JetEngine + JetFormBuilder + JetSmartFilters + Profile Builder ``` Fluxo do vendedor: 1. Registo (JetFormBuilder → Register User) 2. Login 3. Dashboard vendedor (Profile Builder) 4. Criar produto (JetFormBuilder → Create Post no CPT) 5. Produto aparece no catálogo (Listing Grid filtrado por author) Fluxo do comprador: 1. Catálogo com filtros (JetSmartFilters) 2. Contactar vendedor (JetFormBuilder → Email ao author) 3. Ver perfil vendedor (Profile Builder page pública) ``` **Relations necessárias:** ``` User → N Produtos (one-to-many) User → N Favoritos (many-to-many) Produto → N Reviews (one-to-many, via JetReviews) ``` --- ## Padrão 3: Portal de Imobiliário **Plugins:** JetEngine + JetSmartFilters + JetWooBuilder (opcional) + JetBooking ``` CPT: Imóvel Meta Boxes: ├── Preço (number) ├── Área m² (number) ├── Tipologia (select: T0/T1/T2/T3/T4+) ├── Tipo (select: venda/arrendamento) ├── Localização (taxonomy: Distrito → Concelho → Freguesia) ├── Coordenadas (map) ├── Galeria (gallery) ├── Características (checkbox-list: piscina, garagem, jardim...) └── Agente responsável (posts: CPT Agente) Query Builder: ├── Ordenação: data / preço / área └── Meta Query: tipo = "arrendamento" (para página específica) JetSmartFilters: ├── Range: Preço min-max ├── Range: Área min-max ├── Checkboxes: Tipologia ├── Select Hierarchical: Localização ├── Checkboxes: Características └── Sorting: Preço ASC/DESC, Mais recentes ``` --- ## Padrão 4: E-learning / Cursos **Plugins:** JetEngine + JetFormBuilder + Profile Builder ``` CPTs: ├── Curso (conteúdo, preço, dutor) ├── Lição (sub-item do curso) └── Avaliação (questionário) Relations: ├── Curso → N Lições (one-to-many) ├── Utilizador → N Cursos Inscritos (many-to-many) └── Utilizador → N Avaliações (one-to-many) Profile Builder Pages: ├── Meus Cursos (Query: cursos onde utilizador está inscrito) ├── Continuar Lição (última lição acedida) └── Certificados (download PDF após conclusão) Automatização: JetFormBuilder → compra → Inscrever no curso → Criar relação User↔Curso ``` --- ## Padrão 5: Multi-Relation (Relações Aninhadas) ``` Exemplo: Agência → Clientes → Projectos → Tarefas Relations JetEngine: ├── agencia_clientes: Agência (1) → Clientes (N) ├── cliente_projectos: Cliente (1) → Projectos (N) └── projecto_tarefas: Projecto (1) → Tarefas (N) No Listing Template de Agência: ├── Lista de Clientes (Relation Field Widget) │ └── Dentro de cada Cliente: Lista de Projectos (nested listing) │ └── Dentro de cada Projecto: Contador de Tarefas Nota: Listings aninhados afectam performance. Limitar a 2 níveis de profundidade. Para listas longas, usar AJAX/JetSmartFilters paginado. ``` --- ## Padrão 6: User-Generated Content (UGC) **Plugins:** JetEngine + JetFormBuilder + Profile Builder + JetSmartFilters ``` Fluxo: 1. Utilizador logado → Dashboard (Profile Builder) 2. Formulário "Submeter Conteúdo" (JetFormBuilder) → Action: Create Post no CPT "Aviso" com status "pending" → Action: Email de notificação ao admin 3. Admin aprova → post_status = publish 4. Conteúdo aparece no listing público Queries do Dashboard: ├── "Os meus avisos" → Query: author = %current_user_id% + status = any └── "Aprovados" → Query: author = %current_user_id% + status = publish Moderação rápida: ├── Admin lista pendentes com Listing Grid └── JetFormBuilder inline para aprovar/rejeitar (Update Post Status) ``` --- ## Padrão 7: JetBooking + WooCommerce + JetEngine ``` Fluxo de Reserva: 1. Página de serviço (CPT Serviço com meta JetEngine) 2. Calendário JetBooking (disponibilidade em tempo real) 3. Seleccionar datas → Form de reserva (JetFormBuilder ou JetBooking nativo) 4. Checkout WooCommerce (JetBooking cria produto temporário) 5. Pagamento → Reserva confirmada 6. Email de confirmação (JetBooking + SMTP) 7. Dashboard cliente (Profile Builder → Minhas Reservas) Automatização n8n: JetBooking webhook → n8n → Google Calendar → SMS (via Twilio) ``` --- ## Anti-Padrões (Evitar) ### Demasiados JetPlugins Activos ``` Problema: Cada JetPlugin adiciona JS/CSS extra Solução: Desactivar plugins não usados em cada site específico Ferramenta: JetPlugins > Settings > Disable components não usados ``` ### Listings Sem Paginação em Catálogos Grandes ``` Problema: Listing Grid sem paginação carrega todos os posts → PHP timeout Solução: Sempre activar paginação ou Load More em listas >20 items ``` ### JetSmartFilters Sem AJAX ``` Problema: URL-based filters recarregam a página inteira Uso correcto: AJAX filters para UX fluida; URL-based apenas para SEO ``` ### Meta Boxes em CCT Desnecessariamente ``` CCT não suporta taxonomies nativas, comentários, revisões. Usar CPT quando precisar dessas funcionalidades WordPress. ``` --- *Crocoblock Patterns | Descomplicar® | 18-02-2026*