--- name: perfex-views description: Views e templates para módulos Perfex CRM — init_head(), init_tail(), views admin e cliente, passagem de dados. Baseado apenas na documentação oficial. --- # /perfex-views - Views Perfex CRM Sistema de views e templates para módulos. **Zero assumptions, zero hallucinations** - apenas documentação oficial. --- ## Documentação Base - [Module Views](https://help.perfexcrm.com/module-views/) - [CodeIgniter Views](https://codeigniter.com/userguide3/general/views.html) --- ## Estrutura de Pastas ``` modules/meu_modulo/ └── views/ ├── index.php # Lista principal ├── form.php # Formulário create/edit ├── view.php # Detalhe ├── client_index.php # Lista cliente ├── client_view.php # Detalhe cliente ├── partials/ │ ├── _table.php # Partial tabela │ └── _filters.php # Partial filtros └── widgets/ └── dashboard.php # Widget dashboard ``` --- ## Views Admin (Área Staff) ### Template Base Admin ```php

``` ### Funções Essenciais | Função | Descrição | |--------|-----------| | `init_head()` | Inclui header, sidebar, CSS, meta tags | | `init_tail()` | Inclui footer, JavaScript, fecha documento | --- ## Carregar Views ### No Controller ```php // Básico $this->load->view('form'); // Com dados $data = [ 'item' => $item, 'clients' => $clients, ]; $this->load->view('form', $data); // Retornar como string (não fazer echo) $html = $this->load->view('partial', $data, true); ``` ### Fora de Controllers (Helpers, Classes) ```php function meu_modulo_render_widget() { $CI = &get_instance(); $CI->load->view('meu_modulo/widgets/dashboard'); } // Com dados function meu_modulo_render_table($items) { $CI = &get_instance(); $CI->load->view('meu_modulo/partials/_table', ['items' => $items]); } ``` --- ## Views Cliente (Área Cliente) ### No Controller (ClientsController) ```php public function index() { $this->data([ 'items' => $items, 'title' => 'Meu Módulo', ]); $this->title(_l('meu_modulo_title')); $this->view('client_index'); $this->layout(); // Aplica tema do cliente } ``` ### Template Base Cliente ```php


name); ?>

``` --- ## Exemplos Completos ### Lista com Tabela (Admin) ```php

id; ?> name); ?> created_at); ?>
``` ### Formulário (Admin) ```php


id) : admin_url('meu_modulo/create'); echo form_open($action); ?>
``` --- ## Helpers de Output ### Escape HTML (OBRIGATÓRIO para dados user) ```php // SEMPRE usar para dados de utilizador echo html_escape($item->name); // Para atributos HTML echo html_escape($item->url, true); ``` ### Formatação de Datas ```php // Data formatada (configuração do sistema) echo _d($item->date); // 25-01-2026 // Data e hora echo _dt($item->created_at); // 25-01-2026 14:30 ``` ### Formatação de Valores ```php // Moeda echo app_format_money($item->amount, $currency); // Número echo app_format_number($item->quantity); ``` ### Tradução ```php // String de tradução echo _l('meu_modulo_title'); // Com placeholder echo _l('item_created_by', $staff_name); ``` --- ## Classes CSS Disponíveis ### Painéis ```html
``` ### Tabelas ```html
``` ### Botões ```html PrimarySuccessWarningDangerDefault ``` ### Ícones (Font Awesome 4) ```html ``` --- ## Anti-Patterns (NUNCA FAZER) | Anti-Pattern | Risco | Alternativa | |--------------|-------|-------------| | Echo dados sem escape | XSS | `html_escape()` sempre | | Não usar form_open() | CSRF vulnerável | Usar form_open() | | SQL em views | Má arquitectura | Preparar no controller | | Esquecer init_head/tail | Layout quebrado | Incluir sempre (admin) | | Hardcode strings | Não traduzível | Usar `_l()` | --- ## Checklist View ``` 1. [ ] defined('BASEPATH') no topo 2. [ ] init_head() e init_tail() (admin) 3. [ ] $this->layout() (cliente) 4. [ ] html_escape() em todos os dados user 5. [ ] form_open() para formulários 6. [ ] Permissões verificadas antes de mostrar botões 7. [ ] _l() para todas as strings 8. [ ] Classes CSS standard do Perfex ``` --- **Versão:** 1.0.0 | **Autor:** Descomplicar® **Fonte:** help.perfexcrm.com/module-views