Seite 1 von 4

Modul Hauptnavigation aus der 4.6.2 zweimal einsetzen

Verfasst: Di 8. Nov 2005, 21:31
von AnKe
Hallo,
ersteinmal den Entwicklern einen großen Dank. Bei mir hat installationstechisch alles gut geklappt (all-inkl.com) und ich bin schwer begeistert über die neue Version 4.6.2.

Meine Frage: Ich möchte das Modul Hauptnavigation zweimal untereinander einsetzen mit zwei unterschiedlichen Bäumen, die jeweils eine eigene Übrschrift haben. Ich hab in den Mandanteneinstellungen erstmal versucht der Variable navigation/idcat_homepage die Werte beider Kategorien zu geben mit Kommas getrennt. (Das war so meine Idee im ersten Moment, woran man wahrscheinlich sehen kann, dass ich nicht sehr viel Ahnung habe) . Ist es generell möglich das Modul zweimal einzusetzen und wie muss ich vorgehen. Kann ich das Modul kopieren und muss im zweiten nur irgendwelche Variablen ändern? und wenn ja welche.

Danke schonmal im voraus
Andrea

Verfasst: Di 8. Nov 2005, 21:36
von HerrB
Wenn sich ein Freiwiliger darum kümmert - sonst ist es eine super Gelegenheit zum php lernen...

Gruß
HerrB

Verfasst: Di 8. Nov 2005, 21:41
von AnKe
Womit hängt das zusammen, dass es hier nicht mehr fkt. (In der 4.4.4 hatte ich die HNmit CSS+Mouseover zweimal eingesetzt und das ging). Ich hab irgendwo gelesen, das hinge mit den Startartikeln zusammen?
AnKe

Verfasst: Di 8. Nov 2005, 21:45
von Halchteranerin
AnKe hat geschrieben:Ich hab irgendwo gelesen, das hinge mit den Startartikeln zusammen?
Nein, das liegt daran, dass du bei einer Kopie die Variablen und Funktionen umbenennen muesstest. Ich kenne deine (alte) eingesetzte Navi nicht, aber ich weiss, dass es auch schon mal eine Navi gab, die man mehrfach innerhalb einer Seite einsetzen konnte. Bei der mitgelieferten Hauptnavi ging das aber frueher ebenfalls nicht.

Verfasst: Di 8. Nov 2005, 21:45
von HerrB
Die Hauptnavigation aus V4.4.x konnte auch auch in V4.4.x erst nach Änderungen in der Programmierung (Variablen und Funktionen) verwendet werden.

Sofern Du Dein Modul aus V4.4.x meinst: Ja, das dürfte nicht mehr funktionieren, wenn es Startartikel beachtet. Aber Du kannst es ja mal probieren (als separates Modul). Lege zum Testen zus. eine neue Kategorie an bzw. ändere mal, welcher Artikel in einer Kategorie Startartikel ist.

Gruß
HerrB

Verfasst: Di 8. Nov 2005, 21:48
von Halchteranerin
HerrB hat geschrieben:Sofern Du Dein Modul aus V4.4.x meinst: Ja, das dürfte nicht mehr funktionieren, wenn es Startartikel beachtet.
Ach so, die Anmerkung mit dem Startartikel bezog sich auf ihre andere Hauptnavi, nicht auf die mitgelieferte. Das kann natuerlich sein ...
AnKe, du kannst irgendwo beim neuen Contenido (ich weiss gerade nicht wo, weil ich mich noch nicht genau damit befasst habe, aber es ist an mehreren Stellen im Forum beschrieben) auch einstellen, dass es sich bezueglich Startartikel wie die alte Version verhaelt, dann koenntest du wahrscheinlich auch deine alte Navi benutzen.

Verfasst: Di 8. Nov 2005, 21:52
von HerrB
Ja, aber Vorsicht, nicht ständig hin- und herwechseln...

contenido/includes/config.misc.php

Gruß
HerrB

Verfasst: Di 8. Nov 2005, 22:00
von AnKe
Ganau, das hatt ich schon probiert, in diese Datei $cfg ... = true eingetragen , da kann ich aber im Backend garnichts mehr machen und krieg eine Fehlermeldung, das in dieser Datei was nicht stimmt.

Verfasst: Di 8. Nov 2005, 22:02
von AnKe
Aber eigentlich würd ich einfach gerne die mitgelieferte Navi verwenden. ich werd mal ein bißchen rumprobieren. Die Variable hatte ich aus der ...misc.php wieder rausgenommen, dann ging alles wieder

Verfasst: Di 8. Nov 2005, 22:03
von HerrB
Das Simikolon hinter dem true sollte aber noch stehen bleiben. Ansonsten probiere es noch mal und poste ggf. die fertige Datei.

Außerdem: Lerne PHP, war echt kein Scherz: http://www.php.net

Gruß
HerrB

Verfasst: Di 8. Nov 2005, 22:08
von AnKe
Das wirds wohl gewesen sein. Ich versuchs nochmal. Danke erstmal für die Tipps.
Und mit dem PHP lernen... mühsam nährt sich das Eichhörnchen, aber ich bin dabei ... geht irgendwie alles nicht mehr so schnell
:wink:

Viele Grüße
Andrea

Verfasst: Di 22. Nov 2005, 11:15
von Peer
Hat hier jemamand für die zweite Hauptnavigation eventuell einen Output wenn nötig auch inen input.

Da mein PHP nicht so super ist :-)

Ich danke

Verfasst: Di 22. Nov 2005, 13:24
von mvf
ich habe die hauptnavi aus der 4.6.2 gleich mehrfach im einsatz die änderungen sind wie herrB beschrieben hat zu machen

input:

Code: Alles auswählen

?><?php
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname  :      Hauptnavigation
* Author(s)   :     Jan Lengowski, Andreas Lindner, 4fb
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     12.08.2005
************************************************/

#Select tree
?>
<table cellspacing="0" cellpadding="0" cellpadding="4">
    <tr>
        <td class="text"><?php echo mi18n("Baum wählen");?>:</td>
        <td>
            <select name="CMS_VAR[4001]">
            <option value="0">-- <?php echo mi18n("kein");?> --</option>
            <?php
                $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
                            C.idlang    = '".$lang."' AND
                            B.idclient  = '".$client."' AND
                            C.visible   = 1 AND
                            A.level     = '0'
                        ORDER BY
                            A.idtree";

                $db->query($sql);

                while ( $db->next_record() ) {
                    if ( "CMS_VALUE[4001]" == $db->f("idcat") ) {
                        echo '<option selected="selected" value="'.$db->f("idcat").'">'.$db->f("name").'</option>';
                    } else {
                        echo '<option value="'.$db->f("idcat").'">'.$db->f("name").'</option>';
                    }
                }
            ?>
            </select>
        </td>
    </tr>
</table>
<?php
output:

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :      Hauptnavigation
* Author(s)   :     Jan Lengowski, Andreas Lindner, 4fb
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     12.08.2005
************************************************/

#System properties in use:
#Type: navigation, Name: idcat_homepage
#Contains idcat of tree to be displayed in main navigation

#Includes
cInclude("frontend", "includes/functions.navigation.php");

#If no tree is selected, use client setting
$start_cat = "CMS_VALUE[4001]";
if ($start_cat=='') {
    $cApiClient = new cApiClient($client);
	$start_cat = $cApiClient->getProperty('navigation','idcat_homepage');
}

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 catIsChildOf4001($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 ( catIsChildOf4001($idcat, $start_cat) ) {
    $sel_idcat = $idcat;
} else {
    $sel_idcat = $start_cat;
}

/* 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 nav4001($idcat) {

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

        $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 != $start_cat ){

                $navitems = array();
              
                $sql = "SELECT
                            A.idcat,
                            C.name,
				            C.public,
	        			    C.idcatlang
                        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  = '".$start_cat."'
                        ORDER
                            BY A.idtree";

                      $db->query($sql);

                      while ($db->next_record()) {

                            /* Check for external redirects... */
                            $sql = "SELECT
                                        a.external_redirect AS ext,
                                        a.idartlang AS idartlang
                                    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
                                        c.idclient  = '".$client."' AND
                                        c.idcat     = b.idcat AND
                                        a.idart     = b.idart AND
                                        a.idlang    = '".$lang."'";

                            $db2->query($sql);
                            $flag = false;
							while ($db2->next_record()&&!$flag) {
	                            if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
	                            {
									$flag = true;
	                                $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
	
	                                $navitems[$db->f("idcat")] = array("idcat"      => $db->f("idcat"),
	                                                                    "name"      => $db->f("name"),
	                                                                    "target"    => $target,
						                        	                    "public" => $db->f("public"),
		            					            	                "idcatlang" => $db->f("idcatlang"));
	                            }
							}
                      }

           }
           
           return true;
        }

        $sql = "SELECT
                    A.idcat,
                    C.name,
		            C.public,
       			    C.idcatlang
                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,
                            a.idartlang AS idartlang
                        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
                            c.idclient  = '".$client."' AND
                            c.idcat     = b.idcat AND
                            a.idart     = b.idart AND
                            a.idlang    = '".$lang."'";

                $db2->query($sql);
				$flag = false;
                while ($db2->next_record() && !$flag) {
	                if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
	                {
						$flag = true;
	                    $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
	                    
	                    $tmp_nav[$db->f("idcat")] = array("idcat"   => $db->f("idcat"),
	                                                      "name"    => $db->f("name"),
	   	                        	                      "public" => $db->f("public"),
		            					            	  "idcatlang" => $db->f("idcatlang"),
	                                                      "target"  => $target);
	                }
				}
        }

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

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

}  // end function

$sql = "SELECT
            A.idcat,
            C.name,
		    C.public,
       		C.idcatlang
        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,
                    a.idartlang AS idartlang
                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
                    c.idclient  = '".$client."' AND
                    c.idcat     = b.idcat AND
                    a.idart     = b.idart AND
                    a.idlang    = '".$lang."'";

        $db2->query($sql);
        #$db2->next_record();
		$flag = false;
		while ($db2->next_record()&&!$flag) {
	        if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
	        {
				$flag = true;
	            $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
	    
	            $navitems[$db->f("idcat")] = array("idcat"  => $db->f("idcat"),
	                                               "name"   => $db->f("name"),
	  	                        	               "public" => $db->f("public"),
		            					           "idcatlang" => $db->f("idcatlang"),
	                                               "target" => $target);
	        }
		}
}

/* Create Navigation Array */
if(($sel_idcat=='')||($sel_idcat=='0')){

    $cApiClient = new cApiClient($client);
    $sel_idcat = $cApiClient->getProperty('navigation', 'idcat_homepage');
}

nav4001($sel_idcat);

/* Start Output buffer */
ob_start();

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

    /* 1. Navigation level */
	if (checkCatPermission($data['idcatlang'],$data['public'])) {
	    $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/navfirst_on.html');
		}elseif(is_array($data['sub'])){
	        $tpl->generate('templates/navfirst_open.html');
	    } else {
	        $tpl->generate('templates/navfirst_off.html');
	    }

	
    	/* 2. Navigation level */
	    if (is_array($data['sub'])) {
	        foreach ($data['sub'] as $key => $data) {
				if (checkCatPermission($data['idcatlang'],$data['public'])) {
		            $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/navsecond_on.html');

					}elseif(is_array($data['sub'])){
				        $tpl->generate('templates/navsecond_open.html');
		            } else {
		                $tpl->generate('templates/navsecond_off.html');
		            }

				    /* 3. Navigation level */
		            if (is_array($data['sub'])) {
		                foreach ($data['sub'] as $key => $data) {
							if (checkCatPermission($data['idcatlang'],$data['public'])) {
			                    $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');
								}elseif(is_array($data['sub'])){
							        $tpl->generate('templates/navthird_open.html');
			                    } else {
			                        $tpl->generate('templates/navthird_off.html');
			                    }

			                    /* 4. Navigation level */
					            if (is_array($data['sub'])) {
					                foreach ($data['sub'] as $key => $data) {
										if (checkCatPermission($data['idcatlang'],$data['public'])) {
						                    $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/navfourth_on.html');
											}elseif(is_array($data['sub'])){
										        $tpl->generate('templates/navfourth_open.html');
						                    } else {
						                        $tpl->generate('templates/navfourth_off.html');
						                    }

						                    /* 5. Navigation level */
								            if (is_array($data['sub'])) {
								                foreach ($data['sub'] as $key => $data) {
													if (checkCatPermission($data['idcatlang'],$data['public'])) {
									                    $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/navfifth_on.html');
									                    } else {
									                        $tpl->generate('templates/navfifth_off.html');
									                    }
										            } // end if
								                } // end foreach
								            } // end if
							            } // end if
					                } // end foreach
					            } // end if
				            } // end if
		                } // end foreach
		            } // end if
	            } // end if
	        } // end foreach
	    } // end if
    } // end if
} // end foreach

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

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;
?>
Schau dir die beiden codes an und suche nach '4001' dann siehst du was im verhältnis zum original geändert wurde.

Verfasst: Di 29. Nov 2005, 14:07
von oma wetterwax
also ich hab da, glaube ich, einen einfacheren weg gefunden:

die funktionen "catIsChild" und "nav" in ein extra file schreiben und an der richtigen stelle mit cInclude in das modul einbinden
--> voila!
kann man jetzt beliebig oft verwenden.

gruß
oma

Verfasst: Di 29. Nov 2005, 19:13
von HerrB
Wenn möglich, poste doch mal für die Einsteiger bitte noch eine kleine Anleitung (wohin genau, wie binde ich das mit cInclude im Modul ein). Das includes-Verzeichnis im Mandanten-Verzeichns wäre für sowas z.B. ideal.

Danke.

Gruß
HerrB