ExpressionEngine Docs

# CP Class

- Calling the CP Class
- Breadcrumbs
- Sub Navigation
- Adding Header Data
- Add JavaScript Files to the JavaScript Combo Loader
- Loading Third-Party JavaScript Files
- Masking the Control Panel URL in links
- Allowed Group
- Safe Refresh
- Fetch an Action ID
- Publish Page Layout Methods

## Calling the CP Class

class `Cp`

This class is initialized automatically in the control panel.

## Breadcrumbs

### `set_breadcrumb($link, $title)`

Parameter | Type | Description
--- | --- | ---
$link | `Type` | URL the breadcrumb should go to
$title | `Type` | Text to go in the link
Returns | `Void` |

Adds a new breadcrumb to the initial breadcrumb array. The system will automatically output the final array:

    ee()->cp->set_breadcrumb($link, $title);

## Sub Navigation

### `set_right_nav($nav = array())`

Parameter | Type | Description
--- | --- | ---
$nav | `Array` | Associative array containing pairs of language keys as the keys and URLs as the values
Returns | `Void` |

The right hand subnavigation can be used as the main navigation for a module. This method takes an associative array where the keys are language keys and the values are the full url to link to:

    ee()->cp->set_right_nav(array(
        'edit_avatar' => BASE.AMP.'C=my_account'.AMP.'M=edit_avatar',
        'edit_profile' => BASE.AMP.'C=my_account'.AMP.'M=edit_profile'
    ));

## Adding Header Data

### `add_to_head($data)`

Parameter | Type | Description
--- | --- | ---
$data | `String` | String to add to the `<head>` of the control panel
Returns | `Void` |

The `<head>` tag of the control panel can be extended with new styles, meta tags, and other data. Multiple calls to this method are additive:

    ee()->cp->add_to_head('<style type="text/css" media="screen">div { display: none; }</style>');

## Add JavaScript Files to the JavaScript Combo Loader

### `add_js_script($script_type, $script_name)`

Parameter | Type | Description
--- | --- | ---
$script_type | `String` | Type of script to load
$script_name | `String` | Name of script to load
Returns | `Array` | Associative array of loaded js files

This method allows you to include scripts found in the main JavaScript directory in the combo load routine, thus reducing HTTP requests. As an example, the call to load `filename.js` file from the `themes/javascript` directory would look like this:

    ee()->cp->add_js_script('file', 'filename');

Note: This method will only load files from the `themes/javascript` directory. To load a third-party add-on package’s JavaScript files, use `Cp::load_package_js`.

Several custom jQuery plugins are included with ExpressionEngine and available for third-party developers to use. Plugins available include ee_interact.event, tablesorter, ee_table, and wysihat.

An example call to load one of the jQuery plugins:

    ee()->cp->add_js_script('plugin', 'tablesorter');

The jQuery UI interactions and widgets are also included with ExpressionEngine for third-party developers to use. The call to load the jQuery UI Autocomplete plugin would look like this, for example:

    ee()->cp->add_js_script('ui', 'autocomplete');

### `add_js_script([$script = array()[, $in_footer = TRUE]])`

Parameter | Type | Description
--- | --- | ---
$script | `Array` | Associative array containing the scripts you need to load
$in_footer | `Boolean` | Adds to the footer if set to `TRUE`, otherwise it’s added to the `<head>`
Returns | `Array` | Associative array of loaded js files

Several scripts can be included in a single call as an array:

    ee()->cp->add_js_script(
        array(
            'ui'      => array('widget', 'position', 'autocomplete'),
            'plugins'  => array('ee_notice', 'ee_table')
        )
    );

## Loading Third-Party JavaScript Files

### `load_package_js($file)`

Parameter | Type | Description
--- | --- | ---
$file | `String` | JavaScript file to load, path relative to the current package’s JavaScript directory
Returns | `Void` |

Use this method to load a third-party add-on package’s JavaScript files:

    ee()->cp->load_package_js('my_file');

This will load from the current package’s `javascript` directory:

    system/user/addons/my_package/javascript/my_file.js

## Masking the Control Panel URL in links

### `masked_url($url)`

Parameter | Type | Description
--- | --- | ---
$url | `String` | URL to mask
Returns | `String` | The masked URL

When creating external links in the users Control Panel, the system folder should not show in server referral logs:

    ee()->cp->masked_url('https://example.com');

Creates the a the following link: `https://example.com?URL=https://example.com`

## Allowed Group

### `allowed_group($which)`

Parameter | Type | Description
--- | --- | ---
$which | `String` | permission string to check for
Returns | `String` | `TRUE` if they have access, `FALSE` if they don’t or if the permission doesn’t exist

When a user or logged in member visits an EE site, the Session class ascribes user data to them that, among other things, pertains to their member groups’s access to various parts of the site. Returns `FALSE` if they have access, `TRUE` if they do:

    if ( ! ee()->cp->allowed_group('can_delete_all_entries'))
    {
        show_error(lang('unauthorized_to_delete_others'));
    }

## Safe Refresh

### `get_safe_refresh()`

Parameter | Type | Description
--- | --- | ---
Returns | `String` | URL to the current page unless `POST` data exists, in that case it goes to the root controller

Some pages of the control panel can only be reached after the user submits a form. If you need to perform an action elsewhere and the redirect to the current page, `get_safe_refresh()` will return a url that takes these considerations into account. To use the result, prefix it with `BASE.AMP`:

    <?=form_open(
        'C=myaccount'.AMP.'M=notepad_update',
        array('id' => 'notepad_form'),
        array('redirect_to' => $this->cp->get_safe_refresh())
    )?>

## Fetch an Action ID

### `fetch_action_id($class, $method)`

Parameter | Type | Description
--- | --- | ---
$class | `String` | Class that contains the method
$method | `String` | Name of the method
Returns | `Integer` | Action ID

Modules have certain actions for forms, links, etc. that are recognized via an action ids that are inserted into the database upon installation of that module. This method returns the action id number from the database. (See also functions->fetch_action_id):

    $aid = $this->EE->cp->fetch_action_id($class, $method);

## Publish Page Layout Methods

Administrators may extensively customize publish pages on a per member group and per channel basis. Since these custom layouts are saved as a serialized array in the database, any additions or deletions to publish page tabs and fields must be synced to any saved layouts. The control panel library provides 4 methods to facilitate custom layout updates. (See also Tab File Function Reference