Seite 1 von 1

Zeilenumbruch nach Modulende?!?

Verfasst: Di 26. Okt 2004, 11:51
von kusi
Hallo zusammen

Ich kämpfe momentan mit folgendem Problem:

http://server22.hostpoint.ch/~staatspe/

Bei der Navigation sollten alle Bilder mit Links hintereinander stehen. Contenido macht aber nach Ende des Moduls eine neue Zeile, was das Layout zerüttet.

Im Layout sieht das folgendermassen aus:
...<td>CMS_CONTAINER[1]</td>...

Wird CMS_CONTAINER[1] aber ausgewertet, das heisst wie über das Template definiert die Navigation eingebunden funktioniert alles bestens nur am Schluss:

<td width="730" align="right" background="images/b_back.gif"><a onmouseout="sm('');" onmouseover="sm('-Home-'); return true;" href="front_content.php?idcat=3" target="_self"><img border="0" alt="Home" name="home" src="images/b_homeh.gif"></a> ... src="images/b_beitritt.gif"></a>
</td>

macht es zwischen dem letzten </a> Tag und </td> eine neue Zeile... :-(

Wie kann ich dies vermeiden, gibt es eine Möglichkeit über HTML das Verschieben des Layouts zu unterbinden?

Verfasst: Di 26. Okt 2004, 12:06
von swelpot
denke, dass es an der ausgabe deines moduls liegt (der zeilenumbruch). poste mal den code...

html-mäßig wäre mir nichts dergleichen bekannt. du könntest lediglich die höhe der zelle per css genau festlegen (bin ich aber kein fan von)...

grüße

stefan

Verfasst: Di 26. Okt 2004, 16:04
von kusi
Danke für die prompte Antwort!

Hier der Modulcode:

Output:

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


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

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

/* 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, $perm;

$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,
C.public
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';

if ($db->f("public") == 1 || $perm->have_perm_area_action_item("str","front_allow", $db->f("idcat")) || $perm->have_perm())
{
$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);

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

/* 1. Navigations Ebene */
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'NAMESMALL', strtolower($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'])) {
$html .= $tpl->generate('templates/navfirst_on.html',1,0);
} else {
$html .= $tpl->generate('templates/navfirst_off.html',1,0);
}

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'])) {
$html .= $tpl->generate('templates/navsecond_on.html',1);
} else {
$html .= $tpl->generate('templates/navsecond_off.html',1);
}

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']) {
$html .= $tpl->generate('templates/navthird_on.html',1);
} else {
$html .= $tpl->generate('templates/navthird_off.html',1);
}

} // end foreach

} // end if

} // end foreach

} // end if

} // end foreach

/* Output generated content */
echo $html; ?>

Das ganze läuft über template files:
navfirst_on.html:

<!-- BEGIN:BLOCK -->
<a onmouseout="sm('');" onmouseover="sm('-{NAME}-'); return true;" href="{HREF}" target="{TARGET}"><img border="0" alt="{NAME}" name="{NAMESMALL}" src="images/b_{NAMESMALL}h.gif"></a>
<!-- END:BLOCK -->

navfirst_off.html.

<!-- BEGIN:BLOCK -->
<a onmouseout="change('{NAMESMALL}','_n.src'); sm('');" onmouseover="change('{NAMESMALL}','_h.src'); sm('-{NAME}-'); return true;" href="{HREF}" target="{TARGET}"><img border="0" alt="{NAMESMALL}" name="{NAMESMALL}" src="images/b_{NAMESMALL}.gif"></a>
<!-- END:BLOCK -->

Verfasst: Di 26. Okt 2004, 16:33
von swelpot
ich fürchte fast, dass sich bei verwendung dieses moduls dein problem nicht lösen lässt.
der zeilenumbruch kommt aus den templates. dort wird der dynamische bereich mit <!-- BEGIN:BLOCK --> und <!-- END:BLOCK --> begrenzt. nach dem </a> kommt ein Zeilenumbruch und dann erst das <!-- END:BLOCK -->. Um das zu beheben müsstest du <!-- END:BLOCK --> direkt hinter </a> schreiben. Damit würde dann aber die Templateklasse nicht mehr funktionieren, da dort zeilenweise nach den dynamischen Begrenzungen gesucht wird...
Schmutzige alternative wäre, die ausgabe direkt in das modul zu schreiben. dann könntest du alles ohne zeilenumbruch hintereinander klatschen...
oder die templateklasse umbauen, so dass der dynamische bereich auch vollständig gefunden wird, wenn noch anderer code mit in der entsprechenden zeile der begrenzer steht...


grüße

stefan

Verfasst: Di 26. Okt 2004, 17:41
von kusi
Danke für den Vorschlag!

Werde mal schauen, was ich machen kann!