Navigations-Script mit verschachtelten Listen - Navigo - Wordpress

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Navigations-Script mit verschachtelten Listen - Navigo - Wordpress

    Hallo zusammen
    Ich arbeite mit Wordpress und nutze da für die Navigation ein Plugin namens "Navigo". Diese Plugin ist ideal um aufklappbare Navigationen zu erstellen.

    Nun habe ich folgendes Problem:
    Da ich die Level1 Navigation in einer speziellen Schrift haben muss, was ich mit Cufon realisiere, darf die zweite Navigationsebene nicht im aktiven Listenpunkt verschatelt sein.

    Normalerweise generiert das Script folgender Code:
    HTML-Code:
    <ul id="level1">
    <li id="level1active"><a id="level1current" href="" title="Link1">Link1</a>
      <ul id="level2">
          <li><a href="" title="Level2 Link">Level2 Link</a></li>
      </ul>
    </li>
    </ul>
    Ich müsste aber eben die ul#level2 ausserhalb des aktiven li`s haben, so in der Art:
    HTML-Code:
    <ul id="level1">
    <li id="level1active"><a id="level1current" href="" title="Link1">Link1</a></li>
      <ul id="level2">
          <li><a href="" title="Level2 Link">Level2 Link</a></li>
      </ul>
    </ul>
    Wer könnte mir helfen das PHP-Script so anzupassen damit Subnavipunkte ausserhalb des aktiven Listenpunktes kommen?

    Wäre wirklich sehr dankbar!

    Hier noch das PHP-Script das die verschatelte Liste erstellt:
    PHP-Code:
    load_plugin_textdomain('navigo');

    function 
    navigo($args ''$from_page_content false) {
        
    $content '';

        global 
    $wp_query;
        
    $queried_obj $wp_query->get_queried_object();

        
    // parse all args, and if not specified, initialize to defaults
        
    parse_str($args$r);

        if (!isset(
    $r['child_of'])) $r['child_of'] = 0;
        if (!isset(
    $r['depth'])) $r['depth'] = 0;
        if (!isset(
    $r['hidden_depth'])) $r['hidden_depth'] = 0;
        if (!isset(
    $r['collapse'])) $r['collapse'] = false;
        if (!isset(
    $r['leading_tabs'])) $r['leading_tabs'] = 2;
        if (!isset(
    $r['sort_column'])) $r['sort_column'] = '';
        if (!isset(
    $r['exclude'])) $r['exclude'] = '';

        
    // get all page information
        
    $pages_params '';
        if(
    strlen($r['sort_column']) > 0)
            
    $pages_params 'sort_column=' $r['sort_column'];

        if(
    strlen($r['exclude']) > 0){
        
    $pages_params $pages_params.'&exclude='.$r['exclude'];
        }

        
    $pages get_pages($pages_params);

        if ( 
    $pages ) {

            
    // construct the page tree
            
    $page_tree = array();

            
    // collect all page ids
            
    $keys array_keys($pages);
            
    $indexes = array();
            for(
    $i 0$i sizeof($keys); $i++) {
                
    $indexes[$keys[$i]] = $pages[$keys[$i]]->ID;
            }

            
    // collect all parent ids
            
    $parents = array();
            
    $child_id $queried_obj->ID;

            while(
    $child_id != 0) {
                
    $parent_id $pages[array_search($child_id$indexes)]->post_parent;
                
    array_push($parents$parent_id);
                
    $child_id $parent_id;
            }

            
    // clear parent if root differs from the current page root
            
    if($r['child_of'] != && !strcmp(array_search($r['child_of'], $parents), '') ) {
                
    $parents = array();
            }

            foreach(
    $pages as $page) {
                
    $page_tree[$page->ID]['title'] = $page->post_title;
                
    $page_tree[$page->ID]['name'] = $page->post_name;
                
    $page_tree[$page->post_parent]['children'][] = $page->ID;
            }

            
    // prepare indentation level
            
    $indent "";
            for(
    $i 0$i < ($r['leading_tabs'] - $r['hidden_depth']); $i++) {
                
    $indent .= "\t";
            }

            
    // root list element - start
            
    if($r['hidden_depth'] < 1) {
                
    $id 'level1';
                if(isset(
    $r[$id])) $id $r[$id];

                
    $attribute "class";
                if(
    $r['collapse'])
                    
    $attribute "id";

                
    $content .= "\n" $indent '<ul ' $attribute '="' $id '">';
            }

            
    // method call to display level
            
    $content .= _navigo_subs($r['child_of'], $page_tree$r$parents$pages$indexes$queried_obj1);

            
    // root list element - end
            
    if($r['hidden_depth'] < 1) {
                
    $content .= "\n" $indent '</ul>';
            }
        }

        if(
    $from_page_content)
            return 
    $content;
        else
            echo(
    $content);
    }

    function 
    _navigo_subs($parent$page_tree$r$parents$pages$indexes$queried_obj$current_level) {

        
    $content '';

        foreach(
    $page_tree[$parent]['children'] as $page_id) {

            
    // get a reference to the current page for easy access
            
    $cur_page $page_tree[$page_id];

            
    // prepare indentation level
            
    $indent "";
            for(
    $i 0$i < ($r['leading_tabs'] + $current_level $r['hidden_depth']); $i++) {
                
    $indent .= "\t";
            }

            
    // prepare current and active ids
            
    $active '';
            
    $current '';

            
    $attribute "class";
            if(
    $r['collapse'])
                
    $attribute "id";

            
    // prepare ids for active and current elements
            
    if(in_array($page_id$parents) || $page_id == $queried_obj->ID) {
                
    $id 'level' $current_level;
                if(isset(
    $r[$id])) $id $r[$id];

                
    $active ' ' $attribute '="' $id 'active"';

                if(
    in_array($page_id$parents)) {
                    
    $current ' ' $attribute '="' $id 'highlight"';
                }
                else {
                    
    $current ' ' $attribute '="' $id 'current"';
                }
            }

            }

            
    // end list item elements if hidden depth not exceeded
            
    if( $r['hidden_depth'] < $current_level)  {
                
    $content .= '</li>';
            }
        
    // start list item element if hidden depth not exceeded
            
    if( $r['hidden_depth'] < $current_level)  {
                
    $content .= "\n" $indent '<li' $active '>';
                
    $content .= '<a' $current ' href="' get_page_link($page_id) . '" title="' wp_specialchars($cur_page['title']) . '">' $cur_page['title'] . '</a>';
            }

            
    // restrict dispaying if collapsable mode
            
    if((! $r['collapse']) || (in_array($page_id$parents) || $page_id == $queried_obj->ID)) {

                
    // check whether element is a leaf node
                
    if(isset($cur_page['children']) && is_array($cur_page['children'])) {

                    
    // check for display depth limit
                    
    if($r['depth'] > $current_level || $r['depth'] == 0) {

                        
    // sub list element - start
                        
    $id 'level' . ($current_level 1);
                        if(isset(
    $r[$id])) $id $r[$id];

                        
    $content .= "\n" $indent '<ul ' $attribute '="' $id '">';

                        
    // method call to display level
                        
    $content .= _navigo_subs($page_id$page_tree$r$parents$pages$indexes$queried_obj$current_level 1);

                        
    // sub list element - start
                        
    $content .= "\n" $indent '</ul>';
                    }
                }}

        return 
    $content;
    }

    // replace placeholder by generated code
    function navigo_insert$content ) {
        
    $matches = array();
        if(
    preg_match('#<!--navigo:(.*)-->#'$content$matches)) {
            
    $replace_string '<!--navigo:' $matches[1] . '-->';
            
    $matches[1] = str_replace(', ''&'$matches[1]);
            
    $content str_replace($replace_stringnavigo(trim($matches[1]), true), $content);
        }
        return 
    $content;
    }

    function 
    navigo_admin_include() {
        include(
    dirname(__FILE__).'/navigo-options.php');
    }

    // display options tab in wp-admin
    function navigo_options_page() {
        
    add_options_page('navigo Options''navigo'8__FILE__'navigo_admin_include');
    }

    // add actions and filters
    add_action('admin_menu''navigo_options_page'8);
    add_filter('the_content''navigo_insert'7);
    ?> 

  • #2
    Hallo,

    es ist keine gute Idee, invalides HTML erzeugen zu wollen, nur um vermeintlich bequemere Stylesheets zu haben. Lass die Struktur so und style die erste Navigationsebene so wie du sie eben stylen möchtest und mit einem weiteren Selektor für die darunterliegenden Ebenen setzt du alle Eigenschaften wieder zurück.

    Beispiel:
    Code:
    ul.navi li { background-color: #088; border: 2px outset #088; }
    ul.navi ul li { background-color: #0ff; border: 0 none transparent; }
    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar

    Lädt...
    X