Vytvoření vlastního controlu
- jh
- Člen | 22
Zdravím,
chci vytvořit vlastní control ( text input a vedle button). Tlačítkem se
otevře CKFinder pro vybrání fotky a po vybraní se url obrázku vloží do
text inputu. Momentálně jsem se nějak prokousal tou hierarchií tříd
komponent modelu a controlů a dal dohromady tohle a snad by to mělo
fungovat.
Dělal jste někdo něco podobného a případně jak jste to řešil? Napadá
mě totiž, jestli bych to neměl dělat nějak přes ty kontejnery, že by
ImageSelector byl kontejner pro button a text input a zároveň fungoval jako
control. Ten příklad dole má taky jeden zádrhel a to, že nejde volat tu
metodu exportRules ze třídy BaseControl, protože je privátní, což mě
právě přívádí k tomu, že tam je něco špatně, protože bych musel
měnit rozsah viditelnosti u metody z frameworku.
<?php
use Nette\Forms\Controls\BaseControl,
Nette\Utils\Html;
class ImageSelector extends BaseControl {
public function __construct($caption = NULL) {
parent::__construct($caption);
$this->control = Html::el('div')->add($this->control)->add(Html::el('input type=button value=Vybrat'));
}
public function getControl()
{
$this->setOption('rendered', TRUE);
$control = clone $this->control;
$name = $this->getHtmlName();
$text = $control[0];
$button = $control[1];
$text->name = $name;
$text->disabled = $this->disabled;
$text->id = $this->getHtmlId();
$text->required = $this->isRequired();
$text->value = $this->getValue();
$button->name = $name . '_button';
/*
$rules = BaseControl::exportRules($this->rules);
$rules = substr(json_encode($rules), 1, -1);
$rules = preg_replace('#"([a-z0-9]+)":#i', '$1:', $rules);
$rules = preg_replace('#(?<!\\\\)"([^\\\\\',]*)"#i', "'$1'", $rules);
*
*/
//$text->data('nette-rules', $rules ? $rules : NULL);
return $control;
}
}
?>