Autor Zpráva
Flavier
Profil *
Zdravím. Som opäť s logikou v koncoch. Posúďte sami.

Z indexu volám do výpisu $page->RenderSortiment();

Rendder sortiment vyzera nasledovne:
kód:
   function RenderSortiment()
   {
      global $app;
      
      $sqlQuery = "SELECT  S.*, count(S.ID) FROM clSortiment S
         INNER JOIN Product P ON P.clSortiment=S.ID
         WHERE S.DateValidTo IS NULL AND P.DateValidTo IS NULL AND S.nadkat = 0
         GROUP BY S.ID ORDER  BY Value";
      $result = $app->Db->Select($sqlQuery);
      while ($row = mysql_fetch_object($result))
      {
      

         echo "      <li><a href='?p=sortiment&id=$row->ID' title='$row->Value'> " .
            $row->Value . " &raquo;" .
            "</a></li>\n";
      
         if ($row->ID == $this->id)   // generovanie submenu
         {
            $this->RenderSortimentSub($row->ID);
         }
      }
   }


Tu je to myslim zrozumitelne. RenderSortimentSub som prerobil v ramci logiky- Selectnem kategoriu podla jej ID, pozriem sa na jej nadkategoriu, zapisem ju do pola. To iste spravim s dalsou nadkategoriou az po nultu uroven. Takto naplnene pole dam potom na foreach vypis, kde volam RenderSortimentSub pokial v poli nieco je( moj prepracovany mozog si mysli, ze by tym padom malo vypisat vsetky podkategorie zainteresovanych kategorii:)
kód:
      function RenderSortimentSub($sortimentId)
   {
         global $app;
   
         $sqlQuery = "SELECT * FROM `clSortiment` WHERE ID = $sortimentId";
      $result = $app->Db->Select($sqlQuery);
      $row = mysql_fetch_object($result);
                global $poleNadkat;
     $poleNadkat[] = $row->nadkat;//Pridam ID povodne volanej polozky menu
      $this->SelectNadkat($row->nadkat);
             


   

      
      echo "<ol>&raquo;";
         $sqlQuery = "SELECT * FROM `clSortiment` WHERE nadkat = $sortimentId";
      $result = $app->Db->Select($sqlQuery);
      while ($row = mysql_fetch_object($result))
      {
      echo "   <li><a href='?p=sortiment&id=$row->ID' title='$row->Value'> " .
            $row->Value . " " .
            "</a></li>\n";

      }
      echo "&raquo;</ol>\n";
   
//   foreach ($poleNadkat as &$value) { // Zabespecenie rekurzie funkcie
//    $this->RenderSortimentSub($value);
//}

   }


   function SelectNadkat($nadkategoria)  //Plnim zasobnik volani funkcie tvorby menu
      {
      
         global $app;
            $sqlQuery = "SELECT * FROM `clSortiment` WHERE ID = $nadkategoria";
      $result = $app->Db->Select($sqlQuery);
      $row = mysql_fetch_object($result);
          global $poleNadkat;
            $poleNadkat[] = $row->nadkat;//Pridam cislo nadkategorie do pola
         if ($row->nadkat != 0)   // overenie konca rekurzie funkcie
         {
         
      $this->SelectNadkat($row->nadkat);

         }
      
      }


Dufam ze som tu dal vsetko relevantne. Dajte mi prosim vediet ci na to idem velmi zle alebo len trochu. :) Vdaka
Nox
Profil
Neprocházel jsem to podrobně, ale co mě trklo - dej pokud možno pryč ty globály... pro $app použij třeba dependency injection a pro $poleNadkat...to snad můžeš dát jako parametr
WertriK
Profil
Flavier:
co to má dělat?
Flavier
Profil *
Vypis kategorii. Po kliknuti na konkretnu kategoriu (lubovolnej urovne) rozbali sa jej podmenu. Ma to byt zabespecene tak jak som uz rozpisal- podla ID kategorie, nacitam do pola $poleNadkat; vsetky nadkategorie danej kategorie a nakoniec volam funkciu pre vypis jednotlivych podkategorii vypisom pola
foreach ($poleNadkat as &$value)
{
$this->RenderSortimentSub($value);
}

Zatial je to odkomentovane, lebo mi to nefunguje a patram preco.
WertriK
Profil
Flavier:
Lepší by bylo, kdybys předával ID kategorií celé cesty. Tzn. předal bys id kategorie na první úrovni, na druhé atd.
Adresa by mohla vypadat
neco.cz/ID-prvni/ID-druha/
nebo
neco.cz/?patch[]=ID1&patch[]=2


Tím by jsi měl celou cestu a stačilo by to jednoduše rekurzivní funkcí (jednou) vypsat.
Eventuelně by jsi mohl cestu zjistit sám.
Flavier
Profil *
Pomocou tohoto clanku a doplnenim selektu o spominane pole- WHERE nadkat IN ('" . implode("', '", $poleNadkat) . "') som docielil omnoho elegantnejsie riesenie nez ake som tu nacrtol.

Clanok. Odkaz

Všetkým zúčastneným vďaka.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: