}
                $li .= html_specialchars($GLOBALS['content']['struct'][$key]['acat_name']);
                $inorm = empty($param['icon'][$counter]['iconNormal']) ? '' : trim($param['icon'][$counter]['iconNormal']);
                $iover = empty($param['icon'][$counter]['iconOver']) ? '' : trim($param['icon'][$counter]['iconOver']);
                $li .= '", "' . $link . '", "' . $inorm . '", "' . $iover . '", , "' . $target . '", , , , ],' . LF;
                $li .= createDeluxeMenuJSCode($key, $counter + 1, $param);
            }
        }
        return $li;
    }
    /*******************************************************************************/
    $GLOBALS['DeluxeMenuParam']['start_at_ID'] = 0;
    $content['all'] = str_replace('{DELUXE_MENU}', '{DELUXE_MENU:0}', $content['all']);
    $content['all'] = preg_replace_callback('/\\{DELUXE_MENU:(.*?)\\}/', create_function('$matches', '$GLOBALS["DeluxeMenuParam"]["start_at_ID"]=$matches[1]; return "{DELUXE_MENU}";'), $content['all']);
    $DeluxeMenuParam['start_at_ID'] = intval($GLOBALS['DeluxeMenuParam']['start_at_ID']);
    $DeluxeMenuParam['js'] .= createDeluxeMenuJSCode($DeluxeMenuParam['start_at_ID'], $counter = 0, $DeluxeMenuParam);
    $DeluxeMenuParam['js'] .= LF . '   ]' . LF;
    $DeluxeMenuParam['text'] = '<script type="text/javascript">' . LF . SCRIPT_CDATA_START;
    $DeluxeMenuParam['text'] .= LF . 'dm_init();' . LF;
    $DeluxeMenuParam['text'] .= SCRIPT_CDATA_END . LF . '</script><noscript>';
    $DeluxeMenuParam['text'] .= buildCascadingMenu(',' . $DeluxeMenuParam['start_at_ID']);
    $DeluxeMenuParam['text'] .= '</noscript>';
    $block['custom_htmlhead']['DeluxeMenu'] = '  <script type="text/javascript">' . LF . '  ' . SCRIPT_CDATA_START . LF;
    $block['custom_htmlhead']['DeluxeMenu'] .= '    var dmWorkPath="' . $DeluxeMenuParam['base_path'] . '";';
    $block['custom_htmlhead']['DeluxeMenu'] .= LF . '  ' . SCRIPT_CDATA_END . LF . '  </script>' . LF;
    $block['custom_htmlhead']['DeluxeMenu'] .= '  <script type="text/javascript" src="' . $DeluxeMenuParam['base_path'] . 'dmenu.js"></script>';
    $block['custom_htmlhead']['DeluxeMenu'] .= LF . '  <script type="text/javascript">' . LF . '  ' . SCRIPT_CDATA_START . LF;
    $block['custom_htmlhead']['DeluxeMenu'] .= $DeluxeMenuParam['js'];
    $block['custom_htmlhead']['DeluxeMenu'] .= LF . '  ' . SCRIPT_CDATA_END . LF . '  </script>' . LF;
    $content['all'] = str_replace('{DELUXE_MENU}', $DeluxeMenuParam['text'], $content['all']);
}
Beispiel #2
0
function buildCascadingMenu($parameter = '', $counter = 0, $param = 'string')
{
    /*
    	@string $parameter:
    		menu_type,
    		start_id,
    		max_level_depth,
    		class_path|ul_class_level1|ul_class_level2|...,
    		class_active_li|class_active_a,
    		ul_id_name,
    		wrap_ul_div(0 = off, 1 = <div>, 2 = <div id="">, 3 = <div class="navLevel-0">),
    		wrap_link_text(<em>|</em>),
    		articlemenu_start_level|articlemenu_list_image_size (WxHxCROP OR WxHxCROP)|_
    			articlemenu_use_text (take text from: description:MAXLEN OR menutitle:MAXLEN OR teaser:MAXLEN OR teaser:HTML)|_
    			articlemenu_position (inside|outside)|_
    			<custom>[TEXT]{TEXT}[/TEXT][IMAGE]<img src="{IMAGE}" alt="{IMAGE_NAME}">[/IMAGE]</custom>
    */
    if ($param == 'string') {
        $parameter = explode(',', is_array($parameter) && isset($parameter[1]) ? $parameter[1] : $parameter);
        $menu_type = empty($parameter[0]) ? '' : strtoupper(trim($parameter[0]));
        $unfold = 'all';
        $ie_patch = false;
        // unused at the moment
        $create_css = false;
        $parent = false;
        // do not show parent link
        $articlemenu = false;
        // do not show category's article titles as menu entry
        $bootstrap = false;
        // bootstrap dropdown style
        /**
         * P = Show parent level
         * B = Bootstrap compatible rendering
         * A = Articles as menu items
         * F = Folded, unfold only active level
         * HCSS = Sample horizontal CSS based menu
         * VCSS = Sample vertical CSS based menu
         **/
        switch ($menu_type) {
            case 'B':
                $bootstrap = true;
                break;
            case 'BA':
                $bootstrap = true;
            case 'A':
                $articlemenu = true;
                break;
            case 'PBA':
                $bootstrap = true;
            case 'PA':
                $articlemenu = true;
            case 'P':
                $parent = true;
                break;
            case 'PB':
                $parent = true;
                $bootstrap = true;
                break;
                // vertical, active path unfolded
            // vertical, active path unfolded
            case 'FPA':
                $articlemenu = true;
            case 'FP':
                $parent = true;
            case 'F':
                $unfold = 'active_path';
                break;
            case 'FA':
                $articlemenu = true;
                $unfold = 'active_path';
                break;
            case 'HCSSP':
                $parent = true;
            case 'HCSS':
                $create_css = true;
                break;
            case 'VCSSP':
                $parent = true;
            case 'VCSS':
                $create_css = true;
                break;
        }
        $start_id = empty($parameter[1]) ? 0 : intval($parameter[1]);
        $max_depth = empty($parameter[2]) ? 0 : intval($parameter[2]);
        $path_class = empty($parameter[3]) ? '' : trim($parameter[3]);
        $active_class = empty($parameter[4]) ? '' : trim($parameter[4]);
        $level_id_name = empty($parameter[5]) ? '' : trim($parameter[5]);
        $wrap_ul_div = empty($parameter[6]) ? 0 : intval($parameter[6]);
        $amenu_options = array('enable' => false, 'image' => false, 'text' => false, 'width' => 0, 'height' => 0, 'crop' => 0, 'textlength' => 0, 'position' => 'outside', 'template' => '<span class="amenu-extended">[IMAGE]<img src="[%IMAGE%]" alt="[%IMAGE_NAME%]" />[/IMAGE][TEXT]<span class="p">[%TEXT%]</span>[/TEXT]</span>');
        if ($path_class) {
            $path_class = explode('|', $path_class);
            foreach ($path_class as $key => $class_name) {
                $path_class[$key] = trim($class_name);
            }
        } else {
            $path_class = array(0 => '');
        }
        if ($active_class) {
            $active_class = explode('|', $active_class, 2);
            $active_class[0] = trim($active_class[0]);
            $active_class[1] = empty($active_class[1]) ? '' : trim($active_class[1]);
        } else {
            $active_class = array(0 => '', 1 => '');
        }
        if ($wrap_ul_div > 3) {
            $wrap_ul_div = 2;
        } elseif ($wrap_ul_div < 0) {
            $wrap_ul_div = 0;
        }
        $wrap_link_text = empty($parameter[7]) ? array(0 => '', 1 => '') : explode('|', trim($parameter[7]), 2);
        if (empty($wrap_link_text[1])) {
            $wrap_link_text[1] = '';
        }
        if (empty($parameter[8])) {
            $amenu_level = 0;
        } else {
            $parameter[8] = explode('|', $parameter[8]);
            $amenu_level = intval($parameter[8][0]);
            if (!empty($parameter[8][1]) && ($parameter[8][1] = trim($parameter[8][1]))) {
                // articlemenu_list_image_size
                $parameter[8][1] = explode('x', $parameter[8][1]);
                $amenu_options['width'] = intval($parameter[8][1][0]);
                // width
                $amenu_options['height'] = empty($parameter[8][1][1]) ? 0 : intval($parameter[8][1][1]);
                // height
                $amenu_options['crop'] = empty($parameter[8][1][2]) ? 0 : 1;
                // crop
                $amenu_options['enable'] = true;
                $amenu_options['image'] = true;
            }
            if (!empty($parameter[8][2]) && ($parameter[8][2] = trim($parameter[8][2]))) {
                // articlemenu_use_text
                $parameter[8][2] = explode(':', $parameter[8][2]);
                $parameter[8][2][0] = strtolower(trim($parameter[8][2][0]));
                if ($parameter[8][2][0] == 'description' || $parameter[8][2][0] == 'menutitle' || $parameter[8][2][0] == 'teaser') {
                    // default is description
                    $amenu_options['text'] = $parameter[8][2][0];
                    if (empty($parameter[8][2][1])) {
                        $amenu_options['textlength'] = 0;
                    } elseif ($parameter[8][2][0] == 'teaser' && strtoupper($parameter[8][2][1]) == 'HTML') {
                        $amenu_options['textlength'] = 'HTML';
                    } else {
                        $amenu_options['textlength'] = intval($parameter[8][2][1]);
                        // set max text length
                    }
                    $amenu_options['enable'] = true;
                }
            }
            if ($amenu_options['enable'] && !empty($parameter[8][3]) && ($parameter[8][3] = trim($parameter[8][3])) && strtolower($parameter[8][3]) == 'inside') {
                // articlemenu_position
                $amenu_options['position'] = 'inside';
            }
            if ($amenu_options['enable'] && !empty($parameter[8][4])) {
                // template
                $amenu_options['template'] = str_replace(array('[%', '%]'), array('{', '}'), $parameter[8][4]);
            }
        }
        $parameter = array(0 => $menu_type, 1 => $start_id, 2 => $max_depth, 3 => $path_class, 4 => $active_class, 5 => $level_id_name, 6 => $wrap_ul_div, 7 => $wrap_link_text, 8 => $unfold, 9 => $ie_patch, 10 => $create_css, 11 => $amenu_level, 12 => array('articlemenu' => $articlemenu, 'level_id' => $start_id), 13 => $bootstrap);
        if ($articlemenu) {
            $parameter[12]['class_active'] = $active_class;
            $parameter[12]['wrap_title_prefix'] = $wrap_link_text[0];
            $parameter[12]['wrap_title_suffix'] = $wrap_link_text[1];
            $parameter[12]['item_prefix'] = "\t";
            $parameter[12]['item_suffix'] = '';
            $parameter[12]['sort'] = 'level';
            $parameter[12]['item_tag'] = 'li';
            $parameter[12]['wrap_tag'] = '';
            $parameter[12]['attribute_wrap_tag'] = '';
            $parameter[12]['class_item_tag'] = $GLOBALS['template_default']['classes']['navlist-asub_no'];
            $parameter[12]['class_first_item_tag'] = $GLOBALS['template_default']['classes']['navlist-asub_first'];
            $parameter[12]['class_last_item_tag'] = $GLOBALS['template_default']['classes']['navlist-asub_last'];
            $parameter[12]['return_format'] = 'array';
            $parameter[12]['articlemenu_options'] = $amenu_options;
        }
    } else {
        $menu_type = $parameter[0];
        $start_id = $parameter[1];
        $max_depth = $parameter[2];
        $path_class = $parameter[3];
        $active_class = $parameter[4];
        $level_id_name = $parameter[5];
        $wrap_ul_div = $parameter[6];
        $wrap_link_text = $parameter[7];
        $unfold = $parameter[8];
        $ie_patch = $parameter[9];
        $create_css = $parameter[10];
        $amenu_level = $parameter[11];
        $bootstrap = $parameter[13];
        $parent = false;
        // do not show parent link
    }
    $li = '';
    $ali = '';
    $ul = '';
    $TAB = str_repeat('	', $counter);
    $_menu_type = strtolower($menu_type);
    $max_depth = $max_depth == 0 || $max_depth - 1 > $counter ? true : false;
    $x = 0;
    $items = array();
    $last_item = 0;
    foreach ($GLOBALS['content']['struct'] as $key => $value) {
        if (_getStructureLevelDisplayStatus($key, $start_id)) {
            $items[$key] = $key;
            $last_item++;
        }
    }
    foreach ($items as $key) {
        $li_ul = '';
        $li_ie = '';
        $bs_toggle = false;
        if ($max_depth && ($unfold == 'all' || $unfold == 'active_path' && isset($GLOBALS['LEVEL_KEY'][$key]))) {
            $parameter[1] = $key;
            $li_ul = buildCascadingMenu($parameter, $counter + 1, 'param_is_array');
        }
        $li .= $TAB . '	<li';
        if ($level_id_name) {
            $li .= ' id="li_' . $level_id_name . '_' . $key . '"';
        }
        if ($li_ul) {
            $li_class = $GLOBALS['template_default']['classes']['navlist-sub_ul'];
            if ($bootstrap) {
                $li_class = trim($GLOBALS['template_default']['classes']['navlist-bs-dropdown'] . ' ' . $li_class);
                $bs_toggle = true;
            }
        } elseif (getHasSubStructureStatus($key)) {
            $li_class = $GLOBALS['template_default']['classes']['navlist-sub_no'] . ' ' . $GLOBALS['template_default']['classes']['navlist-sub_ul_true'];
        } else {
            $li_class = $GLOBALS['template_default']['classes']['navlist-sub_no'];
        }
        $li_a_title = html_specialchars($GLOBALS['content']['struct'][$key]['acat_name']);
        $li_a_class = $active_class[1] && $key == $GLOBALS['aktion'][0] ? $active_class[1] : '';
        // set active link class
        if ($bs_toggle) {
            $li_a_class = trim($GLOBALS['template_default']['classes']['navlist-bs-dropdown-toggle'] . ' ' . $li_a_class);
            $bs_data_toggle = ' ' . $GLOBALS['template_default']['attributes']['navlist-bs-dropdown-data'];
            $bs_caret = $GLOBALS['template_default']['attributes']['navlist-bs-dropdown-caret'];
        } else {
            $bs_data_toggle = '';
            $bs_caret = '';
        }
        if ($li_a_class) {
            $li_a_class = ' class="' . $li_a_class . '"';
        }
        $li_a = get_level_ahref($key, $li_a_class . ' title="' . $li_a_title . '"' . $bs_data_toggle);
        $li_a .= $wrap_link_text[0] . $li_a_title . $bs_caret . $wrap_link_text[1];
        if ($path_class[0] && isset($GLOBALS['LEVEL_KEY'][$key])) {
            $li_class = trim($li_class . ' ' . $path_class[0]);
        }
        if ($active_class[0] != '' && $key == $GLOBALS['aktion'][0]) {
            $li_class = trim($li_class . ' ' . $active_class[0]);
        }
        if ($x == 0) {
            $li_class .= ' ' . $GLOBALS['template_default']['classes']['navlist-sub_first'];
        }
        $x++;
        if ($x == $last_item) {
            $li_class .= ' ' . $GLOBALS['template_default']['classes']['navlist-sub_last'];
        }
        $li .= ' class="' . trim(trim($li_class) . ' ' . $GLOBALS['content']['struct'][$key]['acat_class']) . '"';
        $li .= '>' . $li_a . '</a>';
        $li .= $li_ul . '</li>' . LF;
    }
    // show article menu
    if ($parameter[12]['articlemenu'] && $amenu_level <= $counter) {
        $parameter[12]['level_id'] = $start_id;
        $parameter[12]['item_prefix'] = $TAB . $TAB . $TAB;
        $ali = getArticleMenu($parameter[12]);
        if (count($ali) > 1) {
            $li .= implode(LF, $ali) . LF;
            $ali = $TAB;
        } else {
            $ali = '';
        }
    }
    // also check if $parent
    if ($li || $parent && isset($GLOBALS['content']['struct'][$start_id])) {
        switch ($wrap_ul_div) {
            case 1:
                $ul = LF . $TAB . '<div>';
                $close_wrap_ul = '</div>' . LF . $TAB;
                break;
            case 2:
                $ul = LF . $TAB . '<div id="ul_div_' . $start_id . '">';
                $close_wrap_ul = '</div>' . LF . $TAB;
                break;
            case 3:
                $ul = LF . $TAB . '<div class="' . $GLOBALS['template_default']['classes']['navlist-navLevel'] . $counter . '">';
                $close_wrap_ul = '</div>' . LF . $TAB;
                break;
            default:
                $ul = '';
                $close_wrap_ul = '';
        }
        $ul .= LF . $TAB . $ali . '<ul';
        if ($level_id_name) {
            $ul .= ' id="' . $level_id_name . '_' . $start_id . '"';
        }
        $ul_class = empty($path_class[$counter + 1]) ? '' : $path_class[$counter + 1];
        if (isset($GLOBALS['LEVEL_KEY'][$start_id]) && $counter && isset($path_class[0])) {
            $ul_class .= ' ' . $path_class[0];
        }
        if ($bootstrap && $counter) {
            $ul_class = 'dropdown-menu ' . $ul_class;
        }
        $ul_class = trim($ul_class);
        if ($ul_class) {
            $ul .= ' class="' . $ul_class . '"';
        }
        $ul .= '>' . LF;
        if ($parent && isset($GLOBALS['content']['struct'][$start_id])) {
            $ul .= LF;
            $ul .= $TAB . '	<li';
            if ($level_id_name) {
                $ul .= ' id="li_' . $level_id_name . '_' . $start_id . '"';
            }
            $li_class = $GLOBALS['template_default']['classes']['navlist-sub_parent'];
            if ($active_class[0] != '' && $start_id == $GLOBALS['aktion'][0]) {
                $li_class = trim($li_class . ' ' . $active_class[0]);
            }
            $ul .= ' class="' . trim($li_class . ' ' . $GLOBALS['content']['struct'][$start_id]['acat_class']) . '">';
            $link_text = html_specialchars($GLOBALS['content']['struct'][$start_id]['acat_name']);
            $link_class = $active_class[1] && $start_id == $GLOBALS['aktion'][0] ? ' class="' . $active_class[1] . '"' : '';
            // set active link class
            $ul .= get_level_ahref($start_id, $link_class . ' title="' . $link_text . '"');
            $ul .= $wrap_link_text[0] . $link_text . $wrap_link_text[1];
            $ul .= '</a></li>' . LF;
        }
        $ul .= $li;
        $ul .= $TAB . $ali . '</ul>' . LF . $TAB . $close_wrap_ul;
        if ($create_css && empty($GLOBALS['block']['custom_htmlhead'][$menu_type][$counter])) {
            if ($counter) {
                $tmp_css = '    .' . $_menu_type . '_menu ul li:hover ' . str_repeat('ul ', $counter) . 'ul { display: none; }' . LF;
                $tmp_css .= '    .' . $_menu_type . '_menu ul ' . str_repeat('ul ', $counter) . 'li:hover ul { display: block; }';
                $GLOBALS['block']['custom_htmlhead'][$menu_type][$counter] = $tmp_css;
            } else {
                //if($counter == 0) {
                $GLOBALS['block']['custom_htmlhead'][$menu_type][-9] = LF . '  <style type="text/css">' . LF . SCRIPT_CDATA_START;
                $GLOBALS['block']['custom_htmlhead'][$menu_type][-8] = '    @import url("' . TEMPLATE_PATH . 'inc_css/specific/nav_list_ul_' . $_menu_type . '.css");';
                $GLOBALS['block']['custom_htmlhead'][$menu_type][-5] = '    .' . $_menu_type . '_menu ul ul { display: none; }';
                $GLOBALS['block']['custom_htmlhead'][$menu_type][-4] = '    .' . $_menu_type . '_menu ul li:hover ul { display: block; }';
                ksort($GLOBALS['block']['custom_htmlhead'][$menu_type]);
                $GLOBALS['block']['custom_htmlhead'][$menu_type][] = SCRIPT_CDATA_END . LF . '  </style>';
                $GLOBALS['block']['custom_htmlhead'][$menu_type] = implode(LF, $GLOBALS['block']['custom_htmlhead'][$menu_type]);
                $ul = '<div class="' . $_menu_type . '_menu">' . $ul . '</div>';
            }
        }
    }
    return $ul;
}
Beispiel #3
0
<?php

/**
 * Create menu where Top Level is <h3>Level</h3> and all submenu as <ul></ul>
 * good for having footer link blocks
 */
$h3 = array();
$start_id = 0;
foreach ($content['struct'] as $key => $item) {
    if ($item['acat_struct'] == 0 && _getStructureLevelDisplayStatus($key, $start_id)) {
        $h3[] = '<h3>' . get_level_ahref($key) . html_specialchars($item['acat_name']) . '</a></h3>';
        $h3[] = buildCascadingMenu(',' . $key);
        // the same as used behind {NAV_LIST_UL:...} - $key is the ID to start with
    }
}
$content['all'] = str_replace('{H3_MENU}', implode(LF, $h3), $content['all']);