Ausblendung bestimmter Ordner in Hauptnavigation

Gesperrt
zwene
Beiträge: 4
Registriert: Mo 8. Dez 2003, 19:59
Kontaktdaten:

Ausblendung bestimmter Ordner in Hauptnavigation

Beitrag von zwene » Mo 8. Dez 2003, 20:10

Ich würde gerne in der Hauptnavigation Ordner, die einen bestimmten Namen tragen, nicht anzeigen lassen.

Dies hat den Hintergrund, dass ich zwar gerne die Baumstruktur benutzen will, bestimmte Ordner aber z. B. in einer eigenen Navigationsbox auf der rechten Seite anzeigen lassen möchte. Um nun keine doppelte Auswahl zu erhalten, möchte ich nun Unterordner, die einen bestimmten Titel tragen, nebst Inhalt nicht von der Hauptnavigation anzeigen lassen.

Hat jemand hier eine Idee, wo ich das Ausgabe-Script vom Hauptnavigationsmodul ändern müsste, um dies hinzubekommen? :)

agon
Beiträge: 83
Registriert: Mi 29. Okt 2003, 16:01
Kontaktdaten:

Beitrag von agon » Di 9. Dez 2003, 08:21

Hallo,

wenn Du die Kategorien in der Konfiguration ausblendest, sollten sie in der Hauptnavigation nicht auftauchen (vorausgesetzt, visible='1' wird im SQL-Statement abgefragt). In Deiner zweiten Navi kannst Du diese Abfrage dann ignorieren bzw. gerade solche Kategorien herausziehen, bei den visible='0' gilt.
Du bekommst allerdings ein Problem, wenn Du neue Kategorien einbinden willst, die erst einmal (in der Entwickung) offline bleiben sollen - dafür ist die Methode nämlich eigentlich gedacht.

Gruß
Andreas

timo
Beiträge: 6284
Registriert: Do 15. Mai 2003, 18:32
Wohnort: Da findet ihr mich nie!
Kontaktdaten:

Beitrag von timo » Di 9. Dez 2003, 10:29

Du kannst eventuell nach anderen Merkmalen sortieren. Ich habe bei einer Website jeden Ordner mit einem Prefix versehen, z.b. 01_Test und 02_test.

Ähnliches könntest du auch machen, z.b. l_Linke Navi und r_Rechte Navi und auf dieses Merkmal abprüfen.

Oder: Du merkst dir einfach in einem Modul alles über ein Array und prüfst die Werte im 2. ab (sofern das 2. Modul, also das rechte, nach dem linken im Quelltext kommt).

zwene
Beiträge: 4
Registriert: Mo 8. Dez 2003, 19:59
Kontaktdaten:

Beitrag von zwene » Do 11. Dez 2003, 22:44

Erst einmal vielen Dank für Eure Vorschläge, ich habe auch gleich ein wenig rumgetestet. Ergebnis:

1. Das mit visible = 0/1 funktioniert in der Hauptnavigation hervorragend, in der Artikelliste jedoch klappt das nicht so Recht. Im Prinzip ist das ganze wirklich nicht so praktikabel, wie's erst erscheint, daher lass ich das mal mit dieser Lösung ...

2. Ich habe versucht, im Ausgabemodul der Hauptnavi abzuprüfen, ob ein Unterordner "Folgen" heisst, so dass dieser dann letztendlich nicht angezeigt wird. Irgendwie hab' ich aber nicht die richtigen Stelle und die richtigen Ausdrücke dafür gefunden. Ginge das überhaupt? :oops: Wenn ja, wo müsste ich das im Ausgabemodul genau abfragen?:

Code: Alles auswählen

<?php

/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname   :     Navigation 1.1
* Author      :     Jan Lengowski
* Copyright   :     Contenido - four for business
* Created     :     15-05-2003
* Modified    :     26-05-2003
************************************************/

if ( !is_object($db2) ) {
    $db2 = new DB_Contenido;
}

/**
 * Check if a category is child
 * of another category
 *
 * @return boolean true/false
 * @author Jan Lengowski <Jan.Lengowski@4fb.de>
 * @copyright four for business AG 2003
 */
function catIsChildOf($id, $idparent) {

    global $cfg, $client, $lang;

    $db = new DB_Contenido;

    $parent = $id;

    while ( $parent != 0 ) {

        $sql = "SELECT
                    a.parentid
                FROM
                    ".$cfg["tab"]["cat"]." AS a,
                    ".$cfg["tab"]["cat_lang"]." AS b
                WHERE
                    a.idclient  = '".$client."' AND
                    b.idlang    = '".$lang."' AND
                    a.idcat     = b.idcat AND
                    a.idcat   = '".$parent."'" 

        $db->query($sql);
        $db->next_record();

        $parent = $db->f("parentid");

        if ($parent == $idparent) {
            return true;
        }

    }

    return false;

}

if ( catIsChildOf($idcat, CMS_VALUE[0]) ) {
    $sel_idcat = $idcat;
} else {
    $sel_idcat = CMS_VALUE[0];
}

/* Include Template Class */
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');

/**
 * Array storing alle the
 * navigation data
 */
$navitems = array();


/* Template Instance */
$tpl = new Template;

/**
 * Recursive function for creating
 * the navigation array
 * @param Int $idcat Category id
 */
function nav($idcat) {

        global $navitems, $client, $lang, $cfg;

        $db  = new DB_Contenido;
        $db2 = new DB_Contenido;

        $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat = '$idcat'";

        $db->query($sql);
        $db->next_record();

        $parentid = $db->f("parentid");

        if ( $parentid == 0 ) {

           if ( $idcat != CMS_VALUE[0] ){

                $navitems = array();
              
                $sql = "SELECT
                            A.idcat,
                            C.name
                        FROM
                            ".$cfg["tab"]["cat_tree"]." AS A,
                            ".$cfg["tab"]["cat"]." AS B,
                            ".$cfg["tab"]["cat_lang"]." AS C
                        WHERE
                            A.idcat     = B.idcat   AND
                            B.idcat     = C.idcat   AND
                            B.idclient  = '$client' AND
                            C.idlang    = '$lang'   AND
                            C.visible   = '1'       AND
                            B.parentid  = 'CMS_VALUE[0]' AND
                        ORDER
                            BY A.idtree";

                      $db->query($sql);

                      while ($db->next_record()) {

                            /* Check for external redirects... */
                            $sql = "SELECT
                                        a.external_redirect AS ext
                                    FROM
                                        ".$cfg["tab"]["art_lang"]." AS a,
                                        ".$cfg["tab"]["cat_art"]." AS b,
                                        ".$cfg["tab"]["cat"]." AS c
                                    WHERE
                                        b.idcat     = '".$db->f("idcat")."' AND
                                        b.is_start  = '1' AND
                                        c.idclient  = '".$client."' AND
                                        c.idcat     = b.idcat AND
                                        a.idart     = b.idart AND
                                        a.idlang    = '".$lang."'";

                            $db2->query($sql);
                            $db2->next_record();

                            $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';

                            $navitems[$db->f("idcat")] = array("idcat"      => $db->f("idcat"),
                                                                "name"      => $db->f("name"),
                                                                "target"    => $target);
                      }

           }
           
           return true;
        }

        $sql = "SELECT
                    A.idcat,
                    C.name
                FROM
                    ".$cfg["tab"]["cat_tree"]." AS A,
                    ".$cfg["tab"]["cat"]." AS B,
                    ".$cfg["tab"]["cat_lang"]." AS C
                WHERE
                    A.idcat     = B.idcat   AND
                    B.idcat     = C.idcat   AND
                    B.idclient  = '$client' AND
                    C.idlang    = '$lang'   AND
                    C.visible   = '1'       AND
                    B.parentid  = '$parentid'
                ORDER BY
                    A.idtree";

        $db->query($sql);

        while ($db->next_record()) {

                /* Check for external redirects... */
                $sql = "SELECT
                            a.external_redirect AS ext
                        FROM
                            ".$cfg["tab"]["art_lang"]." AS a,
                            ".$cfg["tab"]["cat_art"]." AS b,
                            ".$cfg["tab"]["cat"]." AS c
                        WHERE
                            b.idcat     = '".$db->f("idcat")."' AND
                            b.is_start  = '1' AND
                            c.idclient  = '".$client."' AND
                            c.idcat     = b.idcat AND
                            a.idart     = b.idart AND
                            a.idlang    = '".$lang."'";

                $db2->query($sql);
                $db2->next_record();

                $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
                
                $tmp_nav[$db->f("idcat")] = array("idcat"   => $db->f("idcat"),
                                                  "name"    => $db->f("name"),
                                                  "target"  => $target);
        }

        $tmp_nav[$idcat]["sub"] = $navitems;
        $navitems = $tmp_nav;

        /* Function call */
        nav($parentid);

}  // end function

$sql = "SELECT
            A.idcat,
            C.name
        FROM
            ".$cfg["tab"]["cat_tree"]." AS A,
            ".$cfg["tab"]["cat"]." AS B,
            ".$cfg["tab"]["cat_lang"]." AS C
        WHERE
            A.idcat     = B.idcat   AND
            B.idcat     = C.idcat   AND
            B.idclient  = '$client' AND
            C.idlang    = '$lang'   AND
            C.visible   = '1'       AND
            B.parentid  = '$sel_idcat'
        ORDER BY
            A.idtree";

$db->query($sql);

while ( $db->next_record() ) {

        /* Check for external redirects... */
        $sql = "SELECT
                    a.external_redirect AS ext
                FROM
                    ".$cfg["tab"]["art_lang"]." AS a,
                    ".$cfg["tab"]["cat_art"]." AS b,
                    ".$cfg["tab"]["cat"]." AS c
                WHERE
                    b.idcat     = '".$db->f("idcat")."' AND
                    b.is_start  = '1' AND
                    c.idclient  = '".$client."' AND
                    c.idcat     = b.idcat AND
                    a.idart     = b.idart AND
                    a.idlang    = '".$lang."'";

        $db2->query($sql);
        $db2->next_record();

        $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';

        $navitems[$db->f("idcat")] = array("idcat"  => $db->f("idcat"),
                                           "name"   => $db->f("name"),
                                           "target" => $target);
}

/* Create Navigation Array */
nav($sel_idcat);

/* Start Output buffer */
ob_start();

echo '<table cellspacing="0" cellpadding="0" border="0">';

foreach ($navitems as $key => $data) {

    /* 1. Navigations Ebene */
    $tpl->reset();
    $tpl->set('d', 'NAME',  $data['name']);
    $tpl->set('d', 'TARGET', $data['target']);
    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
    $tpl->next();

    if ($idcat == $data['idcat'] || is_array($data['sub'])) {
        $tpl->generate('templates/navfirst_on.html');
    } else {
        $tpl->generate('templates/navfirst_off.html');
    }

    if (is_array($data['sub'])) {

        foreach ($data['sub'] as $key => $data) {

            /* 2. Navigations Ebene */
            $tpl->reset();
            $tpl->set('d', 'NAME',  $data['name']);
            $tpl->set('d', 'TARGET', $data['target']);
            $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
            $tpl->next();

            if ($idcat == $data['idcat'] || is_array($data['sub'])) {
                $tpl->generate('templates/navsecond_on.html');
            } else {
                $tpl->generate('templates/navsecond_off.html');
            }

            if (is_array($data['sub'])) {

                foreach ($data['sub'] as $key => $data) {

                    /* 3. Navigations Ebene */
                    $tpl->reset();
                    $tpl->set('d', 'NAME',  $data['name']);
                    $tpl->set('d', 'TARGET', $data['target']);
                    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
                    $tpl->next();

                    if ($idcat == $data['idcat']) {
                        $tpl->generate('templates/navthird_on.html');
                    } else {
                        $tpl->generate('templates/navthird_off.html');
                    }

                } // end foreach

            } // end if

        } // end foreach

    } // end if

} // end foreach

echo '</table>';

/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;

?>

agon
Beiträge: 83
Registriert: Mi 29. Okt 2003, 16:01
Kontaktdaten:

Beitrag von agon » Fr 12. Dez 2003, 08:26

Hallo,

da gibt es mindestens zwei Möglichkeiten:

1. Du könntest bei den SQL-Abfragen in der WHERE-Clause jeweils AND C.name <> 'Folgen' einfügen.

2. Du könntest bei den drei foreach-Schleifen jeweils eine if-Abfrage einfügen (direkt hinter foreach, so daß die gesamte Ausgabe in die if-Abfrage geschachtelt wird: if ($data['name'] != "Folgen") { $tpl-> usw. ... }

Gruß
Andreas

zwene
Beiträge: 4
Registriert: Mo 8. Dez 2003, 19:59
Kontaktdaten:

Beitrag von zwene » Sa 13. Dez 2003, 00:15

agon hat geschrieben:1. Du könntest bei den SQL-Abfragen in der WHERE-Clause jeweils AND C.name <> 'Folgen' einfügen.
Ah, danke, hat geklappt. :) Ich hatte das die letzten Tage zwar auch schon mal versucht, allerdings immer nur jeweils an einer Stelle. Irgendwie muss ich das ganze wohl nicht zu Ende gedacht haben. :oops:

mtealc
Beiträge: 22
Registriert: Sa 29. Nov 2003, 03:22
Kontaktdaten:

Beitrag von mtealc » Sa 13. Dez 2003, 01:38

muss es unbedingt in der Hauptnavi sein?
wenn nein dann benutzt doch ne zweite hilfsnavi


gruss micha
P2 400 DEBIAN Apache 1.3.26 php 4.3.3 mysql postgresql
P2 500 SUSE 8.1 Apache 1.3.26 php 4.3.3 ORACLE 8 Personaledition

P 900 WIN XP Apache 2 php 4.3.3

Gesperrt