Ten eerste wil ik jullie allemaal de beste wensen voor 2009 wensen!
Ik heb een heel leuk menu systeempje ontwikkeld, wat perfect werkt. Maar echter heb ik 1 groot probleem, het probleem zit in de opbouw van het menu (op welke positie hoort de menu item te staan).
Het veranderen van de positie werkt geweldig. Maar nu het verwijderen van een menu item, daar zit de grote fout. Eerst even wat uitleg hoe ik het menu systeem in elkaar heb gezet.
De database:
CREATE TABLE IF NOT EXISTS `phpbb_menu` (
`menu_id` int(9) NOT NULL AUTO_INCREMENT,
`menu_name` varchar(255) NOT NULL,
`menu_link` varchar(255) NOT NULL,
`menu_disabled` tinyint(1) NOT NULL,
`menu_not_created` tinyint(1) NOT NULL,
`menu_order` int(5) NOT NULL,
PRIMARY KEY (`menu_id`),
UNIQUE KEY `menu_place_2` (`menu_place`),
KEY `menu_place` (`menu_place`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=11 ;Echter is voor het probleem zelf menu_order nodig. De menu_order tabel ziet er zo uit als hij gevuld is:
+---------------+---------------+
| menu_name | menu_order |
+--------------------------------
| Home | 1 |
| Forum | 2 |
| Rules | 3 |
| Portfolio | 4 |
| Nieuws | 5 |
| FAQ | 6 |
+---------------+---------------+
Nu wil ik bijv. de menu item Rules verwijderen die de menu_order 4 met zich mee draagt. Nou is dat verwijderen niet een groot probleem. Maar zo gouw ik de boel weer laad in een array en die array weer laad in de template systeem, dan krijg ik een error in firefox. Die error is echter niet van belang hier, hij zegt gewoon weg dat de html indeling verkeerd is en niet geladen kan worden. Maar om dat probleem te voorkomen moet ik de hele menu_order aanpassen. En daar zit het grote probleem.
Als ik de menu item Rules heb verwijderd ziet mijn tabel er zo uit:
+---------------+---------------+
| menu_name | menu_order |
+--------------------------------
| Home | 1 |
| Forum | 2 |
| Portfolio | 4 |
| Nieuws | 5 |
| FAQ | 6 |
+---------------+---------------+
Je ziet daar in dat hij geen order nummer 3 heeft.
Wat ik uiteindelijk wil is dat de tabel er zo uitkomt te zien:
+---------------+---------------+
| menu_name | menu_order |
+--------------------------------
| Home | 1 |
| Forum | 2 |
| Portfolio | 3 |
| Nieuws | 4 |
| FAQ | 5 |
+---------------+---------------+
En om dat te krijgen moet je dat tijdens het verwijderen ook veranderen, maar dan komt de grote vraag hoe. De volgende code heb ik. Ik weet dat ergens iets goed fout doe!
Denk er aan, dit is een code uit een class. En de class is geschreven voor php4
<?php
function delete_item($menu_id)
{
global $db;
$place = $this->get_order_from_item($menu_id);
// First delete and reload
$sql = "DELETE FROM " . MENU_TABLE . " WHERE menu_id = " . $menu_id;
$db->sql_query($sql);
$this->reload_items();
// Push everything up!
if($place != $this->get_highest_position())
{
$total = count($this->menus);
$t = $place;
$i = 1;
while($i <= $total-$place-1)
{
$sql = "UPDATE " . MENU_TABLE . "
SET menu_place = " . $t . "
WHERE menu_place > " . $place;
$db->sql_query($sql);
$t--;
$i++;
}
$this->reload_items();
}
}
?>
Zou iemand me hiermee kunnen helpen?
Mijn dank zal groot zijn.
Alexander de Jong
?>