navigation über sitemapmodul

goshzh
Beiträge: 10
Registriert: Mo 19. Mär 2012, 16:01
Kontaktdaten:

navigation über sitemapmodul

Beitrag von goshzh »

hallo zusammen

meine navigation soll stets ganz ersichtlich sein. sprich, alle unterrubriken sollen dargestellt werden.
dazu dachte ich mir, nehme ich am besten das sitemapmodul.

soweit auch alles bene. jetzt sollen jedoch die hauptrubriken keine links enthalten, sondern nur als überschriften fungieren.
dazu habe ich eine modulvorlage erstellt:

Code: Alles auswählen

<ul class="sitemapStandardMainCat">
<li class="sitemapStandardLevel_1">
        <h2>{list_h2} </h2>
        <ul>
            {list_items}
        </ul>
 </li>
</ul>
die modul-templates "navigationMAIN_standard_h2.html" und "navigationMAIN_standard_li.html" stehen auch bereit.

somit möchte ich aus meinem modul einmal an den platzhalter {list_h2} die hauptrubriken übergeben und an das {list_items} die jeweiligen unterrubriken.
habe das sitemapmodul noch so abgeändert, dass keine konfiguration nötig ist (standardmässig hat die sitemap ja ne konfi)

das ist der code für den modul-output:

Code: Alles auswählen

<?php

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_Sitemap_Util.class.php');


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


$iHtmlOutputType = intval("CMS_VALUE[3]");
$sUrlStyle = $cfg['url_builder']['name'];

if ($iStartIdcat > 0 && $iSelectedDepth >= 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 = $iSelectedDepth;
        if ($iHtmlOutputType == 1) {
            $sMainCats = '';
        }
        foreach ($oSubCategories as $oSubCategory) {
            switch($iHtmlOutputType) {
                case 0:                   
                    Contenido_Sitemap_Util::loopCats($oSubCategory, $oFeNav, $tpl, $sUrlStyle, $cfg, $lang, $aLevelInfo, intval($idcat), $aDepthInfo);
                    break;
                case 1:
                    
                    Contenido_Sitemap_Util::loopCats($oSubCategory, $oFeNav, $tpl, $sUrlStyle, $cfg, $lang, $aLevelInfo, intval($idcat), $aDepthInfo);
                    $sSubCats = $tpl->generate('templates/navigationMAIN_standard_h2.html', true);
                    $tpl->reset();
                    $tpl->set('s', 'list_h2', $sSubCats);

                    $sMainCats .= $tpl->generate('templates/navigationMAIN_standard_ul.html', true);
                    break;
                default:
                    break;
            }
        }
        if ($iHtmlOutputType == 0) {
            $tpl->generate('templates/navigationMAIN_standard.html');
        } else {
            echo $sMainCats;
        }
    }
} else {
    echo '<p>Sitemap not configured correctly.</p>';
}
?>
meinen h2 befüllt er somit mit den kategorien ab Nr.1. das passt schonmal. aber wie rufe ich am besten die unterrubriken der jeweiligen hauptrubriken ab und übergebe sie dem {list_items}?
alle meine bisherigen test sind missglückt. bin auch kein geübter php-anwender, darum sehe ich gerade keine lösung.

freue mich über euren input und schon mal vielen dank im voraus.
grüsse
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: navigation über sitemapmodul

Beitrag von Spider IT »

Hallo,

die Items in einen dynamischen Bereich packen:

Code: Alles auswählen

<ul class="sitemapStandardMainCat">
<li class="sitemapStandardLevel_1">
        <h2>{list_h2} </h2>
        <ul>
            <!-- BEGIN:BLOCK -->{list_item}
            <!-- END:BLOCK -->
        </ul>
</li>
</ul>
und dann die Items EINZELN übergeben:

Code: Alles auswählen

$tpl->set('d'. 'list_item', '...'); # ACHTUNG! 'd' = dynamischer Bereich!
$tpl->next(); # Dynamischen Bereich "speichern" und neuen anfangen
Gruß
René
goshzh
Beiträge: 10
Registriert: Mo 19. Mär 2012, 16:01
Kontaktdaten:

Re: navigation über sitemapmodul

Beitrag von goshzh »

vielen dank für deine antwort.
ich seh aber noch keine möglichkeit für mich, die unterrubriken auszugeben.

Code: Alles auswählen

case 1:
                    
                    Contenido_Sitemap_Util::loopCats($oSubCategory, $oFeNav, $tpl, $sUrlStyle, $cfg, $lang, $aLevelInfo, intval($idcat), $aDepthInfo);
                    $sSubCats = $tpl->generate('templates/navigationMAIN_standard_h2.html', true);
                    $tpl->reset();
                    $tpl->set('s', 'list_h2', $sSubCats);
                    
                    
                    $sSubsubCats = $tpl->generate('templates/navigationMAIN_standard_li.html', true);
                    $tpl->set('d'. 'list_items', $sSubsubCats); # ACHTUNG! 'd' = dynamischer Bereich!
                    $tpl->next(); # Dynamischen Bereich "speichern" und neuen anfangen
ich hänge an dem part, wie ich diesen "Contenido_Sitemap_Util"-Aufruf auf die Level 2 Navigation beschränken kann.
wenn ich $tpl->next(); einfüge, dann funktioniert der h2 auch nicht mehr.
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: navigation über sitemapmodul

Beitrag von Spider IT »

Vielleicht brauchst du da etwas Grundsatzwissen:
  • In ein Modul-Template werden Variablen übergeben, diese stehen in geschweiften Klammern und werden aus dem Modul per ->set() auf dem Template-Objekt gesetzt.
  • In ein Template-Modul kann ein dynamischer Bereich eingebunden sein, dieser steht zwischen <!-- BEGIN:BLOCK --> und <!-- END:BLOCK --> und wird aus dem Modul ebenfalls per ->set() befüllt, allerdings mit 'd' anstatt 's' (dynamisch vs. statisch) und per ->next() abgeschlossen (es kann der nächste dynamische Bereich gefüllt werden).
  • ->generate() erzeugt die Ausgabe des gefüllten Templates, wobei der erste Parameter die Template-Datei ist. Der zweite Parameter gibt an, ob die Ausgabe direkt zum Browser geschickt wird (false), oder in die Programmierung zurückgegeben wird (zb: $x = $tpl->generate('templates/xyz.html', true);).
Man kann also den dynamischen Bereich des Templates solange befüllen, bis man irgendwann mit ->generate() alles ausgibt.
Braucht man mehr dynamische Bereiche, muss man zusätzliche Modul-Templates benutzen und diese per ->generate() mit true in die Programmierung zurückgeben lassen um sie in das Haupttemplate mit ->set() einzusetzen.
Beispiel:

Code: Alles auswählen

$tpl->set('s', 'DETAILS', $tplDetails->generate('templates'beispiel.html', true));
Gruß
René
goshzh
Beiträge: 10
Registriert: Mo 19. Mär 2012, 16:01
Kontaktdaten:

Re: navigation über sitemapmodul

Beitrag von goshzh »

dann kommt es mir aber spanisch vor, wenn in der sitemap-vorlage von contenido statisch in die modul-vorlage geschrieben wird, obwohl dort ein <!-- BEGIN:BLOCK --> und <!-- END:BLOCK --> steht.

zudem ist mir noch nicht klar, wie ich die hauptrubriken von den unterrubriken trennen kann. mir scheint, mir wird einfach eine liste mit dem css_level ausgegeben.
bei $aDepthInfo = 2; bekomm ich haupt- und unterrubriken, was auch sinn macht. und bei $aDepthInfo = 1; nur die hauptrubriken, was auch sinn macht :)

in dieser form werden alle punkte in den {list_items} bereich geladen:

Code: Alles auswählen

 $tpl->reset();
                    Contenido_Sitemap_Util::loopCats($oSubCategory, $oFeNav, $tpl, $sUrlStyle, $cfg, $lang, $aDepthInfo);
                    $sSubCats = $tpl->generate('templates/navigationMAIN_standard_li.html', true);
                    $tpl->reset();
                    $tpl->set('s', 'list_items', $sSubCats);
// wenn ich hier den ->next einfüge, wird gar nichts übergeben.
                    $sMainCats .= $tpl->generate('templates/navigationMAIN_standard_ul.html', true);
                    $tpl->set('s', 'list_h2', $sMainCats);
ausgeben tuts mir so folgendes (auszug einer hauptrubrik):

Code: Alles auswählen

<ul class="sitemapStandardMainCat">
    <li class="sitemapStandardLevel_1">
        <h2>{list_h2}</h2>
        <ul>
    <li class="sitemapStandardLevel_1">
        <a href="front_content.php?idcat=6&lang=1" title="ideas in motion" class="sitemapStandardLevel_1">ideas in motion</a>
    </li>

    <li class="sitemapStandardLevel_2">
        <a href="front_content.php?idcat=7&lang=1" title="production" class="sitemapStandardLevel_2">production</a>
    </li>

    <li class="sitemapStandardLevel_2">
        <a href="front_content.php?idcat=8&lang=1" title="postproduction" class="sitemapStandardLevel_2">postproduction</a>
    </li>

    <li class="sitemapStandardLevel_2">
        <a href="front_content.php?idcat=9&lang=1" title="digital media" class="sitemapStandardLevel_2">digital media</a>
    </li>

    <li class="sitemapStandardLevel_2">
        <a href="front_content.php?idcat=10&lang=1" title="digital signage" class="sitemapStandardLevel_2">digital signage</a>
    </li>
        </ul>
    </li>
</ul>

da fehlt mir noch ein ganzes stück übung mit der übergabe an die modul-templates. im notfall werde ich die liste so nehmen wie sie kommt und die hauptrubriken mit css verändern. habe ich halt nicht meine gewünschte struktur, aber es wird gehen.

danke für deine erklärungen rené.
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: navigation über sitemapmodul

Beitrag von Spider IT »

goshzh hat geschrieben:

Code: Alles auswählen

 $tpl->reset();
                    Contenido_Sitemap_Util::loopCats($oSubCategory, $oFeNav, $tpl, $sUrlStyle, $cfg, $lang, $aDepthInfo);
                    $sSubCats = $tpl->generate('templates/navigationMAIN_standard_li.html', true);
                    $tpl->reset();
                    $tpl->set('s', 'list_items', $sSubCats);
// wenn ich hier den ->next einfüge, wird gar nichts übergeben.
                    $sMainCats .= $tpl->generate('templates/navigationMAIN_standard_ul.html', true);
                    $tpl->set('s', 'list_h2', $sMainCats);
Hier wird eine Funktion loopCats() der Klasse Contenido_Sitemap_Util aufgerufen (2. Zeile), welche die Struktur der Unterkategorien generiert und in ein Template einträgt (wahrscheinlich mit 'd').
In der nächsten Zeile wird das Template dann in die Variable $sSubCats hinein generiert.
Wenn du also die Generierung der Unterkategorien beeinflussen willst, musst du das in der Klasse Contenido_Sitemap_Util machen.
Die Datei dafür wird zuvor irgendwo per cInclude() eingebunden sein.

Ich weiß zwar nicht, wie deine Navigation aussehen soll, aber per CSS kann man (fast) alles einstellen.
Hier z.B. gibt es unten auf der Seite eine Sitemap waagerecht mit Unterpunkte senkrecht (Seite noch im Aufbau).

Gruß
René
goshzh
Beiträge: 10
Registriert: Mo 19. Mär 2012, 16:01
Kontaktdaten:

Re: navigation über sitemapmodul

Beitrag von goshzh »

ansonsten siehst du keinen fehler an dem aufbau? nun gut. ich mach es per css. damit krieg ich das hin.

aussehen soll das teil folgendermassen:

<ul>
<li><h2> hauptrubrik 01 ohne link </h2>
<ul>
<li>unterrubrik 01 mit link</li>
<li>unterrubrik 02 mit link</li>
<li>unterrubrik 03 mit link</li>
</ul>
</li>
</ul>
<ul>
<li><h2> hauptrubrik 02 ohne link </h2>
<ul>
<li>unterrubrik 01 mit link</li>
<li>unterrubrik 02 mit link</li>
<li>unterrubrik 03 mit link</li>
</ul>
</li>
</ul>

es ging mir einfach gegen den strich, per css den link der hauptkategorien "verschwinden" zu lassen und wollte die hauptrubriken sauber in einen <h2> schreiben.
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: navigation über sitemapmodul

Beitrag von Spider IT »

Ich hänge hier mal das Modul an, welches ich verwende (aus C 4.6.x).
Es funktioniert ohne zusätzlichen Dateien (auch ohne Template).

Gruß
René
Dateianhänge
Sitemap.zip
(1.6 KiB) 120-mal heruntergeladen
goshzh
Beiträge: 10
Registriert: Mo 19. Mär 2012, 16:01
Kontaktdaten:

Re: navigation über sitemapmodul

Beitrag von goshzh »

genau das habe ich gesucht!

Code: Alles auswählen

if ($lvl == 1) {
                    $result.=  "<li><h2>".$db->f("name")."".vpSitemap($db->f("idcat"), $lvl)."</h2></li>\n";
                }
                if ($lvl == 2) {
                    $result.=  "<li><a href='front_content.php?idcat=".$db->f("idcat")."&lang=$lang&client=$client' title='Ebene ".$lvl.": ".$db->f("name")."'>".$db->f("name")."</a>".vpSitemap($db->f("idcat"), $lvl)."</li>\n";
                }
jetzt kann ich nämlich sauber meine hauptrubriken anders darstellen. vielen dank!

kurze frage zum abschluss: um diese navigation zweimal auf der gleichen seite zu verwenden, hast du da ein tipp? bisher krieg ich nur ne weisse seite. bin aber noch am rumproben.

Nachtrag: hat sich erledigt. function anders benennen reicht bereits.

danke nochmals!!
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: navigation über sitemapmodul

Beitrag von Spider IT »

Im Modul ist eine Funktion deklariert, diese wird bei mehrfachem Einsatz mehrfach deklariert (darf nicht sein).
Also entweder mit function_exists() prüfen, ob die Funktion bereits deklariert wurde, oder das Modul kopieren und bei der zweiten Instanz die Funktion rauslöschen.

Gruß
René
goshzh
Beiträge: 10
Registriert: Mo 19. Mär 2012, 16:01
Kontaktdaten:

Re: navigation über sitemapmodul

Beitrag von goshzh »

jau hatte ich gesehen. vielen dank.
goshzh
Beiträge: 10
Registriert: Mo 19. Mär 2012, 16:01
Kontaktdaten:

Re: navigation über sitemapmodul

Beitrag von goshzh »

hallo rené

kurze frage: hast du dein navigationsmodul auch bereits mit AMR zusammen verwendet?
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: navigation über sitemapmodul

Beitrag von Spider IT »

Ja sicher, siehe Beispiel ein paar Beiträge höher :)
Wichtig ist nur, dass AMR die Links beim Ausgeben der Seiten umschreibt und nicht beim Generieren.

Gruß
René
goshzh
Beiträge: 10
Registriert: Mo 19. Mär 2012, 16:01
Kontaktdaten:

Re: navigation über sitemapmodul

Beitrag von goshzh »

[*]Wichtig ist nur, dass AMR die Links beim Ausgeben der Seiten umschreibt und nicht beim Generieren.[*]

das sollte AMR nach standard-installation jedoch immer machen?

mir generiert er nur den ersten link nach einer alt-benannten kategorie und alle weiteren aus dem root mit /index.html.
exakt ein bug, der unter version 0.5.3 beschrieben wird, in meiner 0.5.5 version jedoch eigentlich behoben wurde.

hab auch schon con_code tabelle geleert. irgendwie speichert der ne alte kategoriebenennung und alle weiteren umwandlungen werden falsch generiert. :shock:
Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: navigation über sitemapmodul

Beitrag von Spider IT »

Wenn AMR Links zu /index.html generiert liegt das nicht selten daran, dass die Kategorien, auf die diese Links eigentlich zielen sollten, offline sind oder keine Startartikel haben.

Gruß
René
Gesperrt