Navigationsmodul Problem <li><ul> W3C

Gesperrt
Sjakie
Beiträge: 2
Registriert: So 30. Apr 2006, 19:40
Kontaktdaten:

Navigationsmodul Problem <li><ul> W3C

Beitrag von Sjakie »

Hallo,

Im Moment versuche ich meine Contenido Seiten W3C-valide (HTML 4.01 Transitional) zu gestalten, und das hat geklappt bis auf folgende Fehler im Navigations-Modul:

# Error Line 46 column 1246: document type does not allow element "UL" here; assuming missing "LI" start-tag.
...">Sitemap</a></li><ul id="subnavlist"></ul></ul></div><br>

# Error Line 46 column 1251: end tag for "UL" which is not finished.
...emap</a></li><ul id="subnavlist"></ul></ul></div><br>

Dieses Problem ist auch ausführlich in diesem Thread beschrieben, aber nie gelöst worden: http://www.contenido.org/forum/viewtopic.php?t=8520

An sonsten finde ich keine Lösungsansätze zu diesen Problem. Kann jemanden mir dabei weiterhelfen? Der eingebundene Menucode ist:

Code: Alles auswählen

<?php


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
 * ergänzung: ohne Templates, nur css
 *            Frank Hoffmann - www.x28.de
 */
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];
}

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

/**
 * 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]'
                        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 '<div id="navcontainer">';

echo  '<ul>';

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

    /* 1. Navigations Ebene */
    if ($data['idcat'] == $idcat) {
      echo '<li><span class="menubullit">&bull;&nbsp;</span><a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" id="navactive1" target="'.$data['target'].'">'.$data['name'].'</a></li>';   
    }
    else {
      echo '<li><span class="menubullit">&bull;&nbsp;</span><a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" target="'.$data['target'].'">'.$data['name'].'</a></li>';   
    }
    if (is_array($data['sub'])) {
        echo  '<ul id="subnavlist">';
        foreach ($data['sub'] as $key => $data) {
            /* 2. Navigations Ebene */           
            if ($data['idcat'] == $idcat) {
               echo '<li>-&nbsp;<a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" id="navactive2" target="'.$data['target'].'">'.$data['name'].'</a></li>';   
            }
            else {
            echo '<li>-&nbsp;<a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" id="nav2" target="'.$data['target'].'">'.$data['name'].'</a></li>';   
            }
         
            if (is_array($data['sub'])) {
                echo  '<ul id="subsubnavlist">';
                foreach ($data['sub'] as $key => $data) {
                    /* 3. Navigations Ebene */
                   if ($data['idcat'] == $idcat) {
                      echo '<li>-&nbsp;<a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" id="navactive3" target="'.$data['target'].'">'.$data['name'].'</a></li>';   
                   }
                   else {
                      echo '<li>-&nbsp;<a href="'.$sess->url('front_content.php?idcat='.$data['idcat']).'" id="nav3" target="'.$data['target'].'">'.$data['name'].'</a></li>';   
                   }
                } // end foreach
                echo '</ul>';
            } // end if
         } // end foreach
        echo '</ul>';
     } // end if   
} // end foreach

echo '</ul>';
echo '</div>';

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

/* Clean buffer */
ob_end_clean();

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

?>
Zuletzt geändert von Sjakie am So 30. Apr 2006, 22:11, insgesamt 2-mal geändert.
Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin »

Bitte keine unaufgeforderten Privatnachrichten mit Hilfegesuchen schicken. WENN ich helfen kann, dann mache ich das im Forum, da ich auch alle Postings lese. PN werden nicht beantwortet!
Sjakie
Beiträge: 2
Registriert: So 30. Apr 2006, 19:40
Kontaktdaten:

Beitrag von Sjakie »

Nein, das ist ein XHTML Menü. Und da ich TinyMCE eingebunden habe, und bei den Infos bezüglich des Contenido Release 4.6.8 folgende Infos stehen, ist das leider keine Lösung.

========== Quote: ==========

Bekannte Probleme:
- Wird der tinyMCE als WYSIWYG-Editor verwendet, so wird die XHTML-Formatierung verworfen wenn der Content über das Insite Editing gespeichert wird. Dies ist ein Problem der Microsoft DHTML-Editing Komponente, welche die XHTML-Formatierung in entsprechende "Microsoft"-Standards umwandelt. Workarounds: Entweder kein XHTML oder kein Insite-Editing verwenden.

http://www.contenido.org/forum/viewtopic.php?t=12001

========= Endquote. =========

Trotzdem vielen Dank für die schnelle Reaktion!
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

mal abgeshen dass das nicht zu deinem eigetlichen prob gehört, aber xhtml valid geht doch ;)

http://contenido.org/forum/viewtopic.ph ... html+valid

zu deinem list probin der standard navi:

hier mal der auszug aus ner 4.6.8 standard navioutput gekürzt auf 1 level

Code: Alles auswählen

print ('<ol id="navigation">');

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/navi/navi1Open.html');
			}elseif(is_array($data['sub'])){
			    $tpl->generate('templates/navi/navi1Active.html');
			} else {
			    $tpl->generate('templates/navi/navi1Passive.html');
			}


    } // end if
} // end foreach

print ('</ol>');
dazu dann ein html-template beispiel

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
	<li class="menuLev1Active"><a href="{HREF}" class="navi1Active" title="{NAME}">{NAME}</a></li>
<!-- END:BLOCK -->
der rest is css
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
Halchteranerin
Beiträge: 5478
Registriert: Di 2. Mär 2004, 21:11
Wohnort: Halchter, wo sonst? ;-)
Kontaktdaten:

Beitrag von Halchteranerin »

aehm, das Modul ist zwar XHTML-konform, aber das heisst nicht, dass du es nicht benutzen kannst, wenn du kein XHTML benutzt. Und da wird nichts von TinyMCE geaendert, weil du ja das Modul nicht mit TinyMCE bearbeitest.
Und bei DEM Modul sind zumindest (nach Darth-Vaders Aussage) UL und LI richtig benutzt worden. Ich wuerd's einfach mal versuchen!
Bitte keine unaufgeforderten Privatnachrichten mit Hilfegesuchen schicken. WENN ich helfen kann, dann mache ich das im Forum, da ich auch alle Postings lese. PN werden nicht beantwortet!
conradius
Beiträge: 168
Registriert: Di 19. Jul 2005, 11:52
Wohnort: Wabern (Bern/CH)
Kontaktdaten:

Beitrag von conradius »

Guck mal in diesem Thread vorbei. Da habe ich meine Version der Hauptnavigation vorgestellt, welche eine korrekt verschachtelte, template gesteuerte ul ausgibt: http://contenido.org/forum/viewtopic.php?p=80390#80390

lieber Gruss
Gesperrt