Hauptnavigation horizontal und in _left.tpl

Hi,
ich möchte eine Navigation realisieren, bei der die Menüpunkte in der horizontalen Navigation und in der linken Navigation aufscheinen, wobei im aktuellen Menüpunkt in der linken Navi die Subkategorien aufgeklappt sind. Was wäre der richtige Ansatz?

lg
Hubert

http://screencast.com/t/Hsnc20Nzi

[QUOTE=toto99;9685]Hi,
ich möchte eine Navigation realisieren, bei der die Menüpunkte in der horizontalen Navigation und in der linken Navigation aufscheinen, wobei im aktuellen Menüpunkt in der linken Navi die Subkategorien aufgeklappt sind. Was wäre der richtige Ansatz?

lg
Hubert

http://screencast.com/t/Hsnc20Nzi[/QUOTE]
Ich hatte das umgekehrte Problem: Ich wollte alle Top-Cats noch mal als Links irgendwo anders anzeigen.

Dazu habe ich ein Template “tpl/inc/category_top_links.tpl” definiert, und das funktioniert.

[{if $tree || $oView->getContentCategory() }]
[{assign var="oContentCat" value=$oView->getContentCategory() }]
[{strip}]
    <ul [{if $class}]class="[{$class}]"[{/if}]>
    [{foreach from=$tree item=ocat key=catkey name=$test_catName}]
        [{if $ocat->isTopCategory() && $ocat->getIsVisible() }]
        <li>
            <a id="test_BoxLeft_Cat_[{if $ocat->isTopCategory()}][{$ocat->oxcategories__oxid->value}]_[{$smarty.foreach.$test_catName.iteration}][{else}][{$testSubCat}]_sub[{$smarty.foreach.$test_catName.iteration}][{/if}]" 
            href="[{$ocat->getLink()}]" 
            class="[{if $ocat->isTopCategory()}]root [{/if}][{if $ocat->hasVisibleSubCats}][{if $ocat->expanded }]exp [{/if}]has [{else}]last [{/if}][{if isset($act) && $act->getId()==$ocat->getId() && !$oContentCat }]act [{/if}]">[{$ocat->oxcategories__oxtitle->value}]</a>
        </li>
        [{/if}]
    [{/foreach}]
    </ul>
[{/strip}]
[{/if}]

Wichtig hierbei ist, dass mit "[{if $ocat->isTopCategory()…"geprüft wird, ob das ein “Top-Level” Link ist.

Mein Idee wäre, ein Template “tpl/inc/category_sub_links.tpl” zu definieren, die sich nur in einem Punkt von dem vorherigen Template unterscheidet:

Statt mit “[{if $ocat->isTopCategory()…” auf Top-Level Lnks zu prüfen, mit “”[{if !$ocat->isTopCategory()…" auf Sub-Links…

Mit

[{include file=“inc/category_sub_links.tpl” tree=$oxcmp_categories act=$oxcmp_categories->getClickCat() class=“tree”}] wird das dann an der gewünschten Stelle eingebaut.

Keine Ahnung, ob das so funktioniert, aber einen Versuch wäre es m.E. wert.

Also ich habe den Code in _header.tpl folgend angepasst…

                    [{*if $ocat->getSubCats()}]
                    [{strip}]
                    <ul class="menue verticall dropdown">
                    [{foreach from=$ocat->getSubCats() item=osubcat key=subcatkey name=SubCat}]
                        [{if $osubcat->getContentCats()}]
                            [{foreach from=$osubcat->getContentCats() item=osubcont key=subcontkey name=subcont}]
                            <li><a id="test_Top_root[{ $iCatCnt }]_Cms_[{$smarty.foreach.SubCat.iteration}]_[{$smarty.foreach.subcont.iteration}]" href="[{$osubcont->getLink()}]">[{$osubcont->oxcontents__oxtitle->value}] </a></li>
                            [{/foreach}]
                        [{/if}]
                        [{if $osubcat->getIsVisible() }]
                            <li><a id="test_Top_root[{ $iCatCnt }]_SubCat_[{$smarty.foreach.SubCat.iteration}]" href="[{$osubcat->getLink()}]">[{$osubcat->oxcategories__oxtitle->value}] [{ if $osubcat->getNrOfArticles() > 0}] ([{$osubcat->getNrOfArticles()}])[{/if}] </a></li>
                        [{/if}]
                    [{/foreach}]
                    </ul>
                    [{/strip}]
                    [{/if*}]

Und zwar habe ich hier den Teil mit den Subcategories augeklammert, damit im Header nur noch die Hauptkategorien angezeigt werden. Das Template inc/categorie_tree.tpl sieht bei mir nun folgend aus…

[{if $tree || $oView->getContentCategory() }]
[{assign var="oContentCat" value=$oView->getContentCategory() }]
[{defun name="category_tree" tree=$tree act=$act class=$class testSubCat=''}]
[{strip}]
    <ul [{if $class}]class="[{$class}]"[{/if}]>
    [{foreach from=$tree item=ocat key=catkey name=$test_catName}]
        [{if ( !$ocat->isTopCategory() || !$oView->showTopCatNavigation() ) && $ocat->getContentCats() }]
            [{foreach from=$ocat->getContentCats() item=ocont key=contkey name=cont}]
            <li><a id="test_BoxLeft_Cms_[{if $ocat->isTopCategory()}][{$ocat->oxcategories__oxid->value}]_[{$smarty.foreach.cont.iteration}][{else}][{$testSubCat}]_sub[{$smarty.foreach.cont.iteration}][{/if}]" href="[{$ocont->getLink()}]" class="[{if $ocat->isTopCategory()}]root[{/if}][{if $oContentCat && $oContentCat->getId()==$ocont->getId()}] act last[{/if}]">[{ $ocont->oxcontents__oxtitle->value }]</a></li>
            [{/foreach}]
        [{/if}]
        
        [{if $ocat->isTopCategory()}]<li id="sidenavheader[{$ocat->oxcategories__oxid->value}]"><strong>[{$ocat->oxcategories__oxtitle->value}]</strong></li>
        [{/if}]
        
        [{if $ocat->getIsVisible() }]
        <li>

            [{if not $ocat->isTopCategory()}]<a id="test_BoxLeft_Cat_[{$ocat->oxcategories__oxid->value}]_[{$smarty.foreach.$test_catName.iteration}][{$testSubCat}]_sub[{$smarty.foreach.$test_catName.iteration}]" href="[{$ocat->getLink()}]" class="[{if $ocat->isTopCategory()}]root [{/if}][{if $ocat->hasVisibleSubCats}][{if $ocat->expanded }]exp [{/if}]has [{else}]last [{/if}][{if isset($act) && $act->getId()==$ocat->getId() && !$oContentCat }]act [{/if}]"><img src="[{$oViewConf->getImageUrl()}]bullet_nav.gif" alt="Kategorie [{$ocat->oxcategories__oxtitle->value}]"> [{$ocat->oxcategories__oxtitle->value}] [{if $ocat->getNrOfArticles() > 0}] ([{$ocat->getNrOfArticles()}])[{/if}]</a>[{/if}]
            [{if $ocat->getSubCats() && $ocat->expanded}]
                [{fun name="category_tree" tree=$ocat->getSubCats() act=$act class="" testSubCat=$ocat->oxcategories__oxid->value }]
            [{/if}]

        </li>
        [{/if}]
    [{foreachelse}]
        [{if $oContentCat }]            
            <li><a id="test_BoxLeft_Cms_0" class="root act" href="[{$oContentCat->getLink()}]">[{ $oContentCat->oxcontents__oxtitle->value }]</a></li>
        [{/if}]
    [{/foreach}]
    </ul>
[{/strip}]
[{/defun}]
[{/if}]

Und, funktioniert?

Habe den Vorschlag von avenger versucht - sieht gut aus, nur die SubCats werden in der linken Navigation nicht angezeigt …

Statt mit “[{if $ocat->isTopCategory()…” auf Top-Level Lnks zu prüfen, mit “”[{if !$ocat->isTopCategory()…" auf Sub-Links…

Wenn ich auf Sub-Links prüfe, wie müsste die Abfrage lauten - “[{if $ocat->isTopCategory()…” - SubCategory?

http://dialog.sdsolutions.de/_test/Bild8.jpg

Seit meiner letzten Antwort gab es leider keine Reaktion - wer hat eine Idee wo der Fehler liegt?
Die Frage ist: wie muss die Abfrage lauten, wenn ich auf SubLinks prüfe?
"[{if !$ocat->isTopCategory()…" kann es doch nicht sein.

[{if not $ocat->isTopCategory()}] funktioniert bei mir. Aber auch [{if !$ocat->isTopCategory()}] müsste eigentlich funktionieren.

Das hab ich nun in allen Variationen getestet - geht nicht.
Noch mal was ich eigentlich will:
eine Navigation realisieren, bei der die Menüpunkte in der horizontalen Navigation (mit DropDown für sie Subkategorien) und in der linken Navigation aufscheinen, wobei im aktuellen Menüpunkt in der linken Navi die Subkategorien aufgeklappt sind.
Also es geht um die linke Navi.

[{if $tree || $oView->getContentCategory() }]
[{assign var="oContentCat" value=$oView->getContentCategory() }]
[{strip}]
    <ul [{if $class}]class="[{$class}]"[{/if}]>
    [{foreach from=$tree item=ocat key=catkey name=$test_catName}]
        [{if $ocat->isTopCategory() && $ocat->getIsVisible() }]
        <li>
            <a id="test_BoxLeft_Cat_[{if !$ocat->isTopCategory()}][{$ocat->oxcategories__oxid->value}]_[{$smarty.foreach.$test_catName.iteration}][{else}][{$testSubCat}]_sub[{$smarty.foreach.$test_catName.iteration}][{/if}]" 
            href="[{$ocat->getLink()}]" 
            class="[{if $ocat->isTopCategory()}]root [{/if}][{if $ocat->hasVisibleSubCats}][{if $ocat->expanded }]exp [{/if}]has [{else}]last [{/if}][{if isset($act) && $act->getId()==$ocat->getId() && !$oContentCat }]act [{/if}]">[{$ocat->oxcategories__oxtitle->value}]</a>
        </li>
        [{/if}]
    [{/foreach}]
    </ul>
[{/strip}]
[{/if}]

Wie erreiche ich nun, das die aktuelle Subkategorie angezeigt wird?

Hast du das categorie_tree.tpl mal so angepasst, wie ich es weiter oben beschrieben habe?

Ja, hab ich.
Dann wird nur die aktuelle Navigationspunkt angezeigt, ich brauch aber alle.
Weiters werden die Subkategorien seltsam aufgelistet.

http://dialog.sdsolutions.de/_test/Bild-16.jpg

[edit]: Ebenfalls gelöscht wg. Spam. Aber die Email-Adresse lass ich drin. Julia Bachler bekommt Post :smiley:

… Oh Gott - mein Herz! Hat sich mal jemand die Seite angeschaut? :eek:
–> grafro wird ausgeknipst!

[email protected]

Ist schon Spam oder?

japp, aber der forenadmin ist heute verhindert, sprich oxid commons
habs aber bereits weitergeleitet

grafo geht mir aufn Keks.:mad:

Diese Threat geht schon in die Richting was ich will.

Ich möchte gern ein horizontales und ein vertikales Menü, wobei das horizontale Menü oben immer den kompletten Kategoriebaum anzeigt und das vertikaler Menü links den Aktiven baum.
Ist also genau die Situation mit der Einstellung “Den kompletten Kategoriebaum für die Navigation laden” für den header angeschaltet und für das Menü links ausgeschaltet, aber das geht leider nicht gleichzeitig.
Ich hab schon einiges versucht:

  • Kategoriebaum Einstellung aus, oxcmp_categories kopieren, in my_categories dann build_tree Anruf anpassen bei _loadCategoryTree, aber ich kriege das nicht hin.
  • Kategoriebaum Einstellung an, category_tree anpassen, ich wollte mit if $act->getId() == $ocat->getId() testen ob die Kategorie ausgeklappt werden soll, aber das funzt nicht bei Unterkategorien.

Hat jemand einen Tipp?

Hab’s gefunden.

  1. oxcmp_categories.php kopieren zu oxcmp_my_categories.php
  2. In oxcmp_my_categories
$oCategoryTree->buildTree( $sActCat, $myConfig->getConfigParam( 'blLoadFullTree' ), $myConfig->getConfigParam( 'bl_perfLoadTreeForSearch' ), $myConfig->getConfigParam( 'blTopNaviLayout' ) );

ersetzen durch

$oCategoryTree->buildTree( $sActCat, [B]true[/B], $myConfig->getConfigParam( 'bl_perfLoadTreeForSearch' ), $myConfig->getConfigParam( 'blTopNaviLayout' ) );
  1. oxcmp_my_categories.php speichern im Module Verzeichnis
  2. aktivieren im Admin (System->Module) mit [B]oxview => oxcmp_my_categories[/B]

So weit war ich eigentlich auch schon, es fehlte noch was ich hier gefunden habe:
http://www.oxid-esales.com/forum/showthread.php?t=1571 und http://www.oxid-esales.com/forum/showthread.php?t=906

also
5. In views/oxubase.php

protected $_aUserComponentNames = array();

ersetzen durch

protected $_aUserComponentNames = array(
                                        'oxcmp_my_categories'      => 0
    );
  1. und jetzt läuft die foreach Schleife in _header.tpl über $oxcmp_my_categories

Vielleicht hilft es noch jemandem…

Hallo grecro99,

vielen Dank für die Rückmeldung, auch wenn Du einen Uralt-Thread erwischt hast :slight_smile:

Gruß

Hallöchen!

ich muss den Thread mal wieder rauskramen, da er fast mein Problem löst, aber eben noch nicht ganz! :wink:

Ich habe nämlich etwas ähnliches vor:

Horizontale Navigation = TopCategory
Vertikale Navigation = 2 + 3. Ebene

wobei die 2. Ebene lediglich ‘<h3><a>…</a></h3>’… für ein JavaScript sein soll, und die 3. Ebene dann eine ganz normale <ul>…

Um eine Levelprüfung komme ich also nicht drumherum…

Schöne Grüße

Lars

Also ich denke, die Levelzuordnung sollte nicht vollständig unmöglich sein,
im Adminbereich werden die einzelnen Ebenen ja auch unterschiedlich dargestellt…

(wenn man eine neue Kategorie anlegt, und sie einer anderen als unterkategorie zuordnet. Dort wird ja auch jede Ebene mit einem weiteren ‘-’ angezeit…)

Allerdings blicke ich bei der verstrickten Programmierung nicht wirklich durch…

Ich hätte da noch ne Variante vor…

Version 1:

  • Navigation nur links, alle (aktiven) Sublevel-1 werden [U]immer[/U] ausgeklappt dargestellt, Sublevel-2 nur nach Klick

ODER

Version 2:

  • Navigation der Root-Kategorien oben (mögl. ohne ausklappende Subkategorien)
  • immer Darstellung [U]aller[/U] (aktiven) Sublevel-1 links, Sublevel 2 ausklappen nach Klick

Jemand n Tipp?