[Solved] Styleavantage-Headernavi erweitern

Begonnen von martin b, 07 Juli 2009, 09:53:53

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 2 Gäste betrachten dieses Thema.

martin b

Hallo @All

Ich würde gerne die Headernavigation des Themes Styleavantage erweitern, nur komme ich da irgendwie nicht zu Potte. Was ich gemacht habe ist :

Die neuen Menupunkte in der index.html Datei eingetragen. Dann die Menupunkte in der Datei markup_draft.html erhöht. Die CSS Dateien und Grafiken für die zusätzlichen Farben angelegt. Nun wollte ich die Menupunkte in der settings.php hinzufügen. Und da kam die Überraschung. Die Menupunkte erscheinen nicht in der Navigation! Füge ich zum Beispiel die Encyclopedia zwischen "Downloads" und "Suche" ein, wird das nicht angezeigt. Klicke ich dann aber auf "Downloads", lande ich bei der Encyclopedia.

Ich blicke da nicht durch! Ist die Anzahl der Links in der Navi irgendwie begrenzt? Oder woran kann es liegen?

Ich hoffe, da kann jemand helfen.

Gruß
martin b

Andi

Moin :)

das geht alles über die settings.php des themes.
An der index.html, oder markup_draft.html (hmm, für was ist die eigentlich, ist doch unnötig...) braucht da nichts geändert werden.

Was hier für das Element theme, in Bezug auf die navigation, geschrieben ist, gilt im Prinzip auch für das stylevantage: http://themes.pragmamx.net/Content-pid-1.html

Im Stylevantage könnte dann dein zusätzlicher Navigationspunkt, wie folgt aussehen:
    $themesetting['headnav']['Enzyklopädie'] = array(/* Suche */
        'color' => '',
        'link' => 'modules.php?name=Encyclopedia',
        'case' => array(
            MX_MODULE == 'Encyclopedia',
            ));

Wenn beim Schlüssel 'color' nichts angegeben ist, wird die Standardfarbe verwendet. Ansonsten eben hier einen vorhandenen Farbwert eintragen....
schön´s Grüssle, Andi

Andi

Hier noch bisserl was zur Funktionsweise der Headernavigationen:

Zitat von: Andi am 16 Juni 2009, 11:02:29

Folgendes bezieht sich auf das mx-default und könnte so überall eingesetzt werden.

Der Teil des Menüs. in der theme.html ist nur ein Platzhalter, der beim Entwurf zeigt, wie es später aussehen wird.
                  <ul>
                    <!-- START headmenue -->
                    <li class="current">
                      <a href="./">Home</a>
                    </li>
                    <li>
                      <a href="#">Contact</a>
                    </li>
                    <li>
                      <a href="#">Administration</a>
                    </li><!-- END headmenue -->
                  </ul>


Alles was zwischen <!-- START headmenue --> und <!-- END headmenue --> wird später, beim generieren der Ausgabe, durch das eigentliche Menü ersetzt.

Dafür sind in der functions.php 3 Codeabschnitte zuständig.

1.)
Die eigentliche Funktion, die die Daten aus der settings.php des Themes ausliest und zu HTML-Tags aufbereitet:
<?php
/* die Navigationsbuttons im header, Quelle in settings.php */
function theme_get_navbars()
{
    global 
$themesetting;
    foreach (
$themesetting['headnav'] as $title => $menue) {
        if (empty(
$current) && in_array(1$menue['case'])) {
            
$current ' class="current"';
        } else {
            
$current '';
        }
        
$part[] = '<li' $current '><a href="' $menue['link'] . '">' $title '</a></li>';
    }
    return 
implode("\n"$part);
}
?>


2.)
Die Zeile in der Funktion theme_replace_start()
theme_extract_optional_part($template, 'headmenue', '{NAVBAR}');
bewirkt, dass zu Beginn der Theme-Generierung der Platzhalter in der theme.html, durch einen anderen temporären Platzhalter ({NAVBAR}) ersetzt wird.

3.)
Und letztendlich die Zeile in der Funktion theme_define_placeholders()
$part[] = array("{NAVBAR}", theme_get_navbars());
die wiederum bewirkt, dass ganz am Ende, dieser temporäre Platzhalter durch die HTML-Ausgabe, aus der Funktion theme_get_navbars(), ersetzt wird.

Der Zwischenschritt über den temporären Platzhalter erscheint umständlich, ist auch nicht unbedingt nötig, gewährleistet aber, dass das Theme gecached werden kann und das Menü trotzdem dynamisch bleibt.


Die Datenquelle des Menüs befindet sich, wie schon erwähnt, in der settings.php und ist einfach nur ein mehrdimesionales Array, welches beliebig erweitert werden kann.
<?php
    $themesetting
['headnav'][_YSACCOUNT] = array( // der Arrayschlüssel, ist der Linktext
        
'link' => 'modules.php?name=Your_Account'// der Link
        
'case' => array( // logische Bedingungen für current
            
MX_MODULE == 'Your_Account',
            
MX_MODULE == 'User_Registration',
            
MX_MODULE == 'Private_Messages',
            (
MX_MODULE == 'Userinfo' && !empty($GLOBALS['istheuser'])) ,
            (
MX_MODULE == 'UserGuest' && isset($_REQUEST['op']) && $_REQUEST['op'] == 'view'),
            ));

    
$themesetting['headnav'][_SEARCH] = array(/* Suche */
        
'link' => 'modules.php?name=Search',
        
'case' => array(
            
MX_MODULE == 'Search',
            ));
?>


schön´s Grüssle, Andi

martin b

Moin Andi

Hat geklappt.  :thumbup:

Danke

martin b