Két egymásba ágyazott blokk (BEGIN)

Szerző
Üzenet
Ragadozo
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2008.05.08. Csütörtök 18:26
Hozzászólások: 629
Hozzászólás Elküldve: 2016.12.01. 06:30    Hozzászólás témája: Két egymásba ágyazott blokk (BEGIN)
Hozzászólás az előzmény idézésével
Jár még erre valaki, aki tudna nekem segíteni?
Nagyon jól jönne a segítség, mert egyszerűen nem tudok tovább lépni vele.
Lefagytam, pedig még nincs is olyan hideg. :)
Nem tudom, hogy miért, de két blokkot nem tudok egymásba ágyazni.

Két lekérdezésből kellene egy kiiratást készíteni

Kód:

$sql = 'SELECT * FROM ' . VALAMI_TABLE . ' WHERE eksz_kod = 0';
      $result = $db->sql_query($sql);
      while ($row = $db->sql_fetchrow($result))
      {
         $gyikos_list[] = (int) $row['eksz_id'];

         $rowset[$row['eksz_id']] = array(   
            'eksz_id'         => $row['eksz_id'],
            'eksz_osz1'         => $row['eksz_osz1'],
         );
      }
      $db->sql_freeresult($result);
   
   for ($i = 0, $end = sizeof($gyikos_list); $i < $end; ++$i)
   {      
      $row =& $rowset[$gyikos_list[$i]];
      
         $template->assign_block_vars('ekszrow', array(
            'EKSZ_ID'         => $row['eksz_id'],
            'EKSZ_OSZ1'         => $row['eksz_osz1'],
         ));
         unset($rowset[$gyikos_list[$i]]);
   }
   
$sql = 'SELECT * FROM ' . VALAMI_TABLE . ' WHERE eksz_kod > 0';
      $result = $db->sql_query($sql);
      while ($row = $db->sql_fetchrow($result))
      {
         $gyikos_list[] = (int) $row['eksz_id'];

         $rowset[$row['eksz_id']] = array(   
            'eksz_alkod'      => $row['eksz_alkod'],
            'eksz_oli1'         => $row['eksz_oli1'],            
         );
      }
      $db->sql_freeresult($result);
   
   for ($i = 0, $end = sizeof($gyikos_list); $i < $end; ++$i)
   {      
      $row =& $rowset[$gyikos_list[$i]];
      
         $template->assign_block_vars('ekszalrow', array(
            'EKSZ_ALKOD'      => $row['eksz_alkod'],
            'EKSZ_OLI1'         => $row['eksz_oli1'],
         ));
         unset($rowset[$gyikos_list[$i]]);
   }

Bár a két lekérdezés nagyon hasonlít egymásra, de lényeges tartalmi különbségek vannak benne.

Ezekből kellene nekem ezt kihozni:

Kód:

<div>
   <ul>
      <!-- BEGIN ekszrow -->
         <li><a href="valami"><span>{ekszrow.EKSZ_OSZ1}</span></a>
            <div>
               <ul>
                  <!-- BEGIN ekszalrow -->
                     <li><a href="valami"><span>{ekszrow.ekszalrow.EKSZ_OLI1}</span></a></li>
                  <!-- END ekszalrow -->
               </ul>
            </div>
         </li>
      <!-- END ekszrow -->
   </ul>      
</div>


A foreach lenne a kézenfekvő megoldás, de valamit módszeresen vagy elnézek, vagy kihagyom, van nem veszem észre a hibát. Vagy hibát dob, vagy a belső blokkban nem kapok semmilyen adatot.

HELP! ;)

Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése
pstvfan
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2006.07.30. Vasárnap 1:00
Hozzászólások: 1538
Hozzászólás Elküldve: 2016.12.03. 11:14    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Nem vagyok biztos benne, de talán $template->assign_block_vars('ekszrow.ekszalrow', array(... megoldást jelenthet. Valamiért ez rémlik, de nem igazán néztem utána, talán egy próbát megér.
_________________
<M>

Felhasználó profiljának megtekintése Privát üzenet küldése
Ragadozo
Gyakorlott phpBB-s
Gyakorlott phpBB-s
Avatar

Csatlakozott: 2008.05.08. Csütörtök 18:26
Hozzászólások: 629
Hozzászólás Elküldve: 2016.12.03. 17:01    Hozzászólás témája:
Hozzászólás az előzmény idézésével
Az még önmagában kevés szerintem, mert még előtte egy tömbbe kell hozni a két blokkot.

ELVILEG (??) valahogy így kellene kinéznie:

Kód:

   $almenu_data = array();
   $blokknev_data = array();
   
   $blokknev_sql = 'SELECT * FROM ' . AKARMI_TABLE . ' WHERE valami = annyi';
   $blokknev_result = $db->sql_query($blokknev_sql);
   while ($blokknev_row = $db->sql_fetchrow($blokknev_result))
   {
      $almenu_sql = 'SELECT * FROM ' . MASIK_TABLE . ' WHERE mezonev = valamennyi';
      $almenu_result = $db->sql_query($almenu_sql);         
      while ($almenu_row = $db->sql_fetchrow($almenu_result))
      {
            $almenu_data[] = array(
               'almenu_id'      => $almenu_row['almenu_id'],
               '.........'      => $almenu_row['.........'],
               ..........
            );
      }
      $db->sql_freeresult($almenu_result);
      
      $blokknev_data[] = array(
         'blokknev_id'   => $blokknev_row['blokknev_id'],
         '...........'   => $blokknev_row['...........'],
         ............
         'almenukod'      => $almenu_data,
      );
      
   }
   $db->sql_freeresult($blokknev_result);
   
   foreach ($blokknev_data as $blokknev)
   {
      $template->assign_block_vars('blokknev_row', array(
         'BLOKKNEV_ID'   => $bloknev['blokknev_id'],
         '...........'   => $bloknev['...........'],
         ........
      ));

      foreach ($blokknev['almenukod'] as $almenu)
      {
         $template->assign_block_vars('blokknev_row.almenu_row', array(
            'ALMENU_ID'      => $almenu['almenu_id'],
            '.........'      => $almenu['.........'],
            ........
         ));
      }
   }

Arra már rájöttem, hogy eleve nem volt jó az eredeti elképzelésem, mert egy ugyanazon adatbázis táblánál ez a módszer így nem járható.
De két különböző adatbázis tábla esetén sem akaródzik nekem működni. :roll:

Végül is megoldottam egyetlen adatbázis táblával, pár új oszloppal, meg egy kis matekkal.
A program sem lett sokkal nagyobb, a megjelenítő fájl is csak 7 sorral, de a lényeg, hogy úgy jelenik meg, ahogy azt szerettem volna.

Ettől függetlenül azért bosszant, hogy mit nem csinálok jól, vagy mit rontok el módszeresen, vagy mit hagyok mindig ki. :)

Felhasználó profiljának megtekintése Privát üzenet küldése Email küldése Felhasználó weblapjának megtekintése
Hozzászólások megtekintése:  

Nem készíthetsz új témákat ebben a fórumban.
Nem válaszolhatsz egy témára ebben a fórumban.
Nem módosíthatod a hozzászólásaidat a fórumban.
Nem törölheted a hozzászólásaidat a fórumban.
Nem szavazhatsz ebben fórumban.

Hirdetés
Hirdetés