Zen-cart消息提示messageStack类详解[转载]

类文件:includes/classes/message_stack.php

初始化:

$autoLoadConfig[0][] = array('autoType'=>'class',
                              'loadFile'=>'message_stack.php');
 
$autoLoadConfig[130][] = array('autoType'=>'classInstantiate',
                               'className'=>'messageStack',
                               'objectName'=>'messageStack');

最终得到一个消息堆栈类变量$messageStack。首先看此类的构造函数:

function messageStack() {
 
  $this->messages = array();
 
  if (isset($_SESSION['messageToStack']) && $_SESSION['messageToStack']) {
    $messageToStack = $_SESSION['messageToStack'];
    for ($i=0, $n=sizeof($messageToStack); $i<$n; $i++) {
      $this->add($messageToStack[$i]['class'], $messageToStack[$i]['text'], $messageToStack[$i]['type']);
    }
    $_SESSION['messageToStack']= '';
  }
}

用messages数组来保存消息栈,然后接收来自$_SESSION[‘messageToStack’]的消息(如果有),调用add压入数组。实际上,当调用add_session方法时,信息将记录到$_SESSION[‘messageToStack’]数组中,表示这个信息是来自上一次请求产生的。

这个类最重要的就是add方法:

function add($class, $message, $type = 'error') {
  global $template, $current_page_base;
  $message = trim($message);
  $duplicate = false;
  if (strlen($message) > 0) {
    if ($type == 'error') {
      $theAlert = array('params' => 'class="messageStackError larger"', 'class' => $class, 'text' => zen_image($template->get_template_dir(ICON_IMAGE_ERROR, DIR_WS_TEMPLATE, $current_page_base,'images/icons'). '/' . ICON_IMAGE_ERROR, ICON_ERROR_ALT) . '  ' . $message);
    } elseif ($type == 'warning') {
    } elseif ($type == 'success') {
    } elseif ($type == 'caution') {
    } else {
      $theAlert = array('params' => 'class="messageStackError larger"', 'class' => $class, 'text' => $message);
    }
    //确保不重复
    for ($i=0, $n=sizeof($this->messages); $i<$n; $i++) {
      if ($theAlert['text'] == $this->messages[$i]['text'] && $theAlert['class'] == $this->messages[$i]['class']) $duplicate = true;
    }
    if (!$duplicate) $this->messages[] = $theAlert;
  }
}

 

 

这个方法的第一个参数是信息的分组标识符,比如在购物车产生的信息,可用shopping_cart这个标识符来记录所有的信息,方法的第三参数是信息类型,一共有error warning success caution,success表示成功操作时使用,error表示产生错误时使用,warning和caution都表示警告,warning的程度比较重,用来发出警告信息时使用。

add_session方法的调用跟add方法类似,不过它会把信息同时压入$_SESSION[‘messageToStack’]中(构造函数利用它获取来此上次请求的消息):

function add_session($class, $message, $type = 'error') {
 
  if (!$_SESSION['messageToStack']) {
    $messageToStack = array();
  } else {
    $messageToStack = $_SESSION['messageToStack'];
  }
 
  $messageToStack[] = array('class' => $class, 'text' => $message, 'type' => $type);
  $_SESSION['messageToStack'] = $messageToStack;
  $this->add($class, $message, $type);
}

 

 

要注意正确使用add和add_session,如果信息不需要在下一个请求中共享,只需要调用add即可。一般,如果POST提交了,最后可能发起一次新的请求,如果POST过程有信息产生,这个时候就要用add_session。

output($class)方法用来输出信息,$class表示分组标识符。size($class)表示$class这个分组的信息大小。

posted @ 2016-09-10 09:30  九维  阅读(197)  评论(0编辑  收藏  举报