Hi,
sorry dass ich mich jetzt erst melde. Hatte meinen Server mit akutellem openSUSE neu aufgesetzt. Deswegen konnte ich mich nicht um die Bearbeitung meines Problems und Deiner Antworten, Nobbie, kümmern.
So nun zu dem Problem.
Nobbie wrote:Grausamer Spaghetti-Code. ...
Hast Recht, das was ich gepostet hatte war ja nur ein sehr früher Alpha-Code.
Oft Code ich einfach nach gefühl drauf los, und wenn die Funktionalität dann gegeben ist bereinige ich den Code.
Nobbie wrote:...Vielleicht deklarierst Du erst einmal die Parameter für diese Funktion "vernünftig", d.h.:
a) nicht als Array, sondern wirklich fünf Parameter angeben
b) nicht als nichtssagende Namen $values[0], sondern mit einem sprechenden Namen, der den jeweiligen Sinn des einzelnen Parameters wiederspiegelt
...
Habe ich auch getan. Reduziert habe ich auf 3 Parameter.
- Code: Select all
$return_rows
$build_list
$parent_id
Der Sinn der Methode ist es, erstens nur die Anzahl an Kategorien zu liefern und zweitens eine Liste mit den Katagorien zu bauen.
Die Anzahl der Kategorien benötige ich um zu bestimmen ob zum Beispiel eine Infotabelle angezeigt wird dass keine Kategorien vorhanden sind oder halt die Übersichtstabelle anzuzeigen.
Hier der HTML-Code:
- Code: Select all
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="<? echo $language['common']['language']['short']; ?>" dir="<? echo $language['common']['language']['dir']; ?>">
<head>
<meta http-equiv="content-type" content="text/html; charset=<? echo $language['common']['language']['charset']; ?>">
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="expires" content="0">
<meta http-equiv="cache-control" content="no-cache">
<link rel="stylesheet" type="text/css" href="themes/<? echo $_SESSION['theme']; ?>/css/content.css">
<link rel="stylesheet" type="text/css" href="themes/<? echo $_SESSION['theme']; ?>/css/content_box.css">
<link rel="stylesheet" type="text/css" href="themes/<? echo $_SESSION['theme']; ?>/css/title.css">
<title><? echo $language['admin']['overviews']['references']['categories']['title']; ?></title>
<script type="text/javascript">
with (parent)
{
header1.location.href = "header1.php?category=website";
header2.location.href = "header2.php?category=website&sub_category=references_categories";
<?
if ($overviews->references_categories(TRUE,FALSE,NULL) == 0)
{
?>
pathbar.location.href = "pathbar.php?main=website&sub=references_categories_no_entries";
<?
}
else
{
?>
pathbar.location.href = "pathbar.php?main=website&sub=references_categories_overview";
<?
}
?>
}
function width_values()
{
var main_document_width = document.body.clientWidth;
var side_spacer_cells = (2*10);
var border_cells = (2*6);
var button_cells = (1*16);
with (document)
{
getElementById("main_table").style.width = main_document_width;
getElementById("top_separator").style.width = main_document_width;
getElementById("bottom_separator").style.width = main_document_width;
<?
if ($overviews->references_categories(TRUE,FALSE,NULL) == 0)
{
?>
getElementById("no_categories_title").style.width = main_document_width-(side_spacer_cells+border_cells);
getElementById("no_categories_content").style.width = main_document_width-(side_spacer_cells+border_cells);
getElementById("no_categories_footer").style.width = main_document_width-side_spacer_cells;
<?
}
else
{
?>
getElementById("overview_category_title").style.width = main_document_width-(side_spacer_cells+border_cells+button_cells);
getElementById("overview_category_footer").style.width = main_document_width-(side_spacer_cells+border_cells);
<?
}
?>
}
}
</script>
</head>
<body onload="width_values();">
<script type="text/javascript" src="../js/wz_tooltip.js"></script>
<table border="1" cellpadding="0" cellspacing="0" id="main_table">
<?
if ($overviews->references_categories(TRUE,FALSE,NULL) == 0)
{
?>
<tr>
<td colspan="5" id="top_separator"> </td>
</tr>
<tr>
<td rowspan="3" style="width:10px;"><img src="../images/spacer.gif" style="width:10px;"></td>
<td class="title_left" style="width:6px;"><img src="../images/spacer.gif" style="width:6px;"></td>
<td class="title_middle" id="no_categories_title" style="text-align:right;"><a href="new.php?what=references_category&start=<? echo $_GET['start']; ?>"><img src="themes/<? echo $_SESSION['theme']; ?>/icons/new.gif" alt="" onmouseover="Tip('<? echo $language['tooltips']['admin']['overviews']['references']['categories']['new']['text']; ?>',TITLE,'<? echo $language['tooltips']['admin']['overviews']['references']['categories']['new']['title']; ?>',SHADOW,'TRUE',WIDTH,350,JUMPHORZ,'TRUE')" onmouseout="UnTip()"></a></td>
<td class="title_right" style="width:6px;"><img src="../images/spacer.gif" style="width:6px;"></td>
<td rowspan="3" style="width:10px;"><img src="../images/spacer.gif" style="width:10px;"></td>
</tr>
<tr>
<td class="content_box_left" style="width:6px;"><img src="../images/spacer.gif" style="width:6px;"></td>
<td class="content_box_middle" id="no_categories_content" style="text-align:center;"><h1><? echo $language['admin']['overviews']['references']['categories']['no_references_categories']; ?></h1></td>
<td class="content_box_right" style="width:6px;"><img src="../images/spacer.gif" style="width:6px;"></td>
</tr>
<tr>
<td class="content_foot" id="no_categories_footer" colspan="3"> </td>
</tr>
<tr>
<td id="bottom_separator" colspan="5"> </td>
</tr>
<?
}
else
{
?>
<tr>
<td id="top_separator" colspan="6"> </td>
</tr>
<tr>
<td style="width:10px;"><img src="../images/spacer.gif" style="width:10px;"></td>
<td class="title_left" style="width:6px;"><img src="../images/spacer.gif" style="width:6px;"></td>
<td class="title_middle" id="overview_category_title" style="text-align:center;"> </td>
<td class="title_middle" style="width:16px;"><a href="new.php?what=references_category&start=<? echo $_GET['start']; ?>"><img src="themes/<? echo $_SESSION['theme']; ?>/icons/new.gif" alt="" onmouseover="Tip('<? echo $language['tooltips']['admin']['overviews']['references']['categories']['new']['text']; ?>',TITLE,'<? echo $language['tooltips']['admin']['overviews']['references']['categories']['new']['title']; ?>',SHADOW,'TRUE',WIDTH,350,JUMPHORZ,'TRUE')" onmouseout="UnTip()"></a></td>
<td class="title_right" style="width:6px;"><img src="../images/spacer.gif" style="width:6px;"></td>
<td style="width:10px;"><img src="../images/spacer.gif" style="width:10px;"></td>
</tr>
<tr>
<td style="width:10px;"><img src="../images/spacer.gif" style="width:10px;"></td>
<td class="content_box_left" style="width:6px;"><img src="../images/spacer.gif" style="width:6px;"></td>
<td><ul><? $overviews->references_categories(FALSE,TRUE,0); ?></ul></td>
<td class="content_box_right" style="width:6px;"><img src="../images/spacer.gif" style="width:6px;"></td>
<td style="width:10px;"><img src="../images/spacer.gif" style="width:10px;"></td>
</tr>
<tr>
<td style="width:10px;"><img src="../images/spacer.gif" style="width:10px;"></td>
<td class="content_foot" id="overview_category_footer" style="text-align:center;" colspan="4"> <? #$common->page_navigation($parent_categories_total_rows,$config['references_per_page']); ?></td>
<td style="width:10px;"><img src="../images/spacer.gif" style="width:10px;"></td>
</tr>
<tr>
<td id="bottom_separator" colspan="6"> </td>
</tr>
<?
}
?>
</table>
</body>
</html>
Und hier der überarbeitete Code der Methode:
- Code: Select all
PUBLIC function references_categories ($return_rows,$build_list,$parent_id)
{
if ($return_rows === TRUE)
{
$query = $this->mysqli->query("SELECT `id` FROM `".MYSQL_TABLE_REFERENCES_CATEGORIES."`");
RETURN $query->num_rows;
}
if (($build_list === TRUE) && is_numeric($parent_id))
{
$run = 1;
$query = $this->mysqli->query("SELECT * FROM `".MYSQL_TABLE_REFERENCES_CATEGORIES."` WHERE `parent_id` = '{$parent_id}' ORDER BY `parent_id` ASC, `category_name_{$_SESSION['lang']}` ASC");
$rows = $query->num_rows;
while ($result = $query->fetch_array(MYSQL_ASSOC))
{
if (($parent_id != 0) && ($run == 1)) { echo "<ul>"; }
echo "<li>";
if ($_SESSION['lang'] != "de")
{
if (empty($result['category_name_'.$_SESSION['lang']])) { echo $result['category_name_de']; }
else { echo $result['category_name_'.$_SESSION['lang']]; }
}
else { echo $result['category_name_de']; }
echo "</li>";
$this->references_categories($return_rows,$build_list,$result['id']);
if (($result['parent_id'] != 0) && ($run == $rows))
{
echo "</ul>";
}
$run++;
}
}
}
Die Tabellenstruktur sieht folgendermaßen aus:
- Code: Select all
CREATE TABLE IF NOT EXISTS `categories` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`category_name_de` varchar(25) COLLATE latin1_general_cs NOT NULL,
`category_name_fr` varchar(25) COLLATE latin1_general_cs NOT NULL,
`category_name_lb` varchar(25) COLLATE latin1_general_cs NOT NULL,
`description_de` varchar(100) COLLATE latin1_general_cs NOT NULL,
`description_fr` varchar(100) COLLATE latin1_general_cs NOT NULL,
`description_lb` varchar(100) COLLATE latin1_general_cs NOT NULL,
`parent_id` bigint(20) unsigned NOT NULL DEFAULT '0',
`active` enum('0','1') COLLATE latin1_general_cs NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs PACK_KEYS=0;
Das hier ist der (Test-)Inhalt:
- Code: Select all
INSERT INTO `categories` (`id`, `category_name_de`, `category_name_fr`, `category_name_lb`, `description_de`, `description_fr`, `description_lb`, `parent_id`, `active`) VALUES
(1, 'Neubau', '', '', '', '', '', 0, '1'),
(2, 'Altbau', '', '', '', '', '', 0, '1'),
(3, 'Bäder', '', '', '', '', '', 2, '1'),
(4, 'Bäder', '', '', '', '', '', 1, '1'),
(5, 'Küchen', '', '', '', '', '', 2, '1'),
(6, 'Test', '', '', '', '', '', 5, '1'),
(7, 'Test 2', '', '', '', '', '', 3, '1'),
(8, 'Test 3', '', '', '', '', '', 6, '1');
Es soll die Möglichkeit gegeben sein mittel dem Feld
parent_id (theoretisch) beliebig viele Kategorien und beliebig viele Ebenen anzulegen.
Aussehen sollte es mit den momentanen Testeinträgen folgendermaßen:
Das habe ich jetzt hinbekommen.
Ein paar Kleinigkeiten sind noch zu machen.
Danke Nobbie für Deine Hilfe.
Kai aka Knight1