<?php
/**
* @author Franco Bouly 25/12/2010
* @version 0.1
* @name Flash - Flashdata with ease
*
*/
class Flash {
var $CI;
var $data = array();
var $layout = '<div class="%s">%s</div>';
var $_prefix = '_flash';
function Flash() {
$this->CI =& get_instance();
$this->CI->load->library('session');
$this->_local_store();
}
function get($format = TRUE, $keep = FALSE) {
$data = unserialize($this->CI->session->userdata($this->_prefix));
if ($keep === FALSE) {
$this->CI->session->unset_userdata($this->_prefix);
}
if ($format === TRUE AND is_array($data) AND count($data) > 0) {
$data_temp = '';
foreach ($data as $d) {
$data_temp .= sprintf($this->layout, $d['class'], $d['message']) . "rn";
}
$data = (string) $data_temp;
unset($data_temp);
}
$this->_local_store();
return $data;
}
function add($message, $class = 'error') {
$this->_local_store();
$store = array(
'message' => $message,
'class' => $class,
'layout' => $this->layout,
);
$this->data[] = $store;
$this->CI->session->set_userdata($this->_prefix,serialize($this->data));
}
function _local_store() {
$this->data = unserialize($this->CI->session->userdata($this->_prefix));
}
}
?>
Achei que o método Flashdata da Biblioteca de Sessões do CodeIgniter não era bom o suficiente para muitos dos meus projetos, então configurei esta Biblioteca de uma forma mais fácil, mas simples de usar.
Como muitos casos de uso de flashdata mostram erros ou mensagens de validação (na minha opinião), ele deve ser ajustado dessa forma. Basta adicionar uma mensagem como esta:
$this->flash->add('Yay it works','valid');
e aparecerá na próxima vez que você ligar:
echo $this->flash->get();
algo assim :
<div class="valid">Yay it works</div>
O que eu mais precisava era colocar várias mensagens na fila. Portanto, o método add permite apenas que você adicione quantos “flashes” desejar. então
$this->flash->add('Yay it works','valid');
$this->flash->add('Yay it works, still','valid');
Exibirá 2 caixas.
Você também pode alterar o “layout” facilmente, alterando o parâmetro de layout. Você pode fazer algo como:
$this->flash->layout = '<div><span class="%s_icon"></span>%s</div>';
Mas mantenha as coisas simples, pois a primeira var será o parâmetro “class” (segundo parâmetro no método add ()), e a segunda será a mensagem, se você precisar de mais flexibilidade, terá que hackear o add ( ) método você mesmo … Desculpe por isso.
Espero que isso ajude, fique à vontade para comentar e adicionar algumas funcionalidades em seu próprio pastebin: http://pastebin.com/Me1nNHxh