Autor | Zpráva | ||
---|---|---|---|
jakubroz Profil |
#1 · Zasláno: 9. 11. 2008, 21:15:37
Zdravim,
dělam takový eshop a právě řešim výpis menu. Našel jsem něco na intervalu a upravil si to. takto: <?php class Menu { var $id = 0; var $name =''; var $level = 0; var $childNodes = array(); function __construct($id,$name,$level,$mysqli) { $this->mysqli = $mysqli; $this->id=$id; $this->name=$name; $this->level=$level; $result = $this->mysqli->query("SELECT * FROM products_category WHERE parent_id=$id"); while ($r = $result->fetch_assoc()) { $this->childNodes[] = new Menu($r['id'], $r['category'], $level++, $mysqli); } $row_t = $this->childNodes[]; return $row_t; } } ?> pak to vkladam do šablony kde $row_t procházim jako pole. momentálně nevim proč mi to nejde, píše mi to chybu:Fatal error: Cannot use [] for reading. Předem děkuju za rady. |
||
Mastodont Profil |
#2 · Zasláno: 9. 11. 2008, 21:31:25
Tohle je blbě:
$row_t = $this->childNodes[] Při čtení prvku pole musíš určit jeho index. |
||
jakubroz Profil |
#3 · Zasláno: 9. 11. 2008, 21:36:04
? muzes Napsat jak si to myslel?
|
||
Alphard Profil |
#4 · Zasláno: 9. 11. 2008, 21:43:13
„? muzes Napsat jak si to myslel?“
máte zkušenosti s poli? každý prvek musí být určen indexem, např $pole = array (1 => "Ahoj", 2 => "Nazdar"); Nazdar má index 2 zápis $this->childNodes[] = new Menu ... PHP si automaticky doplní index (o 1 vyšší než současný nejvyšší), ale $row_t = $this->childNodes[]; selže, PHP neví, který prvek pole má číst |
||
Alphard Profil |
#5 · Zasláno: 9. 11. 2008, 21:45:18
teď se dívám na původní kód, vy asi chcete tohle
$row_t = $this->childNodes; můžete napsat rovnou return $this->childNodes; |
||
jakubroz Profil |
#6 · Zasláno: 10. 11. 2008, 09:56:29
jo, pravda. diky
ale ted nevim, jak vložit vrácený výsledek do template systemu, protože je to v konstruktoru a instance objektu se dělá rovnou v tom whilu. vždycky to dělam nějak takto $menu = new Menu(); $row = $menu->load() //pak do tempatu to vkladam takto: TPL::assignAsLoop('menu',$row); tady u toho nevim jak to tam vložim, mužete prosím poradit? |
||
BetaCam Profil |
#7 · Zasláno: 10. 11. 2008, 13:43:27 · Upravil/a: BetaCam
jakubroz
TPL::assignAsLoop('menu', new Menu()) nebo tam stejně tak můžeš dát : $menu = new Menu(); TPL::assignAsLoop('menu', $menu); |
||
jakubroz Profil |
#8 · Zasláno: 11. 11. 2008, 10:18:09
tak sem to nakonec udělal jinak. pomocí zásobníku a už to chodí.
function getTree($nodeId) { global $mysqli; $stack = array(); $level = 0; $query = "SELECT id, category FROM products_category"; if ($nodeId != "") { $query.= " WHERE id = $nodeId"; } else { $query.= " WHERE id = 0"; } $result = $mysqli->query($query); if ($mysqli->errno) { throw new Exception($mysqli->error."\nQuery:$query"); } $row = $result->fetch_assoc(); $row['LEVEL'] = 0; array_push($stack, $row); while (count($stack) > 0) { $r = array_pop($stack); $row_c[] = $r; $query = "SELECT id, category FROM products_category WHERE parent_id=".$r['id'].""; $result = $mysqli->query($query); if ($mysqli->errno) { throw new Exception($mysqli->error."\nQuery:$query"); } if ($mysqli->num_rows > 0) { $level = $r['LEVEL'] + 1; } while ($row = $result->fetch_assoc()) { $row['LEVEL'] = $level; array_push($stack, $row); } } return $row_c; } akorad to vypisuje pouze to co je v tý větvy. a potřeboval bych aby byl pořád zobrazen strom hlavních kategorii(to jsou ty co mají parent_id 0). a když na nakou kliknu aby se zobrazily i ty pod větve. prosim o rady. diky |
||
Pitr Profil * |
#9 · Zasláno: 11. 11. 2008, 10:58:59
a z hlediska poctu sql dotazu jsi na to dival? :)) nebude lepsi jednim sql dotazem hodit vse do pole a pak si si pohrat s urovnemi?
|
||
jakubroz Profil |
#10 · Zasláno: 11. 11. 2008, 11:27:36
ja vim no, ale zvolil jsem toto. ted mi jde o to, co sem psal v minulem postu.
tj. akorad to vypisuje pouze to co je v tý větvy. a potřeboval bych aby byl pořád zobrazen strom hlavních kategorii(to jsou ty co mají parent_id 0). a když na nakou kliknu aby se zobrazily i ty pod větve. |
||
jakubroz Profil |
#11 · Zasláno: 12. 11. 2008, 13:20:13
tak tohle už jsem vyřešil, ale nějak blbě se mi počítá $level a ve výsledném poli je u každé položky level 0.
nevíte čim to je? předem dik za rady |
||
Časová prodleva: 16 let
|
0