Volání proměnných uvnitř fce v Presenteru
- Mas3r
- Člen | 116
Mám menší problém, nevím v čem je chyba :) Asi to Nette nebude, ale tak..
Mám rekurzivní fci v Presenteru a uvnitř volám např:
$presenter->link
$promenna
Zkoušel jsem nastavit: global $promenna; uvnitř té fce, bohužel mi to nějak nebere :(
Ani ten link mi to nechce vyhodit… nevíte co s tím?
- Mas3r
- Člen | 116
<?php
$GLOBALS['adminTpl'] = $adminTpl;
function RecurseTable( $array = array(), $parent = 0, $depth ) {
global $component, $changer;
if( !array_key_exists($parent, $array) ) return '';
foreach($array[$parent] as $key => $r) {
if($r->active == 1) $icoActive = 'active'; else $icoActive = 'inactive';
?>
<tr class="<? //= $changer->Change()?>">
<td>
<?php if($depth==0) { ?><img src="<?=$GLOBALS['adminTpl']?>/images/icons/menu.gif" width="20" height="26" alt="Menu" title="Menu" align="absbottom" /><? } else { ?><img src="<?=$GLOBALS['adminTpl']?>/images/icons/<?= $icoActive ?>.gif" width="20" height="19" alt="activity" title="activity" align="absbottom" /><? } ?>
<input type="text" size="3" name="order" value="<?= $r->order ?>" />
<span style="margin-left:<?= $depth*30 ?>px"><?= $r->title ?></span></td>
<td align="center">
<a href="<?= $presenter->link('edit', $row->id) ?>"><img src="<?= $adminTpl;?>/images/icons/edit.gif" /></a>
<a href="<?= $presenter->link('delete!', $row->id) ?>"><img src="<?= $adminTpl;?>/images/icons/delete.gif" /></a>
</td>
</tr>
<?
if($key == $r->id && is_array( $array[$parent] )) RecurseTable( $array, $r->id, $depth+1 );
}
}
<h3>Strom stránek</h3>
<hr />
<br />
<table class="table">
<tr>
<th>Název</th>
<th>Nastavení</th>
</tr>
<?= RecurseTable( $recurse_menu, 0, 0); ?>
</table>
?>
- musím udělat před fcí $GLOBALS[‚adminTpl‘] = $adminTpl; abych dostal tu proměnnou dovnitř
- nefunguje $presenter->link
Editoval Mas3r (30. 6. 2008 20:51)
- David Grudl
- Nette Core | 8218
$presenter->link nemůže fungovat, když uvnitř funkce žádná proměnná $presenter neexistuje. Celé bych to postavil jako metodu třídy a zrušil používání $GLOBALS.
- vlki
- Člen | 218
No, zkousel jsem si to sam. Udelal funkci a registroval $component jako global. Ale ve funkci se s ni pracovat nedalo. Pres referenci nebyl problem, ale tohle me zarazilo. Skoro se zdalo, ze objekt nejde „zglobalizovat“. Je to mozne?
Jinak jsem chtel napsat, ze bych to resil prepsanim na malou komponentu. To je ale nema daleko od toho, co navrhuje David.
- Mas3r
- Člen | 116
Takže jsem to hodil do komponenty:
<?php
/**
*/
// =============================================================================
class Recursive {
// =============================================================================
/**
* Vytvor RecursiveTable
*/
public function RecursiveTable( $array = array(), $parent = 0, $depth ) {
$adminTpl = 'templates/'.Environment::getVariable('adminTemplate');
$changer = new ChangerTR();
echo parent::getPresenter();
if( !array_key_exists($parent, $array) ) return '';
foreach($array[$parent] as $key => $r) {
if($r->active == 1) $icoActive = 'active'; else $icoActive = 'inactive';
?>
<tr class="<?= $changer->Change()?> <?php if($depth==0) echo 'menu';?>">
<td>
<?php if($depth==0) { ?>
<img src="<?= $adminTpl?>/images/icons/menu.gif" width="20" height="26" alt="Menu" title="Menu" align="absbottom" />
<? } else { ?>
<img src="<?= $adminTpl?>/images/icons/<?= $icoActive ?>.gif" width="20" height="19" alt="activity" title="activity" align="absbottom" />
<? } ?>
<input type="text" size="3" name="order" value="<?= $r->order ?>" />
<span style="margin-left:<?= $depth*30 ?>px"><?= $r->title ?></span></td>
<td align="center">
</td>
</tr>
<?
if($key == $r->id && is_array( $array[$parent] )) $this->RecursiveTable( $array, $r->id, $depth+1 );
}
}
}
?>
A pak jsem zkoušel:
<?php
parent::getPresenter();
$this->getPresenter();
?>
Ale ani jedno nešlo. Jak získám tedy presenter?