<br> nach der Navsecond - wo muss das hin?

Gesperrt
SSH
Beiträge: 23
Registriert: So 6. Mär 2005, 00:05
Kontaktdaten:

<br> nach der Navsecond - wo muss das hin?

Beitrag von SSH »

Hallo zusammen!

Kaum ist das eine Problem behoben, schon ist das nächste Problem da.

Ich habe vier Hauptmenüpunkte übereinander. Pro Hauptpunkt soll jetzt eine Zeile mit vielen Unterpunkten nebeneinander(!) aufgehen. Die Navfirst und -second sind soweit angepasst.
Mir fehlt nur noch, dass nach dem letzten Untermenüpunkt (nach dem letzten mal Navsecond aufrufen) noch ein <br> ausgegeben wird.

Hab mir das Modul (Hauptnavigation) schon angesehen, kriegs aber nicht vernünftig auf die Reihe (finde nicht die richtige Stelle).
Also:
Wo (an welcher Stelle) soll ich das <br> unterbringen?

Schon mal Danke

Grüße

SSH
Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix »

Alternativ wäre ein class="hauptpunkt" und class="unterpunkt" und im style bei hauptpunkt ein display block. (4.5.x kenne/ habe ich nicht).

Viel Erfolg
Florian
SSH
Beiträge: 23
Registriert: So 6. Mär 2005, 00:05
Kontaktdaten:

Beitrag von SSH »

Hallo!

Hätte ich da nicht das selbe Problem - sprich "Wo baue ich das ein"?

Wenn ich das in die Navsecond kloppe, dann habe ich ja auch nach jedem Punkt eine neue Zeile.

Ich muss dazu sagen, dass die Menüpunkte kein Text, sondern Grafiken sind. Damit alles "in Position" bleibt, brauche ich eben nach jeweils dem letzten Untermenüpunkt (am Ende der Zeile) ein <br>.

Gruß

SSH
Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix »

Ich weiß nicht, ob das die richtige Navigation ist, aber eigentlich enden alle ziemlich ähnlich.

Das sind die letzten Zeilen aus der Hauptnavigation:

Code: Alles auswählen

               } // 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;

?>
Nach meinem "Gefühl" müsste hinter der Zeile mit dem vorletzten end foreach ein echo '<BR>'; eingefügt werden also:

Code: Alles auswählen

               } // end foreach

            } // end if

        } // end foreach
     echo '<BR>';   // fügt Zeilenumbruch nach 2 Ebene ein  ???
    } // end if

} // end foreach

echo '</table>';

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

/* Clean buffer */
ob_end_clean();

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

?>
Viel Erfolg
Florian
Zuletzt geändert von Beleuchtfix am Fr 22. Jul 2005, 14:30, insgesamt 1-mal geändert.
SSH
Beiträge: 23
Registriert: So 6. Mär 2005, 00:05
Kontaktdaten:

Beitrag von SSH »

Leider Nein!
Die Stelle hatte ich auch schon.

Da haut er mir ein <br> nach der navfirst_on rein.

Gruß

SSH
Beleuchtfix
Beiträge: 1082
Registriert: Di 22. Jul 2003, 10:14
Wohnort: Hessen
Kontaktdaten:

Beitrag von Beleuchtfix »

Dann versuch es einen block höher
Viel Erfolg
Florian
SSH
Beiträge: 23
Registriert: So 6. Mär 2005, 00:05
Kontaktdaten:

Beitrag von SSH »

...leider auch nicht :?

Ich bin in PHP ein absoluter Rooki, komme aber mit Perl ganz gut klar. Schleifen und so verstehe ich schon . In dem Fall ist aber irgendetwas komisch (das <br> erscheint nicht (nur) da, wo man es eigentlich erwarten würde).

Was kommt sonst noch in Frage, außer dem Hauptnavi-Modul?

Was macht die Zeile - speziell das "generate"? Ist das eine Prozedur?:

Code: Alles auswählen

$tpl->generate('templates/navfirst_on.html');
Gruß

SSH
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Beitrag von Oldperl »

Was macht die Zeile - speziell das "generate"? Ist das eine Prozedur?:
In diesen Zeilen werden die im Frontend liegenden Templates für die Navigation ausgelesen, die vorhanden Container in den Templates gefüllt und dann angezeigt. Dies geschieht in einer Schleife, so das jedes Template einen Menüpunkt darstellt.

Zum besseren Verständnis hier der Ausgabeteil der Hauptnavi

Code: Alles auswählen

/* Start Output buffer */
ob_start();

?>
<table align="center" width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td height="21" width="22" class="boxsign"><img src="images/wuerfel.gif" width="22" height="21" border="0"></td>
<td width="130" class="boxtitle">Navigation</td></tr>
<tr><td align="center" colspan="2" class="boxcontent">
<?PHP
echo '<table border="0" cellspacing="0" cellpadding="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>';
echo '</td></tr></table>';
/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;
Und jetzt im Detail

Code: Alles auswählen

/* Start Output buffer */
ob_start();
?>
Ein Ausgabepuffer wird initialisiert, in den nun alle weiteren Daten erst mal geschrieben werden.

Code: Alles auswählen

<table align="center" width="100%" border="0" cellspacing="0" cellpadding="0">
<tr><td height="21" width="22" class="boxsign"><img src="images/wuerfel.gif" width="22" height="21" border="0"></td>
<td width="130" class="boxtitle">Navigation</td></tr>
<tr><td align="center" colspan="2" class="boxcontent">
Die Tabelle für die Navigationsbox wird geöffnet und der Boxheader wird mit dem Standardpfeilgif und Titel der Box erstellt.

Code: Alles auswählen

<?PHP
echo '<table border="0" cellspacing="0" cellpadding="0">';
Die innere Tabelle für die Navpunkte wird geöffnet.

Code: Alles auswählen

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();
Es wird eine Schleife gestarte, die das erstellte array $navitems ausliest.
Mit der Klasse $tpl werden nun für diesen Menüpunkt die Variablen (NAME, TARGET, HREF), die so auch als Container im Template stehen, mit den entsprechenden Werten gefüllt.

Code: Alles auswählen

    if ($idcat == $data['idcat'] || is_array($data['sub'])) {
        $tpl->generate('templates/navfirst_on.html');
    } else {
        $tpl->generate('templates/navfirst_off.html');
    }
Abhängig davon ob der Menüpunkt aktiv ist oder nicht ($idcat == $data['idcat']), oder es eine weitere Navebene gibt (is_array($data['sub'])), werden entweder in dem Template navfirst_on.html oder navfirst_off.html die entsprechenden Container mit den vorher erstellten Klassenvariablen gefüllt.

Code: Alles auswählen

    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');
                    }
Hier wird genau dasselbe für 2 weiter Navigationsebenen gemacht, wobei die Information darüber aus dem array $data['sub'] genommen werden.

Code: Alles auswählen

                } // end foreach

            } // end if

        } // end foreach

    } // end if

} // end foreach

echo '</table>';
echo '</td></tr></table>';
/* Read out buffer */
$html = ob_get_contents();
Jetzt werden alle geöffneten Schleifen, dann zuerst die innere Tabelle, dann die äußere, geschlossen und die so erstellten Daten ( am Anfang mit ob_start() ) in die Variable $html geschrieben.

Code: Alles auswählen

/* Clean buffer */
ob_end_clean();

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

?>
Zum Abschluß wird der Puffer gelöscht und das Menü in $html ausgegeben.

Gruß aus Franken

Ortwin
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
SSH
Beiträge: 23
Registriert: So 6. Mär 2005, 00:05
Kontaktdaten:

Beitrag von SSH »

Jo, danke!

Ich habs jetzt soweit (war mit ein Bißchen Code lesen ja völlig simpel :oops:) aber:

Eine Frage an die Entwickler oder andere Pros:
Wenn ich an der entsprechenden Stelle das Wort "test" ausgeben lasse, dann ist alles OK (wird wie erwartet angezeigt).

Wenn ich aber hier mein <br> ausgeben lasse, dann ist im Frontend zu dem <br> noch ein zusätzlicher(!) Zeilenumbruch zu sehen; im Quelltext steht aber nur das <br>.

Lasse ich ein "test<br>" ausgeben, dann schreibt Contenido "test" und macht dann einen wunderschönen Zeilenumbruch. Allerdings schließen die Elemte (Grafiken) der nächsten Zeile nicht direkt an, sondern es wird ein Freiraum von 2 oder 3 pix ausgegeben :cry:

Versuche ich an dieser Stelle statt dem <br> ein \n auszugeben, wird das mal gleich ganz ignoriert.

Woran liegt das???

Danke und Grüße

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

Beitrag von timo »

ähm das liegt nicht an Contenido, sondern am IE...
Oldperl
Beiträge: 4316
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Hat sich bedankt: 6 Mal
Danksagung erhalten: 4 Mal
Kontaktdaten:

Beitrag von Oldperl »

SSH hat geschrieben:Wenn ich aber hier mein <br> ausgeben lasse, dann ist im Frontend zu dem <br> noch ein zusätzlicher(!) Zeilenumbruch zu sehen; im Quelltext steht aber nur das <br>.
hmm, das kann verschiedene Gründe haben. Schon mal geschaut ob da ein Stylesheet evtl irgendwo ein 'margin' oder 'padding' definiert?
Vielleicht einfach mal den Quelltext aus der Browseransicht in ne neue HTML-Datei kopieren und daran mal versuchen.
Lasse ich ein "test<br>" ausgeben, dann schreibt Contenido "test" und macht dann einen wunderschönen Zeilenumbruch. Allerdings schließen die Elemte (Grafiken) der nächsten Zeile nicht direkt an, sondern es wird ein Freiraum von 2 oder 3 pix ausgegeben :cry:
Wenn du mir das Layout mal schickst, oder ist es schon Online, könnt ich ja mal schaun 8)
Versuche ich an dieser Stelle statt dem <br> ein \n auszugeben, wird das mal gleich ganz ignoriert.

Woran liegt das???
Nun da \n kein HTML-Tag ist sollte das auch so sein. Wird doch eher in Scriptsprachen benutzt, z. B. in Javascript, wenn man eine Meldung ausgibt zum Umbrechen des Meldungstextes.

@timo
Ich geb dir recht das viele Sachen mit dem IE nicht gleich funktionieren, aber oft gibts grad beim HTML-Layout Kniffe und Tricks um den Microdoof-Browser auszuspielen :wink:
ConLite 3.0.0-dev, alternatives und stabiles Update von Contenido 4.8.x unter PHP 8.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog
Gesperrt