Hej,
W sieci znalazłem klasę, która generuje drzewko z kategorii - w pakiecie z tą klasą była klasa, która wyświetla listę w postaci elementów UL, LI. Przerobiłem nieco pod swoje potrzeby i zrobiłem z tego listę select. Mój problem polega na tym, że chciałbym
przechwycić te wyniki w postaci "return" - natomiast to działa tylko jeśli w dekonstruktorze jest "echo" - więc wywołanie samego budowania drzewka wygląda następująco:
foreach ($it as $k => $v) {}
Właściwie nie trzeba nic więcej robić - samo się wyrenderuje - dodam, że:
-
$k - zwróci ID kategorii
-
$v - zwróci obiekt NODE (z innej klasy)
Sama klasa, która renderuje widok wygląda tak:
class JTree_JTreeRecursiveSelectIterator extends RecursiveIteratorIterator
{
/**
* @var _jTree the JTree object
*/
private $_jTree;
/**
* @var _str
*/
private $_str;
/**
* @var array
*/
private $params;
/**
* JTreeRecursiveIterator::__construct()
*
* @param mixed $jt - the tree object
* @param mixed $iterator - the tree iterator
* @param mixed $mode
* @param integer $flags
* @return
*/
public function __construct
(JTree_JTree
$jt, $iterator, array $params = array(), $mode = RecursiveIteratorIterator
::LEAVES_ONLY, $flags = 0
) {
parent::__construct($iterator, $mode, $flags);
$this->_jTree = $jt;
$this->params = $params;
}
/**
* JTreeRecursiveIterator::endChildren()
* Called when end recursing one level.(See manual)
* @return void
*/
public function endChildren() {
parent::endChildren();
}
/**
* JTreeRecursiveIterator::callHasChildren()
* Called for each element to test whether it has children. (See Manual)
*
* @return mixed
*/
public function callHasChildren() {
$ret = parent::callHasChildren();
$value = $this->current()->getValue();
if (!in_array($value, Arr
::get($this->params, 'ignore_categories'))) {
$selected = ($this->current()->getUid() == Arr::get($this->params, 'selected_id')) ? ' selected="selected"' : NULL;
$this->_str[] = '<option value="'. $this->current()->getUid() .'"'. $selected .'>'. $value .'</option>' . PHP_EOL;
}
return $ret;
}
/**
* JTreeRecursiveIterator::__destruct()
* On destruction end the list and display.
* @return void
*/
public function __destruct() {
}
}
Próbowałem już dekonstruktor zmodyfikować tak aby zamiast "echo" był "return" - jednak to nie pomaga - nic nie zwraca (zmienne $k, $v z pętli wyżej - dalej zwracają "swoje")
Ma ktoś pomysł, aby to obsłużyć?