224 lines
4.9 KiB
Markdown
224 lines
4.9 KiB
Markdown
---
|
|
name: perfex-menus
|
|
description: Criação de menus para módulos Perfex CRM — sidebar, menus de cliente, add_sidebar_menu_item(), posições e ícones. Baseado apenas na documentação oficial.
|
|
layer: wiki
|
|
---
|
|
|
|
# /perfex-menus - Menus Perfex CRM
|
|
|
|
Criação de menus para módulos. **Zero assumptions, zero hallucinations** - apenas documentação oficial.
|
|
|
|
---
|
|
|
|
## Documentação Base
|
|
|
|
- [Create Menu Items](https://help.perfexcrm.com/create-menu-items/)
|
|
|
|
---
|
|
|
|
## Menu Admin (Sidebar)
|
|
|
|
### Adicionar Item Simples
|
|
|
|
```php
|
|
// No init file do módulo
|
|
hooks()->add_action('admin_init', 'meu_modulo_init_menu');
|
|
|
|
function meu_modulo_init_menu()
|
|
{
|
|
$CI = &get_instance();
|
|
|
|
$CI->app_menu->add_sidebar_menu_item('meu-modulo-menu', [
|
|
'name' => _l('meu_modulo_title'),
|
|
'href' => admin_url('meu_modulo'),
|
|
'position' => 25,
|
|
'icon' => 'fa fa-cube',
|
|
]);
|
|
}
|
|
```
|
|
|
|
### Parâmetros
|
|
|
|
| Parâmetro | Tipo | Descrição |
|
|
|-----------|------|-----------|
|
|
| `name` | string | Texto do menu (usar _l() para tradução) |
|
|
| `href` | string | URL destino |
|
|
| `position` | int | Posição no menu (menor = mais acima) |
|
|
| `icon` | string | Classe Font Awesome |
|
|
| `collapse` | bool | Se tem sub-items (default: false) |
|
|
| `badge` | array | Badge com contagem |
|
|
|
|
---
|
|
|
|
## Menu com Sub-Items (Collapsible)
|
|
|
|
```php
|
|
hooks()->add_action('admin_init', 'meu_modulo_init_menu');
|
|
|
|
function meu_modulo_init_menu()
|
|
{
|
|
$CI = &get_instance();
|
|
|
|
// Menu pai (collapsible)
|
|
$CI->app_menu->add_sidebar_menu_item('meu-modulo-menu', [
|
|
'name' => _l('meu_modulo_title'),
|
|
'collapse' => true,
|
|
'position' => 25,
|
|
'icon' => 'fa fa-cube',
|
|
]);
|
|
|
|
// Sub-item 1
|
|
$CI->app_menu->add_sidebar_children_item('meu-modulo-menu', [
|
|
'slug' => 'meu-modulo-lista',
|
|
'name' => _l('list'),
|
|
'href' => admin_url('meu_modulo'),
|
|
'position' => 1,
|
|
'icon' => 'fa fa-list',
|
|
]);
|
|
|
|
// Sub-item 2
|
|
$CI->app_menu->add_sidebar_children_item('meu-modulo-menu', [
|
|
'slug' => 'meu-modulo-criar',
|
|
'name' => _l('create'),
|
|
'href' => admin_url('meu_modulo/create'),
|
|
'position' => 2,
|
|
'icon' => 'fa fa-plus',
|
|
]);
|
|
|
|
// Sub-item 3
|
|
$CI->app_menu->add_sidebar_children_item('meu-modulo-menu', [
|
|
'slug' => 'meu-modulo-settings',
|
|
'name' => _l('settings'),
|
|
'href' => admin_url('meu_modulo/settings'),
|
|
'position' => 3,
|
|
'icon' => 'fa fa-cog',
|
|
]);
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Posições Padrão Admin
|
|
|
|
| Posição | Menu Item |
|
|
|---------|-----------|
|
|
| 1 | Dashboard |
|
|
| 5 | Customers |
|
|
| 10 | Sales |
|
|
| 15 | Subscriptions |
|
|
| 20 | Expenses |
|
|
| 25 | Contracts |
|
|
| 30 | Projects |
|
|
| 35 | Tasks |
|
|
| 40 | Tickets |
|
|
| 45 | Leads |
|
|
| 50 | Knowledge Base |
|
|
| 55 | Utilities |
|
|
| 60 | Reports |
|
|
|
|
**Dica:** Usar posições intermédias (ex: 27, 32) para inserir entre items existentes.
|
|
|
|
---
|
|
|
|
## Badge (Contador)
|
|
|
|
```php
|
|
$CI->app_menu->add_sidebar_menu_item('meu-modulo-menu', [
|
|
'name' => _l('meu_modulo_title'),
|
|
'href' => admin_url('meu_modulo'),
|
|
'position' => 25,
|
|
'icon' => 'fa fa-cube',
|
|
'badge' => [
|
|
'value' => meu_modulo_count_pending(),
|
|
'type' => 'danger', // primary, success, warning, danger, info
|
|
'show_on_sidebar' => true,
|
|
],
|
|
]);
|
|
|
|
// Função de contagem
|
|
function meu_modulo_count_pending()
|
|
{
|
|
$CI = &get_instance();
|
|
$CI->db->where('status', 'pending');
|
|
return $CI->db->count_all_results(db_prefix() . 'meu_modulo');
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Menu Condicional (Permissões)
|
|
|
|
```php
|
|
function meu_modulo_init_menu()
|
|
{
|
|
// Só mostrar se staff tem permissão
|
|
if (!staff_can('view', 'meu_modulo')) {
|
|
return;
|
|
}
|
|
|
|
$CI = &get_instance();
|
|
|
|
$CI->app_menu->add_sidebar_menu_item('meu-modulo-menu', [
|
|
'name' => _l('meu_modulo_title'),
|
|
'href' => admin_url('meu_modulo'),
|
|
'position' => 25,
|
|
'icon' => 'fa fa-cube',
|
|
]);
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Menu Cliente (Área Cliente)
|
|
|
|
### Adicionar Item
|
|
|
|
```php
|
|
hooks()->add_action('clients_init', 'meu_modulo_client_menu');
|
|
|
|
function meu_modulo_client_menu()
|
|
{
|
|
// Só mostrar se cliente logado
|
|
if (!is_client_logged_in()) {
|
|
return;
|
|
}
|
|
|
|
add_theme_menu_item('meu-modulo', [
|
|
'name' => _l('meu_modulo_title'),
|
|
'href' => site_url('meu_modulo'),
|
|
'position' => 35,
|
|
'icon' => 'fa fa-cube',
|
|
]);
|
|
}
|
|
```
|
|
|
|
### Posições Padrão Cliente
|
|
|
|
| Posição | Menu Item |
|
|
|---------|-----------|
|
|
| 5 | Knowledge Base |
|
|
| 10 | Projects |
|
|
| 15 | Invoices |
|
|
| 20 | Contracts |
|
|
| 25 | Estimates |
|
|
| 30 | Proposals |
|
|
| 40 | Subscriptions |
|
|
| 45 | Support |
|
|
| 99 | Registration |
|
|
| 100 | Login |
|
|
|
|
---
|
|
|
|
## Menu no Setup (Administração)
|
|
|
|
Para adicionar configurações ao menu Setup:
|
|
|
|
```php
|
|
hooks()->add_action('admin_init', 'meu_modulo_setup_menu');
|
|
|
|
function meu_modulo_setup_menu()
|
|
{
|
|
$CI = &get_instance();
|
|
|
|
// Adicionar ao sub-menu de Setup
|