/** * st_col function. * * @access public * @static * @param mixed $atts * @param mixed $content * @return void */ public static function st_col($atts, $content) { $atts = shortcode_atts(array('width' => '1/1'), $atts); extract($atts); self::$shortcode_count++; $out = ''; $class = stpb_layout_column_class(str_replace('/', '-', $width)); $out .= '<div class="' . esc_attr(trim($class)) . '">'; $out .= do_shortcode($content); $out .= '</div>'; $out = apply_filters('st_col', $out, $atts); return $out; }
function group_columns_to_row($cols, $level = 1, $parent_type = '') { $rows = array(); $ri = $i = 0; $n = count($cols); while ($i < $n) { $width = $this->get_col_width($cols[$i]); $c = $this->divider($width); if ($rows[$ri]['total'] + $c <= 1) { $rows[$ri]['total'] += $c; $rows[$ri]['cols'][] = $cols[$i]; } else { $ri++; $rows[$ri]['total'] += $c; $rows[$ri]['cols'][] = $cols[$i]; } $rows[$ri]['__type'] = $cols[$i]['type']; $i++; } // end while // generate code to display: maybe html or shortcode $string_shortcode = array(); $n_rows = count($rows); $row_data = false; foreach ($rows as $j => $row) { $str_cols = array(); $i = 1; $nr = count($row['cols']); $row_wrapper_class = ''; $row_data = false; foreach ($row['cols'] as $ci => $data) { // row - column index $rc = 'index-' . $i; if ($i == $nr) { $rc .= ' last '; } if ($i == 1) { $rc .= ' first '; } $i++; $data = stripslashes_deep($data); $width = $this->get_col_width($data); $item_class = ''; //$item_class =' lv-'.$level; if (strtolower($data['type']) == 'item') { $row_wrapper_class = ' items-inside'; $item_class = ' ' . stpb_layout_column_class('1-1') . ' ' . $item_class; $item = $this->builder_items[$data['item_func']]; if (empty($item)) { $item = $this->builder_items[$data['builder_item_func']]; } $i_class = ' index-' . ($j + 1); if ($j == 0) { $i_class .= ' first'; } if ($j == $n_rows - 1) { $i_class .= ' last'; } $row_wrapper_class .= $i_class; if (function_exists($item['generate_func'])) { $func_class = str_replace(array('generate_', '_'), array('', '-'), $item['generate_func']); //$str_cols[]="<div class=\"".apply_filters('stpb_item_generate_class',"builder-item".$item_class." $rc", $data)."\" ><div class=\"item-inner {$func_class}\">".call_user_func($item['generate_func'],$data)."</div> </div>"; //$str_cols[]="<div class=\"item-inner ".apply_filters('stpb_item_generate_class',"builder-item".$item_class." $rc", $data)." {$func_class}\">".call_user_func($item['generate_func'],$data)."</div> "; if ($level == 1) { if (in_array($item['generate_func'], array('stpb_generate_map', 'stpb_generate_LayerSlider', 'stpb_generate_revslider'))) { // fake is row $row['__type'] = 'row'; $row_data = array('settings' => array('_classes' => $func_class)); $str_cols[] = call_user_func($item['generate_func'], $data); } else { $str_cols[] = "<div class=\"" . apply_filters('stpb_item_generate_class', "builder-item" . $item_class . " {$rc}", $data) . "\" ><div class=\"item-inner {$func_class}\">" . call_user_func($item['generate_func'], $data) . "</div> </div>"; } } else { $str_cols[] = "<div class=\"item-inner {$func_class}\">" . call_user_func($item['generate_func'], $data) . "</div>"; } } else { $str_cols[] = "<div class=\"nothing-inside " . apply_filters('stpb_item_generate_class', "builder-item" . $item_class . " {$rc}", $data) . "\"> </div>"; } } elseif (strtolower($data['type']) == 'column') { // if item is a column $row_wrapper_class = ' columns-inside'; $data['settings'] = array_filter($data['settings']); $str_cols[] = ' <div class=" ' . apply_filters('stpb_column_generate_class', "builder-column " . stpb_layout_column_class($width, $level) . $item_class . " {$rc}", $data) . '"> ' . apply_filters('stpb_column_generate_settings_before', '', $data) . self::group_columns_to_row($data['items'], $level + 1, 'column') . apply_filters('stpb_column_generate_settings_after', '', $data) . ' </div> '; } elseif (strtolower($data['type']) == 'row') { // $data['settings'] = array_filter($data['settings']); $row_data = $data; $row_wrapper_class = ' rows-inside'; // row- secction mod //$row_data['settings']['_classes'] = apply_filters('stpb_row_generate_class','builder-row'.$item_class." $rc", $data); $str_cols[] = self::group_columns_to_row($data['items'], $level + 1, 'row'); // .apply_filters('stpb_row_generate_settings_after','',$data); } else { $str_cols[] = "<div class=\"no-item-inside" . stpb_layout_column_class($width, $level) . $item_class . "\"></div>"; } } $str_cols = join("\n", $str_cols); $classes = 'items-wrapper ' . $row_wrapper_class; if ($level < 2) { $classes .= ' row'; } $index_class = ''; /* if($level<2){ $index_class.=' r-index-'.($j+1); if($j==0){ $index_class .=' r-first'; } if($j==$n_rows-1){ $index_class .=' r-last'; } } */ // echo var_dump($row['__type'])."\n\n<hr/>\n\n"; if ($row_data) { $content = $str_cols; } else { $content = '<div class="' . apply_filters('stpb_wraper_class', $classes, $level, $row) . '">' . $str_cols . ' <div class="clear"></div> </div>'; } $string_shortcode[] = array('content' => $content, 'type' => $row['__type'], 'data' => $row_data); $row_index++; } $a_content = array(); $isc = 0; $is_new_row = false; foreach ($string_shortcode as $k => $e) { if ($e['type'] != 'row') { if ($is_new_row) { $isc++; $is_new_row = false; } $a_content[$isc]['c'][] = $e['content']; $a_content[$isc]['data'] = $e['data']; } else { $isc++; $a_content[$isc]['c'] = $e['content']; $a_content[$isc]['data'] = $e['data']; $is_new_row = true; } } unset($string_shortcode, $isc); // $a_content = array_filter($a_content); $return_content = ''; $ca = count($a_content); $aindex = 0; foreach ($a_content as $k => $e) { $classes = array(); $classes[] = 'section section-' . ($aindex + 1); $classes[] = ' lv-' . $level; if ($aindex == 0) { $classes[] = ' first'; } if ($aindex == $ca - 1) { $classes[] = 'last'; } if ($level == 1) { if (!empty($e['data']) && is_array($e['data'])) { $e['data']['settings']['_classes'] .= ' ' . join(' ', $classes); $return_content .= apply_filters('stpb_row_generate_settings_before', '', $e['data']); } else { $classes[] = 'g'; $return_content .= '<div class="' . join(' ', $classes) . '">'; } } if (is_array($e['c']) && count($e['c']) > 1) { //$return_content .= join(' ', $e['c']); $n = count($e['c']); foreach ($e['c'] as $k => $c) { $classs = 'bd-row row-' . $k . ' n-' . $n . ' lv-' . $level; if ($k == 0) { $classs .= ' first'; } if ($k == $n - 1) { $classs .= ' last'; } if ($level < 2) { $classs .= ' row'; } $classs .= ' clearfix'; $return_content .= '<div class="' . $classs . '">' . $c . '</div>'; } } else { $c = is_string($e['c']) ? $e['c'] : $e['c'][0]; if ($level == 1) { $c = '<div class="bd-row one first last clearfix lv-1">' . $c . '</div>'; } $return_content .= $c; unset($c); } if ($level == 1) { if (!empty($e['data']) && is_array($e['data'])) { $return_content .= apply_filters('stpb_row_generate_settings_after', '', $e['data']); } else { $return_content .= "</div>"; } } $aindex++; } // $string_shortcode = join("\n",$string_shortcode); return $return_content; }