RadioList v tabulke

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jod
Člen | 701
+
0
-

Nevie niekto ako napchám radiolist do tabulky?
Potrebujem taký RL kde budú radiobuttony vedla seba na šírku divka rovnomerne. A viem len separátor vytiahnúť a container. Dík

phx
Člen | 651
+
0
-

Podedit a zmenit hodnotu $separator. Popripade po svem implementovat metodu RadioList::getControl()

Jod
Člen | 701
+
0
-

Ale ten separátor sa vkladá medzi radibuttony. S tým get control to už znie lepšie. Zatiaľ som to poriešil cez span ktorý má nastavený napevno margin či padding.

phx
Člen | 651
+
0
-

Myslel jsem, jako ze misto odradkovani das separator treba mezeru. Bohuzel ale co radiobuton to jina sirka, ale to by melo jit osetrit pres styly.

Vitek Jezek
hledá kolegy | 285
+
0
-

nevyresil by to tenhle feature request?

Jod
Člen | 701
+
0
-

Ano, ano ale ako som pozeral zatiaľ tam nič také neni. Ten separátor sa dá zmeniť cez getSeparatorPrototype().

Poriešil som to následujúcim spôsobom:

<?php

function RadioList_prototype_getMyControl(RadioList $_this)
{
	$_this->setOption('rendered', TRUE);
	$control = clone $_this->getControlPrototype();
	$control->name = $_this->getHtmlName();
	$control->disabled = $_this->disabled;
	$control->id = $_this->getHtmlId();
	return $control;
}

function RadioList_prototype_myControl(RadioList $_this)
{

		$container = clone $_this->getContainerPrototype();
		$separator = (string) $_this->getSeparatorPrototype();
		$control = $_this->getMyControl();
		$id = $control->id;
		$counter = 0;
		$value = $_this->value === NULL ? NULL : (string) $_this->getValue();
		$label = /*Nette\Web\*/Html::el('label');

		$container->add('<table><tr>');

		foreach ($_this->items as $key => $val) {
			$control->id = $label->for = $id . '-' . $counter;
			$control->checked = (string) $key === $value;
			$control->value = $key;

			if ($val instanceof /*Nette\Web\*/Html) {
				$label->setHtml($val);
			} else {
				$label->setText($_this->translate($val));
			}

			$container->add('<td>' . (string) $control . (string) $label . $separator . '</td>');
			$counter++;
			// TODO: separator after last item?
		}

		$container->add('</tr></table>');

		return $container;
}
?>

Pravdaže nefungovalo parent::getControl() takže som musel prepísať aj to. Problém bol aj že niektoré premenné boli private alebo protected, ale dali sa zavolať cez metódu get.., okrem disabled myslím, ale nepíše to chybu tak sa nerýpem.

Nič moc ale funguje to.