function set_breadcrumb($delimiter_config = '', $exclude = '', $config = array())
 {
     $CI =& get_instance();
     $CI->load->helper('url');
     $CI->lang->load('breadcrumb');
     $CI->config->load('breadcrumb');
     // Load configuration
     $ci_version = $CI->config->item('codeigniter_version');
     /* --- Chris Miller's Patch --- */
     /* Go to this link http://codeigniter.com/forums/viewthread/137949/P190
      * for guidance.
      * @author Chris Miller
      */
     $attr_home = isset($config['attr_home']) ? $config['attr_home'] : $CI->config->item('attr_home');
     $unlink_home = isset($config['unlike_home']) ? $config['unlike_home'] : $CI->config->item('unlike_home');
     if (empty($exclude)) {
         $exclude = $CI->config->item('exclude');
     }
     $exclude_segment = isset($config['exclude_segment']) ? array_merge($CI->config->item('exclude_segment'), $config['exclude_segment']) : $CI->config->item('exclude_segment');
     $replacer_default = isset($config['replacer']) ? array_merge($CI->config->item('replacer'), $config['replacer']) : $CI->config->item('replacer');
     $replacer_embed = isset($config['replacer_embed']) ? array_merge($CI->config->item('replacer_embed'), $config['replacer_embed']) : $CI->config->item('replacer_embed');
     $partial_replace = isset($config['partial_replace']) ? array_merge($CI->config->item('partial_replace'), $config['partial_replace']) : $CI->config->item('partial_replace');
     /* --- End Patch --- */
     $uri = rtrim($CI->uri->uri_string(), '/');
     $uri_array_original = explode("/", $uri);
     // cahva's fix (http://codeigniter.com/forums/viewreply/855097/)
     $uri_array_cnt = count($uri_array_original);
     if (config_item('hide_number_on_last_segment') && isset($uri_array_original[$uri_array_cnt - 1]) && is_numeric($uri_array_original[$uri_array_cnt - 1])) {
         array_pop($uri_array_original);
     }
     // <-- End cahva's fix (http://codeigniter.com/forums/viewreply/855097/)
     // If last segment is a number ?
     $show_last_number = -1;
     $number_array = count($uri_array_original);
     if (!$CI->config->item('hide_number_on_last_segment')) {
         $l_array = $number_array - 1;
         // last array number
         if (preg_match("/^[0-9]/", $uri_array_original[$l_array]) and !preg_match("/[a-zA-Z]+/", $uri_array_original[$l_array])) {
             $show_last_number = $l_array;
         }
     }
     // Find segments uri that only contain a number
     foreach ($uri_array_original as $key => $value) {
         // find number but keep number where positioned in the last segment
         if (preg_match("/^[0-9]/", $value) and !preg_match("/[a-zA-Z]+/", $value) and $key != $show_last_number) {
             $uri_array_original[$key] = (int) $value;
             // If hide_number is TRUE then set the $exclude_segment array variable;
             if ($CI->config->item('hide_number')) {
                 $exclude_segment = array_merge($exclude_segment, array($key));
             }
         }
     }
     // Preparing the replacer, add exclude to replacer array
     foreach ($exclude as $value) {
         $prep_exclude[$value] = '';
         //if exclude then it's value is set to null
     }
     $replacer = $replacer_default + $prep_exclude;
     // $replacer_embed usually set on controller;
     $replacer = $replacer_embed + $replacer;
     // Find uri segment from $replacer and $exclude_segment
     $replacer_null = array();
     foreach ($replacer as $key => $value) {
         if (empty($value)) {
             //$replacer_null[] = array_search($key, $uri_array_original, TRUE);
             $replacer_null[] = array_search($key, $uri_array_original);
         }
     }
     $skip_key = array_merge($replacer_null, $exclude_segment);
     $uri_array = $uri_array_original;
     // Change link name as mentioned on $replacer
     foreach ($replacer as $key => $value) {
         if ($value && in_array($key, $uri_array_original, TRUE)) {
             $key_uri = array_search($key, $uri_array_original, TRUE);
             // Add multilanguage
             if (!is_array($value) && $CI->config->item('multilang')) {
                 if ($CI->lang->line($value)) {
                     $value = ucwords($CI->lang->line($value));
                 }
             }
             $replacement = array($key_uri => $value);
             $uri_array = array_replace($uri_array, $replacement);
         }
     }
     // Set wrapper
     $wrapper = explode("|", $CI->config->item('wrapper'));
     $wrapper_inline = explode("|", $CI->config->item('wrapper_inline'));
     if (!$CI->config->item('use_wrapper')) {
         $wrapper = array('', '');
         $wrapper_inline = array('', '');
     }
     // Begin writing breadcrumb string
     $init_link = $CI->config->item('set_home');
     if ($init_link != "") {
         if ($CI->config->item('multilang')) {
             $init_link = $CI->lang->line('set_home');
         }
         $str_first = $wrapper[0] . $wrapper_inline[0] . anchor('', $init_link, $attr_home) . $wrapper_inline[1];
         if ($unlink_home) {
             $str_first = $wrapper[0] . $wrapper_inline[0] . $init_link . $wrapper_inline[1];
         }
     } else {
         $str_first = $wrapper[0];
     }
     $segment = '';
     $i = 0;
     foreach ($uri_array as $value) {
         if ($i > 0 or $ci_version == '2.x') {
             $segment .= $uri_array_original[$i] . '/';
             // If replace value is an array
             if (!in_array($i, $skip_key, TRUE) && is_array($value)) {
                 $number_added_value_array = count($value);
                 foreach ($value as $pair_values) {
                     $pv_array = explode("|", $pair_values);
                     $val_url = $pv_array[0];
                     $number_pv_array = count($pv_array);
                     if ($number_pv_array == 1) {
                         $val_name = $pv_array[0];
                     } else {
                         $val_name = $pv_array[1];
                     }
                     // Add multilanguage
                     if ($CI->config->item('multilang')) {
                         if ($CI->lang->line($val_name)) {
                             $val_name = ucwords($CI->lang->line($val_name));
                         }
                     }
                     // Look up for partial replace
                     if (!empty($partial_replace)) {
                         foreach ($partial_replace as $pkey => $pvalue) {
                             if ($CI->config->item('multilang')) {
                                 $lang_pvalue = $CI->lang->line($pvalue) ? $CI->lang->line($pvalue) : $CI->lang->line($pkey);
                                 $preplace = ' ' . $lang_pvalue . '_';
                             } else {
                                 $preplace = ' ' . $pvalue . '_';
                             }
                             if (substr_count($val_name, $pkey) > 0) {
                                 $val_name = str_replace($pkey, $preplace, $val_name);
                             }
                         }
                     }
                     // Url preparation
                     // If no url define (array key is empty)
                     if ($number_pv_array == 1 || $val_url == $uri_array_original[$i]) {
                         $new_segment_url = $segment;
                     } else {
                         if ($val_url[0] == '/') {
                             $new_segment_url = base_url() . substr($val_url, 1);
                         } else {
                             $new_segment_url = $segment . $val_url;
                         }
                     }
                     $str_link[] = $new_segment_url;
                     $str_name[] = ucwords($val_name);
                 }
             } else {
                 if (!in_array($i, $skip_key, TRUE)) {
                     // Add multilanguage
                     if ($CI->config->item('multilang')) {
                         if ($CI->lang->line($value)) {
                             $value = ucwords($CI->lang->line($value));
                         }
                     }
                     // Look up for partial replace
                     if (!empty($partial_replace)) {
                         foreach ($partial_replace as $pkey => $pvalue) {
                             if ($CI->config->item('multilang')) {
                                 $lang_pvalue = $CI->lang->line($pvalue) ? $CI->lang->line($pvalue) : $CI->lang->line($pkey);
                                 $preplace = ' ' . $lang_pvalue . '_';
                             } else {
                                 $preplace = ' ' . $pvalue . '_';
                             }
                             if (substr_count($value, $pkey) > 0) {
                                 $value = str_replace($pkey, $preplace, $value);
                             }
                         }
                     }
                     // Auto link make over
                     if (strpos($value, "_") or strpos($value, "-")) {
                         $char_to_replace = $CI->config->item('strip_characters');
                         $value = ucwords(strtolower(str_replace($char_to_replace, " ", $value)));
                         if ($CI->config->item('strip_regexp')) {
                             foreach ($CI->config->item('strip_regexp') as $exp) {
                                 $value = preg_replace($exp, '', $value);
                             }
                         }
                     }
                     $str_link[] = $segment;
                     $str_name[] = ucwords($value);
                 }
             }
         }
         $i++;
     }
     /* --- Chris Miller's Patch --- */
     // Check for custom additions
     if (isset($config['include_segments'])) {
         // Set our variable for usage
         $include_segments = $config['include_segments'];
         // Loop our config array
         foreach ($include_segments as $k => $v) {
             $str_link[] = $k;
             $str_name[] = ucwords($v);
         }
     }
     /* --- End Patch --- */
     $str_last = $wrapper[1];
     $str = $str_first;
     if (isset($str_name)) {
         $breadcrumb_number = count($str_name);
         if ($breadcrumb_number > 0) {
             $i = 0;
             foreach ($str_name as $key => $val) {
                 // If home is hidden then don't show first delimiter
                 if ($i == 0 && ($str == '' || $str == $wrapper[0])) {
                     $delimiter = '';
                 } elseif (empty($delimiter_config)) {
                     $delimiter = $CI->config->item('delimiter');
                 } else {
                     $delimiter = $delimiter_config;
                 }
                 if ($val != '') {
                     if ($key == $breadcrumb_number - 1 && $CI->config->item('unlink_last_segment')) {
                         $str .= $delimiter . $wrapper_inline[0] . ucwords($val) . $wrapper_inline[1];
                     } else {
                         $str .= $delimiter . $wrapper_inline[0] . anchor($str_link[$key], $val) . $wrapper_inline[1];
                     }
                 }
                 $i++;
             }
         }
     }
     $str .= $str_last;
     clear_breadcrumb();
     return $str;
 }
Exemplo n.º 2
0
 function set_breadcrumb($delimiter_config = '', $exclude = '')
 {
     $CI =& get_instance();
     $CI->load->helper('url');
     $CI->lang->load('breadcrumb');
     $CI->config->load('breadcrumb');
     // Load configuration
     $ci_version = $CI->config->item('codeigniter_version');
     $attr_home = $CI->config->item('attr_home');
     $unlink_home = $CI->config->item('unlink_home');
     if (empty($delimiter_config)) {
         $delimiter_config = $CI->config->item('delimiter');
     }
     if (empty($exclude)) {
         $exclude = $CI->config->item('exclude');
     }
     $exclude_segment = $CI->config->item('exclude_segment');
     $replacer_default = $CI->config->item('replacer');
     $partial_replace = $CI->config->item('partial_replace');
     $uri = rtrim($CI->uri->uri_string(), '/');
     $uri_array_original = explode("/", $uri);
     // cahva's fix (http://codeigniter.com/forums/viewreply/855097/)
     $uri_array_cnt = count($uri_array_original);
     if (config_item('hide_number_on_last_segment') && isset($uri_array_original[$uri_array_cnt - 1]) && is_numeric($uri_array_original[$uri_array_cnt - 1])) {
         array_pop($uri_array_original);
     }
     // <-- End cahva's fix (http://codeigniter.com/forums/viewreply/855097/)
     // If last segment is a number ?
     $show_last_number = -1;
     $number_array = count($uri_array_original);
     if (!$CI->config->item('hide_number_on_last_segment')) {
         $l_array = $number_array - 1;
         // last array number
         if (preg_match("/^[0-9]/", $uri_array_original[$l_array]) and !preg_match("/[a-zA-Z]+/", $uri_array_original[$l_array])) {
             $show_last_number = $l_array;
         }
     }
     // Find segments uri that only contain a number
     if ($CI->config->item('hide_number')) {
         foreach ($uri_array_original as $key => $value) {
             // exclude number but keep number where positioned in the last segment
             if (preg_match("/^[0-9]/", $value) and !preg_match("/[a-zA-Z]+/", $value) and $key != $show_last_number) {
                 $exclude_segment = array_merge($exclude_segment, array($key));
             }
         }
     }
     // Preparing the replacer, add exclude to replacer array
     foreach ($exclude as $value) {
         $prep_exclude[$value] = '';
         //if exclude then it's value is set to null
     }
     $replacer = array_merge($replacer_default, $prep_exclude);
     // Find uri segment from $replacer and $exclude_segment
     $replacer_null = array();
     foreach ($replacer as $key => $value) {
         if (empty($value)) {
             $replacer_null[] = array_search($key, $uri_array_original, TRUE);
         }
     }
     $skip_key = array_merge($replacer_null, $exclude_segment);
     $uri_array = $uri_array_original;
     // Change link name as mentioned on $replacer
     foreach ($replacer as $key => $value) {
         if ($value && in_array($key, $uri_array_original, TRUE)) {
             $key_uri = array_search($key, $uri_array_original, TRUE);
             // Add multilanguage
             if (!is_array($value) && $CI->config->item('multilang')) {
                 $value = ucwords($CI->lang->line($value));
             }
             $replacement = array($key_uri => $value);
             $uri_array = array_replace($uri_array, $replacement);
         }
     }
     // Set wrapper
     $wrapper = explode("|", $CI->config->item('wrapper'));
     $wrapper_inline = explode("|", $CI->config->item('wrapper_inline'));
     if (!$CI->config->item('use_wrapper')) {
         $wrapper = array('', '');
         $wrapper_inline = array('', '');
     }
     // Begin writing breadcrumb string
     $init_link = $CI->config->item('set_home');
     if ($init_link != "") {
         if ($CI->config->item('multilang')) {
             $init_link = $CI->lang->line('set_home');
         }
         $str = $wrapper[0] . $wrapper_inline[0] . anchor('', $init_link, $attr_home) . $wrapper_inline[1];
         if ($unlink_home) {
             $str = $wrapper[0] . $wrapper_inline[0] . $init_link . $wrapper_inline[1];
         }
     } else {
         $str = $wrapper[0];
     }
     $segment = '';
     $i = 0;
     foreach ($uri_array as $value) {
         if ($i > 0 or $ci_version == '2.x') {
             $segment .= $uri_array_original[$i] . '/';
             // If replace value is an array
             if (!in_array($i, $skip_key, TRUE) && is_array($value)) {
                 $number_added_value_array = count($value);
                 $k = 1;
                 foreach ($value as $pair_values) {
                     $pv_array = explode("|", $pair_values);
                     $val_url = $pv_array[0];
                     $number_pv_array = count($pv_array);
                     if ($number_pv_array == 1) {
                         $val_name = $pv_array[0];
                     } else {
                         $val_name = $pv_array[1];
                     }
                     // Look up for partial replace
                     if (!empty($partial_replace)) {
                         foreach ($partial_replace as $pkey => $pvalue) {
                             $preplace = ' ' . $pvalue . '_';
                             if (substr_count($val_name, $pkey) > 0) {
                                 $val_name = str_replace($pkey, $preplace, $val_name);
                             }
                         }
                     }
                     // Add multilanguage
                     if ($CI->config->item('multilang')) {
                         $val_name = ucwords($CI->lang->line($val_name));
                     }
                     // Url preparation
                     // If no url define (array key is empty)
                     if ($number_pv_array == 1 || $val_url == $uri_array_original[$i]) {
                         $new_segment_url = $segment;
                     } else {
                         if ($val_url[0] == '/') {
                             $new_segment_url = base_url() . substr($val_url, 1);
                         } else {
                             $new_segment_url = $segment . $val_url;
                         }
                     }
                     $delimiter = $str == $wrapper[0] ? '' : $delimiter_config;
                     // Unlink last segment (optional)
                     if ($i == $number_array - 1 && $CI->config->item('unlink_last_segment') && $k == $number_added_value_array) {
                         $str .= $delimiter . $wrapper_inline[0] . ucwords($val_name) . $wrapper_inline[1];
                         break;
                     }
                     $str .= $delimiter . $wrapper_inline[0] . anchor($new_segment_url, ucwords($val_name)) . $wrapper_inline[1];
                     $k++;
                 }
             } else {
                 if (!in_array($i, $skip_key, TRUE)) {
                     // Look up for partial replace
                     if (!empty($partial_replace)) {
                         foreach ($partial_replace as $pkey => $pvalue) {
                             $preplace = ' ' . $pvalue . '_';
                             if (substr_count($value, $pkey) > 0) {
                                 $value = str_replace($pkey, $preplace, $value);
                             }
                         }
                     }
                     // Auto link make over
                     if (strpos($value, "_") or strpos($value, "-")) {
                         $char_to_replace = $CI->config->item('strip_characters');
                         $value = ucwords(strtolower(str_replace($char_to_replace, " ", $value)));
                         if ($CI->config->item('strip_regexp')) {
                             foreach ($CI->config->item('strip_regexp') as $exp) {
                                 $value = preg_replace($exp, '', $value);
                             }
                         }
                     }
                     $delimiter = $str == $wrapper[0] ? '' : $delimiter_config;
                     // Unlink last segment (optional)
                     if ($i == $number_array - 1 && $CI->config->item('unlink_last_segment')) {
                         $str .= $delimiter . $wrapper_inline[0] . ucwords($value) . $wrapper_inline[1];
                         break;
                     }
                     $str .= $delimiter . $wrapper_inline[0] . anchor($segment, ucwords($value)) . $wrapper_inline[1];
                 }
             }
         }
         $i++;
     }
     $str .= $wrapper[1];
     clear_breadcrumb();
     return $str;
 }