Seite 1 von 1

Navigation_Main kombiniert mit Header-Modul

Verfasst: Mo 7. Feb 2011, 17:47
von prepress89
Hey Leute,

ich hab grad ein bisschen ein Problem.. ich kenn mich in PHP nicht sonderlich aus und trotzdem habe ich mal an folgendem probiert :D

Kurz zum Vorstellen:
- Ich habe über dem Content eine horizontale Navigation (nur level 1)
- Links neben dem Content soll ein großes Bild angezeigt werden, sollte für jede Seite separat ausgewählt werden können + ein Standardbild
- auf/über diesem Bild soll die sekundäre Navigation (ab level 2) sein

Jetzt dachte ich mir, ich bau das Headermodul ein bisschen um, da hier die möglichkeit mit der Bildauswahl ziemlich gut gelöst ist. Im Prinzip brauche ich den ganzen restlichen Code des Headermodules nicht (z.B. Headline ausgabe usw..) NUR eben das mit dem Bild. Ich weiß aber nicht genau was ich da löschen darf und was nicht..

Dann dachte ich mir, ich könnte das Navigationmodul in das Headermodul reinkopieren/integrieren und auf das selbe Template ansprechen lassen wie auch das Headermodul (in meinem Fall: leftbox.html). Außerdem soll die sekundäre Navigation erst bei level 2 anfangen bzw. es anzeigen lassen. Das muss ja i rgendwie mit dem "$iStartIdcat > 0" zusammen hängen aus dem Modul oder? Da müsste man das mit Level 2 ja einstellen können..

Das das Headermodul und das Navimodul auf das selbe Template zugreifen scheint auch zu funktionieren. Nur leider wird es doppelt erstellt - also die ID #imagebox.. ich weiß, da steht jetzt dadurch das es 2 Module sind auch 2x new Template bla.. ich weiß aber nicht wie ichs zusammenfügen kann..

Anbei mal das Modul Output des Headermoduls + des Navigation_Main-Moduls:

Code: Alles auswählen

<?php
/* Header-Modul */

cInclude('classes', 'Contenido_Category/Contenido_Category.class.php');

if (!isset($tpl) || !is_object($tpl)) {
    $tpl = new Template();
}

// get start idcat
$iIdcatStart = (int) getEffectiveSetting('navigation', 'idcat-home', '1');

try {
    // get headline
    $oConCat = new Contenido_Category($db, $cfg);
    $oConCat->load($idcat, true, $lang);
    $sImgEdit = "CMS_IMGDESCR[1]";
    $sImg = "CMS_IMG[1]";
    
    $sHeadline = $iIdcatStart != intval($idcat) 
                    ? $oConCat->getCategoryLanguage()->getName() 
                    : mi18n("Willkommen!");
    $sCssStyle = '';
    if ($contenido && $edit) {
        echo '<div id="modHeaderImgEdit">'.$sImgEdit.'</div>';
    }
    if ($sImg != '') {
        $sCssStyle = ' style="background-image:url('.$sImg.');"';
    }
    $tpl->reset();
    $tpl->set('s', 'css-style', $sCssStyle);
    $tpl->set('s', 'url', 'front_content.php');
    $tpl->set('s', 'title', mi18n("Zur Contenido Homepage"));
    $tpl->set('s', 'headline', $sHeadline);
    $tpl->generate('templates/leftbox.html');
} catch (InvalidArgumentException $eI) {
    echo 'Some error occured: ' . $eI->getMessage() . ': ' . $eI->getFile() . ' at line '.$eI->getLine() . ' ('.$eI->getTraceAsString().')';
} catch (Exception $e) {
    echo 'Some error occured: ' . $e->getMessage() . ': ' . $e->getFile() . ' at line '.$e->getLine() . ' ('.$e->getTraceAsString().')';
}
?>

<?php
/* Navigation_Main-Modul */

if (!isset($db)) {
    $db = new DB_Contenido();
}
if (!isset($tpl)) {
    $tpl = new Template();
}
$tpl->reset();

cInclude('classes', 'Contenido_FrontendNavigation/Contenido_FrontendNavigation.class.php');
cInclude('frontend', 'includes/Util/Modules/Contenido_NavMain_Util.class.php');

$iStartIdcat = getEffectiveSetting('navigation', 'idcat-home', 1);
$iSelectedDepth = getEffectiveSetting('navigation', 'level-depth', 1);

if ($iStartIdcat > 0) {
    $oFeNav = new Contenido_FrontendNavigation($db, $cfg, $client, $lang, $cfgClient);
    $oFeNav->setAuth($auth);
    $oFeNav->setRootCat($iStartIdcat);
    $oSubCategories = $oFeNav->getSubCategories($iStartIdcat, true, true, 1);
    // see if there are any subcategories to display
    if ($oSubCategories->count() > 0) {
        $aLevelInfo = array();
        $aDepthInfo = array();
        $aDepthInfo[0] = 0;
        $aDepthInfo[1] = $iSelectedDepth;
        foreach ($oSubCategories as $oSubCategory) {
            Contenido_NavMain_Util::loopCats($oSubCategory, $oFeNav, $tpl, $cfg, $lang, $aLevelInfo, intval($idcat), $aDepthInfo);
        }
        $tpl->generate('templates/leftbox.html');
    }
} else {
    echo '<p>Navigation not configured correctly.</p>';
}
?>
Und hier das Template leftbox.html

Code: Alles auswählen

<div id="imagebox" {css-style}>
    <div id="navisec">
        <ul>
            <!-- BEGIN:BLOCK -->
            <li class="navmainStandardLevel_{css_level}{css_first_item}{css_last_item}{css_active_item}">
                <a href="{url}" title="{name}" class="navmainStandardLevel_{css_level}{css_first_item}{css_last_item}{css_active_item}">{name}</a>
            </li>
            <!-- END:BLOCK -->
        </ul>
    </div>
</div>

Könnt ihr mir helfen!? Danke :)

Mit freundlichen Grüßen
Alex

Re: Navigation_Main kombiniert mit Header-Modul

Verfasst: Di 8. Feb 2011, 11:11
von prepress89
Das mit dem kombinieren des Header + Navigation-Moduls habe ich jetzt eingermaßen gut gelöst. :D
Einfach 1:1 den Code vom Navimodul ÜBER dem Code des Headermoduls eingefügt. Das Template aber bei navigation_standard.html belassen. Somit habe ich jetzt mithilfe von float:left und z-index die Navi auf/über das Bild des Headermoduls bekommen.. ob es so in allen Browser gut funktioniert wird sich die nächsten Minuten zeigen.. aber so klappts! :)

Jetzt habe ich nur noch ein grundlegendes Problem, dass ich oben auch schon angesprochen habe. Da ich den kompletten Code von dem Navimodul übernommen habe zeigt es natürlich alles ab Level 1 an - es sollte aber erst ab Level 2 angenzeigt werden, da (s.o.) die Level 1 Navi oben horizontal über dem Content verläuft. Dort habe ich das Leveldepth auf 1 beschrenkt.

Wie bekomme ich das hin? Sind bestimmt nur ein paar kleine Anpassungen an dem Code des Navimodul.. sehr wahrscheinlich irgendwo hier:

Code: Alles auswählen

$iStartIdcat = getEffectiveSetting('navigation', 'idcat-home', 1);
$iSelectedDepth = getEffectiveSetting('navigation', 'level-depth', 3);

if ($iStartIdcat > 0) {
    $oFeNav = new Contenido_FrontendNavigation($db, $cfg, $client, $lang, $cfgClient);
    $oFeNav->setAuth($auth);
    $oFeNav->setRootCat($iStartIdcat);
    $oSubCategories = $oFeNav->getSubCategories($iStartIdcat, true, true, 1);
    // see if there are any subcategories to display
    if ($oSubCategories->count() > 0) {
        $aLevelInfo = array();
        $aDepthInfo = array();
        $aDepthInfo[0] = 0;
        $aDepthInfo[1] = $iSelectedDepth;
        foreach ($oSubCategories as $oSubCategory) {
            Contenido_NavMain_Util::loopCats($oSubCategory, $oFeNav, $tpl, $cfg, $lang, $aLevelInfo, intval($idcat), $aDepthInfo);
        }
        $tpl->generate('templates/navigation_standard.html');
    }

//edit:
Hier mal der Link zur Homepage. Unter Leistungen gibts es bis jetzt Unterpunkte "Feuer, Wasser, ..."

//edit 2:
So.. ich habe jetzt ein bisschen CSS-Getrickse angewand und die Level 1 Buttons einfach "verschwinden lassen". Ist nicht die eleganteste Lösung, aber es scheint zu funktionieren.. :D
Natürlich bin ich trotzdem sehr Dankbar, falls ihr eine bessere Lösung parat habt, zum Anpassen des Navimoduls!

Code: Alles auswählen

#cleft ul li.navmainStandardLevel_1,
#cleft ul li a.navmainStandardLevel_1 {
    display: hidden;
    font-size: 0;
    padding: 0;
    margin: 0;
    line-height: 0;
}

Re: Navigation_Main kombiniert mit Header-Modul

Verfasst: Mo 14. Feb 2011, 10:23
von prepress89
Das mit dem "verstecken" via CSS geht doch nicht so einfach.. bei manchen Browsern wir es trozdem noch angezeigt und die beste Lösung ist es ohnehin nicht...

Könnt ihr mir nicht weiterhelfen!? :(

Bin hier gerade echt am verzweifeln..

Re: Navigation_Main kombiniert mit Header-Modul

Verfasst: Mo 14. Feb 2011, 11:35
von Dodger77
Statt:

Code: Alles auswählen

display: hidden;
sollte auch

Code: Alles auswählen

visibility: hidden;
oder:

Code: Alles auswählen

display: none;
besser funktionieren.

Re: Navigation_Main kombiniert mit Header-Modul

Verfasst: Di 15. Feb 2011, 15:33
von prepress89
Mit display:none funktioniert es super. Daran habe ich gar nicht gedacht.. da brauche ich die ganzen anderen Attribute gar nicht - danke! :)

Ich dachte echt ich kenne mich mittlerweile gut mit CSS/HTML aus.. aber visibility:hidden kannte ich jetzt echt noch nicht.

Was ist den der Unterschied zwischen display:hidden, display:none und visibility:hidden?!

Re: Navigation_Main kombiniert mit Header-Modul

Verfasst: Di 15. Feb 2011, 22:05
von Dodger77
Für "display" gibt es keinen Wert "hidden". Ansonsten:

http://de.selfhtml.org/css/eigenschafte ... ierung.htm