phoenixg 发表于 2012-5-7 13:21:30

自己写的面包屑轨迹实现,求意见

本帖最后由 phoenixg 于 2012-5-7 14:24 编辑

水平有限,求意见,高手勿喷

命名成Breadcrumb.php添加进application/libraries/,加载即可



<?phpif (!defined('BASEPATH')) exit('No direct script access allowed');
   
/**
* Bread Crumb Generator
*
* @author 爱业星辰
*/
/* 使用方法/测试
默认根据segment
$this->append_crumb();
也可以自定义alias
$this->append_crumb('alias');
*/
class Breadcrumb {
    private $_CI;
    private static $_breadcrumb = array();
    private $_delimiter = ' > ';
    protected $home = 'HOME';
    protected $base_url;
    protected $index = 'index.php';
   
    /**
   * 初始化
   */
    public function __construct()
    {
      //获取CI实例
      $this->_CI = & get_instance();
      
      //获取基础路径
      $this->base_url = $this->_CI->config->item('base_url');
      
      //初始化
      $this->_init_crumb();
      
      //添加log
      log_message('debug', "Breadcrumb Class Initialized");
    }
   
    /**
   * 初始化面包屑数组
   */
    private function _init_crumb()
    {
      $this->_breadcrumb = array(
                              '0' => array($this->home => $this->base_url . $this->index . '/')
      );
    }
   
    /**
   * 添加一条面包屑
   * @param $alias
   */
    public function append_crumb($alias = '')
    {
      $cnt = count($this->_breadcrumb);
      
      if (!in_array($cnt, array('1','2','3')))
      {
            return;
      }
      
      $seg1 = $this->_CI->uri->segment(1,'');
      $seg2 = $this->_CI->uri->segment(2,'');
      $seg3 = $this->_CI->uri->segment(3,'');
      
      $base_url_full = $this->_breadcrumb['0'][$this->home];
      
      if ($cnt == 1)
      {   
            $display = ($alias == '') ? strtoupper($seg1) : strtoupper($alias);
            $this->_breadcrumb[] = array($display => $base_url_full . $seg1 . '/');
      }
      
      if ($cnt == 2)
      {
            $display = ($alias == '') ? strtoupper($seg2) : strtoupper($alias);
            $this->_breadcrumb[] = array($display => $base_url_full . $seg1 . '/' . $seg2 . '/');
      }
      
      if ($cnt == 3)
      {
            $display = ($alias == '') ? strtoupper($seg3) : strtoupper($alias);
            $this->_breadcrumb[] = array($display => $base_url_full . $seg1 . '/' . $seg2 . '/' . $seg3 . '/');
      }
      
    }
   
    /**
   * 生成面包屑HTML
   */
    public function output()
    {
      $html = '<div>';
      foreach ($this->_breadcrumb as $crumb)
      {
            foreach ($crumb as $display => $addr)
            {
                $html .= '<a href='.$addr.'>' . $display . '</a>' . $this->_delimiter;
            }
      }
      
      $html = rtrim($html, $this->_delimiter).'</div>';
      return $html;
    }
}



yuzhigang5460 发表于 2012-5-7 17:45:20


$_delimiter也没暴露出来,不想用>怎么办。

phoenixg 发表于 2012-5-7 18:02:02

本帖最后由 phoenixg 于 2012-5-8 13:07 编辑

yuzhigang5460 发表于 2012-5-7 17:45 static/image/common/back.gif
$_delimiter也没暴露出来,不想用>怎么办。
谢谢!意见采纳!改进后的版本如下:


//application/config/breadcrumb.php
<?phpif ( ! defined('BASEPATH')) exit('No direct script access allowed');

$config['breadcrumb_delimiter'] = '&nbsp;>&nbsp;';
$config['breadcrumb_css_id'] = 'breadcrumb';
$config['breadcrumb_html_type'] = 'anchor';//anchor , ul
$config['breadcrumb_home'] = 'HOME';
$config['breadcrumb_index'] = 'index.php';
//application/libraries/Breadcrumb.php
<?phpif (!defined('BASEPATH')) exit('No direct script access allowed');

/**
* Bread Crumb Generator
*
* @author 爱业星辰
*
* Usage:
$this->breadcrumb->init_crumb(array('DELIMITER' => '&nbsp;>&nbsp;', 'HTML_TYPE' => 'anchor'));//optional (default)
or
$this->breadcrumb->init_crumb(array('DELIMITER' => '|', 'HTML_TYPE' => 'anchor')); //optional
or
$this->breadcrumb->init_crumb(array('HTML_TYPE' => 'ul')); //optional

    $this->breadcrumb->append_crumb();
    or
$this->breadcrumb->append_crumb('aliasA', 1);
$this->breadcrumb->append_crumb('aliasB', 2);
$this->breadcrumb->append_crumb('aliasC', 3);

$this->breadcrumb->generateHTML();
*/

class Breadcrumb {
private static $_breadcrumb = array();
private $_CI;
private $_delimiter;
private $_css_id;
private $_html_type;
protected $home;
protected $index;
protected $base_url;

/**
* initialize
*/
public function __construct()
{
//get instance of CI
$this->_CI = & get_instance();

//load global config file
$this->_CI->config->load('breadcrumb');

//get config item
$this->_delimiter = $this->_CI->config->item('breadcrumb_delimiter');
$this->_css_id = $this->_CI->config->item('breadcrumb_css_id');
$this->_html_type = $this->_CI->config->item('breadcrumb_html_type');
$this->home = $this->_CI->config->item('breadcrumb_home');
$this->index = $this->_CI->config->item('breadcrumb_index');
$this->base_url = $this->_CI->config->item('base_url');

//initialize crumb array
$this->_init_crumb_arr();

//add log
log_message('debug', "Breadcrumb Class Initialized");
}

/**
* initialize user defined configuration
*/
public function init_crumb($config = array())
{
$this->_delimiter = isset($config['DELIMITER']) ? $config['DELIMITER'] : $this->_delimiter;
$this->_html_type = isset($config['HTML_TYPE']) ? $config['HTML_TYPE'] : $this->_html_type;
}

/**
* initialize crumb array
*/
private function _init_crumb_arr()
{
$this->_breadcrumb = array(
      '0' => array($this->home => $this->base_url . $this->index . '/')
);
}

/**
* append a crumb
* @param $alias
*/
public function append_crumb($alias = '', $segments = null)
{
$cnt = count($this->_breadcrumb);

$seg_num = ($segments == null) ? $cnt : $segments;

if (!in_array($seg_num, array('1','2','3')))
{
   return;
}

$seg1 = $this->_CI->uri->segment(1,'');
$seg2 = $this->_CI->uri->segment(2,'');
$seg3 = $this->_CI->uri->segment(3,'');

$base_url_full = $this->_breadcrumb['0'][$this->home];

if ($seg_num == 1)
{
   $display = ($alias == '') ? strtoupper($seg1) : strtoupper($alias);
   $this->_breadcrumb[] = array($display => $base_url_full . $seg1 . '/');
}

if ($seg_num == 2)
{
   $display = ($alias == '') ? strtoupper($seg2) : strtoupper($alias);
   $this->_breadcrumb[] = array($display => $base_url_full . $seg1 . '/' . $seg2 . '/');
}

if ($seg_num == 3)
{
   $display = ($alias == '') ? strtoupper($seg3) : strtoupper($alias);
   $this->_breadcrumb[] = array($display => $base_url_full . $seg1 . '/' . $seg2 . '/' . $seg3 . '/');
}

}

/**
* generate crumb HTML
*/
public function generateHTML()
{
switch ($this->_html_type) {
   case 'anchor':
    $html = '<div id='.$this->_css_id.'>';
    foreach ($this->_breadcrumb as $crumb)
    {
   foreach ($crumb as $display => $addr)
   {
      $html .= '<a href='.$addr.' target="_blank">' . $display . '</a>' . $this->_delimiter;
   }
    }
   
    $html = rtrim($html, $this->_delimiter).'</div>';
   break;
   
   case 'ul':
    $html = '<ul id='.$this->_css_id.'>';
    foreach ($this->_breadcrumb as $crumb)
    {
   foreach ($crumb as $display => $addr)
   {
      $html .= '<li><a href='.$addr.' target="_blank">' . $display . '</a></li>';
   }
    }
    $html .= '</ul>';
   break;
}

return $html;
}
}




亻卬朢忝倥 发表于 2013-8-20 14:44:49

楼主,这个用的时候怎么用,能给个例子吗?
页: [1]
查看完整版本: 自己写的面包屑轨迹实现,求意见