Nette 2.1 vlastní control
- motorcb
- Člen | 552
Zdravím.
Snažím se vytvořit vlastní control do formuláře – GPS souřadnice (latitude a longitude) s budoucím rozšířením na mapy.cz → vybrání bodu na mapě.
zatím by mi stačil pouze textbox pro latitude a longitude který by odeslal
data.
Bohužel získávání vyplněných dat mi nefunguje.
Registraci controlu jsem zkopíroval z funkčních doplňků.
Volání controlu:
$form->addGMapPoint('souradnice', 'Souradnice:');
funguje. Vygeneruje formulář:
<tr>
<th><label for="frm-competitionEditForm-souradnice">Souradnice:</label></th>
<td><div><input type="text" name="latitude" id="latitude" value="0"><input type="text" name="longitude" id="longitude" value="0"></div></td>
</tr>
Ale nevím jak při odesílání získávat data z políčka latitude a longitude :-(
Kód mého controlu:
namespace test\NetteForms;
use Nette\Forms\Controls\BaseControl;
use Nette\Utils\Html;
class GMapPoint extends BaseControl
{
public function __construct( $label = NULL )
{
parent::__construct( $label );
$this->control->type = 'text';
}
public function getValue()
{
dump( $this->getHttpData() );
return array( "latitude" => $this->value, "longitude" => $this->value );
}
public function getControl()
{
$container = Html::el( 'div' );
$container->add( (string) $this->getTextboxControl( "latitude" ) );
$container->add( (string) $this->getTextboxControl( "longitude" ) );
return $container;
}
public function getTextboxControl( $name )
{
$control = clone parent::getControl();
$control->id = $name;
$control->name = $name;
$control->value = 0;
return $control;
}
}
Používám Nette 2.1.
dump( $this->getHttpData() ); vrací NULL
Díky za rady
- David Matějka
- Moderator | 6445
koukni na stavajici controly – to nacitani se tam resi v prepsane metode loadHttpData
- David Matějka
- Moderator | 6445
bude asi problem s vytvarenim toho controlu – hlavne nazvu.. zkus dat do getTextboxControl:
....
$control->name .= "[$name]";
...
- motorcb
- Člen | 552
@matej21:
Díky za info, ale stále nefunguje:
class GMapPoint extends BaseControl
{
public function __construct( $label = NULL )
{
parent::__construct( $label );
$this->control->type = 'text';
}
public function loadHttpData()
{
parent::loadHttpData();
echo "test2";
dump( $this->getHttpData() );
dump( $this->value );
$this->value = $this->value ? array( (int) array_shift( $this->value ), (int) array_shift( $this->value ) ) : FALSE;
}
public function getControl()
{
$container = Html::el( 'div' );
$container->add( (string) $this->getTextboxControl( "latitude" ) );
$container->add( (string) $this->getTextboxControl( "longitude" ) );
return $container;
}
public function getTextboxControl( $name )
{
$control = clone parent::getControl();
$control->id = $name;
$control->name .= "[$name]";
$control->value = 0;
return $control;
}
}
Oba dump stále vrací NULL
- David Matějka
- Moderator | 6445
koukni do kodu, jestli se generuje spravny name; koukni, jestli se odesilaji spravny data atd :) na to prijdes..
- motorcb
- Člen | 552
@matej21:
Kód vypadá takto:
<tr>
<th><label for="frm-competitionEditForm-souradnice">Souradnice:</label></th>
<td>
<div>
<input type="text" name="souradnice[latitude]" id="latitude" value="0">
<input type="text" name="souradnice[longitude]" id="longitude" value="0">
</div>
</td>
</tr>
koukni do kodu, jestli se generuje spravny name; koukni, jestli se odesilaji spravny data atd :) na to prijdes..
Rád bych se podíval zda se odesílají správná data, ale jak?
Nenapadá mne nic co bych mohl vyzkoušet, sám na to nepřijdu. Nemůže to
být BUG v Nette 2.1?
- David Matějka
- Moderator | 6445
tak uz to mam :)
$this->getHttpData(Nette\Forms\Form::DATA_TEXT, '[]');
- motorcb
- Člen | 552
Tak mám ještě jeden zádrhel :-(
Jak nastavím hodnotu texboxu latitude a longitude v controlu souradnice přes setDefaults?
$aDefaultValues = array(
'souradnice' => array(
'latitude' => 10,
'longitude' => 20,
),
);
$form->setDefaults( $aDefaultValues );
class GMapPoint extends BaseControl
{
public function __construct( $label = NULL )
{
parent::__construct( $label );
$this->control->type = 'text';
}
public function loadHttpData()
{
$data = $this->getHttpData( Form::DATA_TEXT, '[]' );
$this->value = array("latitude" => $data[0], "longitude" => $data[1] );
}
public function setValue($value)
{
echo "volam setValue";
dump( $value );
$this->value = array("latitude" => $value['latitude'], "longitude" => $value['longitude'] );
}
public function getControl()
{
$container = Html::el( 'div' );
$container->add( (string) $this->getTextboxControl( "latitude" ) );
$container->add( (string) $this->getTextboxControl( "longitude" ) );
return $container;
}
public function getTextboxControl( $name )
{
$control = clone parent::getControl();
$control->id = $name;
$control->name .= "[$name]";
return $control;
}
}
metoda setValue se volá (ovšem volá se 2×, nejprve s parametrem NULL a následně s mými parametry: array (2) latitude ⇒ 10 longitude ⇒ 20)
Jenže jak nastavím z metody setValue hodnoty texboxů latitude a longitude?
nevěděl by někdo?
Díky
- David Matějka
- Moderator | 6445
uloz si to do $this->value a pak si to odsud vytahni pri volani getTextboxControl