2013-11-15 3 views
0

Попытка изменить функцию флэш-сообщения, но она не работает вообще. Является ли $_SESSION[$type][$name] и т. Д. Форматом неприемлемым?Функция флеш-сообщений с массивами не работает

function flash($type = '', $name = '', $message = '', $class = '', $dismiss = '') 
{ 
//We can only do something if name exists 
if($name) 
{ 
    //No message, create it 
    if($message && empty($_SESSION[$type][$name])) 
    { 
     $_SESSION[$type][$name] = $message; 
     $_SESSION[$type][$name][$class] = $class; 
     $_SESSION[$type][$name][$dismiss] = $dismiss; 
    } 
    //Message exists, display it 
    else if($_SESSION[$type][$name] && empty($message)) 
    { 
     echo '<div class="'.$_SESSION[$type][$name][$class].'">'.$_SESSION[$type][$name].' '.$_SESSION[$type][$name][$dismiss].'</div>'; 
     unset($_SESSION[$type]); 
    } 
} 
} 

Использование будет:

// set a message 
<?php flash('error', 'test', 'whats up?', 'info', 'TRUE'); ?> 

// display a message 
<?php flash('test'); ?> 

ответ

0

Я думаю, что проблема у Вас есть это вы перезапись $message с массивом здесь:

$_SESSION[$type][$name] = $message; // Sets the message 
$_SESSION[$type][$name][$class] = $class; // Overwrites it with an array 

Все, что вам нужно чтобы сохранить сообщение в том же массиве (и убедитесь, что указатель, который вы ему указываете, никогда не может быть таким же, как $class или $dismiss. Так например:

$_SESSION[$type][$name]['messagetext'] = $message; 

Тогда, конечно, обновить дисплей часть кода, чтобы использовать этот индекс:

echo '<div class="'.$_SESSION[$type][$name][$class].'">'.$_SESSION[$type][$name]['messagetext'].' '.$_SESSION[$type][$name][$dismiss].'</div>'; 

EDIT: После обсуждения в комментариях, окончательный код может выглядеть следующим образом при наличии только будет одно сообщение на $type и $name сочетание:

function flash($type = '', $name = '', $message = '', $class = '', $dismiss = '') 
{ 
//We can only do something if name exists 
if($type) 
{ 
    //No message, create it 
    if($message && empty($_SESSION[$type][$name])) 
    { 
     $_SESSION[$type][$name]['message'] = $message; 
     $_SESSION[$type][$name]['class'] = $class; 
     $_SESSION[$type][$name]['dismiss'] = $dismiss; 
    } 
    //Message exists, display it 
    else if($_SESSION[$type] && empty($message)) 
    { 
     foreach($_SESSION[$type] as $name=>$array) { 
      echo '<div class="'.$_SESSION[$type][$name]['class'].'">'.$_SESSION[$type][$name]['message'].' '.$_SESSION[$type][$name]['dismiss'].'</div>'; 
     } 
     unset($_SESSION[$type]); 

    } 
} 
} 

Использование будет:

// set a message 
<?php flash('error', 'test', 'whats up?', 'info', 'TRUE'); ?> 

// display all $type= 'error' messages 
<?php flash('error'); ?> 
+0

$ _SESSION [$ type] [$ name] [$ message] = $ message; ничего не меняет ... по какой-то причине массив не создается. Приходящие значения - это то, что я пытаюсь добавить в массив, а затем для вывода их на экран. Имеет смысл хранить их как массив, но я не могу заставить его работать как есть. – user756659

+0

Вы не можете использовать '$ _SESSION [$ type] [$ name] [$ message]', как в вашем 'Message exists ...' pass, вы не знаете, что такое '$ message' - вот почему я установите его на жестко закодированное значение (я выбрал «messagetext», поскольку я предположил, что он вряд ли столкнется с '$ class' или' $ увольнением'). – danielpsc

+0

Также я только что заметил ваше изменение «Использование» - вам нужно передать '$ type' и' $ name' ко второму вызову, иначе проверка '$ _SESSION [$ type] [$ name]' будет всегда потерпеть неудачу. – danielpsc

 Смежные вопросы

  • Нет связанных вопросов^_^