Kategorihantering

PHPportalen Forum Index » Tips och Trix
Lägg ett bokmärke på hela tråden
Skapa nytt inlägg   Svara på inlägget Gå till sida Föregående  1, 2, 3, 4, 5
Visa föregående ämne :: Visa nästa ämne  
Startad av: Meddelande
Malte
in memoriam 1



Medlem i: 6302 dagar
Från: Tingsryd
Status: Offline



#434990
Inlägg Skrivet: 2006-11-16 07:20      Ämne: Citera

Något som är enkelt att använda är dtree.

Jag har själv använt den i ett projekt där jag med hämtning från databasen byggde upp en flerdimensionell array (6 nivåer), och sedan utifrån denna ritade upp ett träd med dtree:
PHP:
1:
<script type="text/javascript" src="/dtree/dtree.js"></script>
2:
 
3:
<p><a href="javascript: d.openAll();" class="navlist">Visa alla</a> | 
4:
<a href="javascript: d.closeAll();" class="navlist">Dölj alla</a></p>
5:
 
6:
<script type="text/javascript">
7:
<!--
8:
d = new dTree('d');
9:
d.config.inOrder=true;
10:
 
11:
d.add(0,-1,'Rot');
12:
 
13:
<?php 
14:
 
15:
$id 0;
16:
 
17:
foreach ($tree as $key1 => $level1) {
18:
   $id++;
19:
   $parentid1 $id;
20:
   echo sprintf("d.add(%d,%d,'%s');\n"$id0$key1);
21:
   foreach($level1 as $key2 => $level2) {
22:
      $id++;
23:
      $parentid2 $id;
24:
      echo sprintf("d.add(%d,%d,'%s');\n"$id$parentid1$key2);
25:
      foreach ($level2 as $key3 => $level3) {
26:
         $id++;
27:
         $parentid3 $id;
28:
         echo sprintf("d.add(%d,%d,'%s');\n"$id$parentid2$key3);
29:
         foreach($level3 as $key4 => $level4) {
30:
            $id++;
31:
            $parentid4 $id;
32:
            echo sprintf("d.add(%d,%d,'%s');\n"$id$parentid3$key4);
33:
            foreach($level4 AS $key5 => $level5) {
34:
               $id++;
35:
               $parentid5 $id;
36:
               echo sprintf("d.add(%d,%d,'%s');\n"$id$parentid4$key5);
37:
               foreach($level5 AS $key6 => $row) {
38:
               $id++;
39:
                  if (isset($_COOKIE['preview_on'])) {
40:
                     echo sprintf("d.add(%d,%d,'%s <img src=\"../images/show.gif\" alt=\"\" onmouseover=\"return overlib(\'%s<br /><br />%s\', WIDTH, 758, RELX, 10, RELY, 10);\" onmouseout=\"return nd();\" />','admin.php?edit=%d');\n"$id$parentid5$row['name'], $row['description'], $row['complete'], $key6);
41:
                  } else {
42:
                     echo sprintf("d.add(%d,%d,'%s','admin.php?edit=$key6');\n"$id$parentid5$row['name']);
43:
                  }
44:
               }
45:
            }
46:
         }
47:
      }
48:
   }
49:
 
50:
}
51:
 
52:
?>
53:
 
54:
 
55:
document.write(d);
56:
// -->
57:
</script>
 

_________________
Funktion är vackert
Till toppen på sidan
Visa användarprofil Besök användarens hemsida
fejs



Medlem i: 5249 dagar

Status: Offline



#435033
Inlägg Skrivet: 2006-11-16 12:17      Ämne: Citera

hur gör jag bäst för att hämta ut en array från databasen?

min tabell:
id, name, parent
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
fehavision



Medlem i: 4743 dagar

Status: Offline



#518658
Inlägg Skrivet: 2007-09-16 12:09      Ämne: Citera

Hej Malte

Jag undrar hur kan man begrensa "tree-depth" (nivåer ...) ...

Example inte tillåta mer an tre nivåer ...

Och kan man visa i den här listbox (drop-down) menun
träd struktur ?

Example
- Huvudkategori
--| Underkategori
----|UndeUnderkategori
-Huvudkategory

etc

Tack Smile
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
Malte
in memoriam 1



Medlem i: 6302 dagar
Från: Tingsryd
Status: Offline



#522660
Inlägg Skrivet: 2007-10-05 12:28      Ämne: Citera

Enklast för dig är att lägga till "level" som kolumn, och spara på vilken nivå man är. Aktuell nivå får man då från föräldranivån + 1.
"level" styr sedan vilka du ska visa i din <select> för att välja förälder. Det kan också ligga till grund för "indrag" i din <select>.
 

_________________
Funktion är vackert
Till toppen på sidan
Visa användarprofil Besök användarens hemsida
fehavision



Medlem i: 4743 dagar

Status: Offline



#523394
Inlägg Skrivet: 2007-10-09 09:31      Ämne: Citera

Hej Malte
tack så mycket Smile
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande Besök användarens hemsida
webmaster



Medlem i: 5769 dagar
Från: Stockholm
Status: Offline



#653156
Inlägg Skrivet: 2009-09-06 16:09      Ämne: Citera

Tänkte kolla om det är nån som har kommit på en lösning att ha javascript dtree.

hadde en grej, men funkade inte så bra :
man kunde bara öppna på + tecknen...
Fast ioförsig så gör det ju inte så mycke...

men undrar hur man kan göra för att hämta produkterna som är baserade på :
produkter.parent

Så ser i alla fall mitt ut :
KOD:
1:
<script type="text/javascript">
2:
function menu(id, div)
3:
{
4:
   if ((obj = document.getElementById('m[' + id + ']')))
5:
   {
6:
      obj.style.display = obj.style.display == 'none' ? 'block' : 'none';
7:
      div.innerHTML = obj.style.display == 'none' ? '<img border="0" src="images/plus.gif">' : '<img border="0" src="images/minus.gif">';
8:
   }
9:
}
10:
</script>

KOD:
1:
<?php
2:
 
3:
$sql   = mysql_query("SELECT parent, id, namn FROM items ORDER BY id ASC");
4:
 
5:
while ($r = mysql_fetch_row($sql))
6:
{
7:
   $array[$r[0]][$r[1]] = stripslashes($r[2]);
8:
}
9:
 
10:
function print_menu($array, $parent)
11:
{
12:
   if (!isset($array[$parent]))
13:
   {
14:
      return;
15:
   }
16:
   
17:
   if ($parent)
18:
   {
19:
      echo '<div id="m[', $parent, ']" style="display:none;margin:0px 15px;">';
20:
   }
21:
   else
22:
   {
23:
      echo "<div>";
24:
   }   
25:
   
26:
   foreach ($array[$parent] as $id => $name)
27:
   {
28:
      echo '<div style="height:10px;">';
29:
      echo '<div style="float:left;width:10px;text-align:center;cursor:pointer;" onclick="menu(', $id, ', this);"> <img border="0" src="images/plus.gif"></div>';
30:
      echo '<div style="float:left;margin:0px 0px 0px 0px;"><a href="produkter.php">', $name, '</a></div>';
31:
      echo '</div>';
32:
     
33:
      print_menu($array, $id);
34:
   }
35:
   
36:
   echo "</div>";
37:
}
38:
 
39:
print_menu($array, 0);
40:
 
41:
?>


Sen är grejen också.
om man vill skapa en meny:

meny 1
- meny 1-1
- - meny 1-2
meny 2
- meny 2
meny 3

sen om man lägger till en produkt på meny 1-2
eller om man vill lägga till en produkt på meny 3

Visa produkt menyer har kanske inte några under menyer.
dom har kanske bara under menyn.

HUR KAN MAN GÖRA.............För jag har absolut ingen aning.
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
advokaten



Medlem i: 5554 dagar
Från: Växjö
Status: Offline



#723928
Inlägg Skrivet: 2012-06-03 11:12      Ämne: Citera

Återupplivar denna fantastiska tråd av Malte. Jag har bekymmer med att radera huvudkategorier.

Anta att man lägger in följande i databasen:

- Literature
-- Integration of sources
-- Test 1

Resultatet i databasen kommer se ut såhär:



När jag sedan ska radera huvudkategorin "Literature" så är tanken att resterande ska också försvinna. Men resultatet blir istället:



Koden som jag använder för att radera ser ut såhär:

PHP:
1:
 
2:
//Check if delete button is set
3:
if (isset($_POST['submit-deletecategory'])) 
4:
{
5:
   //Get $_POST variables for category id
6:
   $CategoryParent intval($_POST['CategoryList']);
7:
   
8:
   //Check if category is selected
9:
   if ($CategoryParent != "#"
10:
   {
11:
      //Get parent category and subsequent child categories
12:
      $query "SELECT CID, Item AS Name, Parent FROM " TB_CATEGORY " ORDER BY Name";
13:
      $items = new ItemTree($query);
14:
 
15:
      if ($items->get_item_name($_POST['CategoryList']) !== false
16:
      {
17:
         //Build up erase list
18:
           $CategoryErase $items->get_id_in_node($CategoryParent);
19:
           $CategoryEraseList implode(", "$CategoryErase);
20:
      
21:
      else 
22:
      {
23:
           $CategoryEraseList 0;
24:
      }
25:
      
26:
      //Remove categories from database
27:
         $query "DELETE FROM " TB_CATEGORY " WHERE CID IN ($CategoryEraseList)";
28:
         $result mysql_query($query) or die ('Database Error (' mysql_errno() . ') ' mysql_error());
29:
      
30:
      //Return a confirmation notice
31:
      header("Location: settings.php");
32:
      exit;
33:
   }
34:
}
35:
 


Funktionerna som används här är: ItemTree(), get_item_name(), get_id_in_node(). Finns det något fel i den ursprungliga versionen som gör att nivå 3 inte raderas?
 
Till toppen på sidan
Visa användarprofil Skicka privat meddelande
Visa tidigare inlägg:   
Skapa nytt inlägg   Svara på inlägget Gå till sida Föregående  1, 2, 3, 4, 5
PHPportalen Forum Index » Tips och Trix
Hoppa till:  
Du kan inte skapa nya inlägg i det här forumet
Du kan inte svara på inlägg i det här forumet
Du kan inte ändra dina inlägg i det här forumet
Du kan inte ta bort dina inlägg i det här forumet
Du kan inte rösta i det här forumet
Du kan inte bifoga filer i detta forum
Du kan inte ladda ner filer från detta forum
Kontakta oss på adressen: info@phpportalen.net
Webbplatsen bygger i grunden på phpBB © 2001, 2002 phpBB Group

Modifieringar har senare gjorts i systemet av PHPportalen
Sid och logotypdesign skapad av Daren Jularic