Problém se zprovozněním DatePicker

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

Ahoj, pokouším se zprovoznit prvek DatePicker ale narazil jsem v návodu u bodu 7.
Nevím, kam mám vložit uvedený kód pro registraci si metody addDatePicker do FormContaineru.

Omlouvám se za možná blbý dotaz, ale jsem začátečník a moc se zatím neorientuju.

Lopata
Člen | 139
+
0
-

Kamkoliv. Jediný požadavek je, aby se ten kód vykonal dříve, než na formuláři zavoláš metodu addDatePicker. Může to tedy být __construct Tvého poděděného Formu, můžeš si na to vyhradit speciální soubor či vytvořit zvláštní objekt. Bude to ale fungovat i když to dáš do bootstrapu nebo na konec souboru DatePicker.php (nevím, jak přesně se jmenuje).

edmund
Člen | 28
+
0
-

Díky, provedl jsem to a hned narazil na mnoho dalších problémů.
Laděnka mi hlásí, že nenašla spoustu tříd, na které se DatePicker odkazuje, třeba
Nette\Tools na řádku $value = Nette\Tools::createDateTime($value); // clone DateTime when given
nebo hned na řádku
class DatePicker extends Forms\FormControl
to hlásí, že nenašlo třídu FormControl.

Když jsem koukal, do adresáře s nette, tak tam skutečně tahle třída není, ale je tam místo ní ve složce
Form\Controls\ třída BaseControl.

Je možné, že prostě verze DatePickeru neodpovídá aktuální verzi Nette?
Mám stažen DatePicker odsud:http://nette.merxes.cz/date-picker/)
a aktuální Nette odsud:https://nette.org/cs/packages

Pokud ano, jaký jiný prvek pro práci s datem byste doporučili? Který nejlépe pracuje s aktuální verzí nette?

edmund
Člen | 28
+
0
-

ještě jsem si s tím trochu hrál,
nenalezené třídy opravil podle tohohle:
https://forum.nette.org/…n-ve-verzi-2
a opravil jsem řádek 142 z DatePicker.php
z $value = Nette\DateTime::createDateTime($value); // clone DateTime when given
na $value = new DateTime($value);

A zatím se to tváří, jako že to chodí.

xciza
Člen | 194
+
0
-

Nechci kvůli stejnému problému zakládat nové téma tak píši sem. Chtěl bych rozchodit DatePicker podle
tohoto návodu, ale zaseknu se na bodu 7. Když požadovaný kód vložím do presenteru, kde chci DatePicker použít tak mě to hodí chybu:

Class 'Nette\Forms\FormContainer' not found

Je mě jasný, že tam ta třída není, když jsem jí nenašel, ale co by měla tedy obsahovat, abych ji mohl vytvořit?? prošel jsem temata kde se něco podobného řešilo, ale s tim že tam není tato třída problém nikdo neměl…

ViPEr*CZ*
Člen | 814
+
0
-

A co podle dokumentace? Zaměnit FormContainer za Container?

mfajfr
Člen | 26
+
0
-

Ahoj,
mám jeden problém se zpracováním formuláře obsahující DatePicker.

Nejsem si jistý, jak tahat data právě z toho DatePickeru.

Momentálně mám:

<?php
	$values->sendDate->date
?>

Ovšem to mi hlásí, že property date není.
Pokud to před tím však dumpnu, tak to projde a datum tam je.

Zde je celá metoda:

<?php
	public function updateBuyBillSubmit(BuyBillForm $form){
        	$values = $form->getValues();



        	$idBuyBill = (int)$this->getParameter('idBuyBill');
        	$buyBill = BuyBill::getById($idBuyBill, $this->_db);


        	$sendDate = $values->sendDate;
        	//dump($sendDate);
        	$date = new VersioDateTime($sendDate->date);
    	}
?>
Glottis
Člen | 129
+
0
-

a proc tam davas to ->date nakonec?

mfajfr
Člen | 26
+
0
-

Protože tohle mi ukazuje dump:

Nette\DateTime(3) {
date ⇒ „2013–06–25 00:00:00“ (19)
timezone_type ⇒ 3
timezone ⇒ „Europe/Prague“ (13)
}

Tak jsem si jako říkal, že by mi to mohlo vrátit: „2013–06–25 00:00:00“. Potřebuji čistě jenom tohle.

Glottis
Člen | 129
+
0
-

$values->sendDate ti da to co potrebujes

a kdyby jsi chtel jiny format tak pres tohle

http://www.php.net/…e.format.php

treba
$values->sendDate->format(„Y-m-d“);

Editoval Glottis (26. 6. 2013 11:18)

Petrik.a.dost
Člen | 72
+
0
-

Dobrý den,

snažím se implementovat datepicker a po vložení:

use Nette\Forms\FormContainer;
FormContainer::extensionMethod(‚addDatePicker‘, function (FormContainer $container, $name, $label = NULL) {
return $container[$name] = new JanTvrdik\Components\DatePicker($label);
});

Teda trošku jsem si to upravil a vložil přímo do containeru ve tvaru:

public function addDatePicker($name, $label = NULL){
$container = new Container;
return $container[$name] = new JanTvrdik\Components\DatePicker($label);
}

tak mi laděnka hlásí: Class ‚Nette\Forms\JanTvrdik\Components\DatePicker‘ not found

PHP 5.3.24 nette 2.1

Předem děkuji za odpověd Petr

duke
Člen | 650
+
0
-

Máš tam nesrovnalost s namespacem. Přidej zpětné lomítko: \JanTvrdik\Components\DatePicker.

Petrik.a.dost
Člen | 72
+
0
-

nene tak tím to není problím stále stejný i když napíší:

public function addDatePicker($name, $label = NULL){
$container = new Container;
return $container[$name] = new \JanTvrdik\Components\DatePicker($label);
 }

neměl bych to náhodou registrovat v configu tu třidu??

Jan Tvrdík
Nette guru | 2595
+
0
-

Petrik.a.dost wrote: nene tak tím to není problím stále stejný

Podívej se znovu a pořádněji.

Petrik.a.dost
Člen | 72
+
0
-

toto mi hlásí laděnka:

Class ‚JanTvrdik\Components\DatePicker‘ not found search►
Source file

File: C:\Users\Petrik\Documents\My Web Sites\WebSite1\seyf\vendor\nette\nette\Nette\Forms\Container.php:402

392:* @param string alternate text for the image
393:* @return Nette\Forms\Controls\ImageButton
394:*/
395:public function addImage($name, $src = NULL, $alt = NULL)
396:{
397:return $this[$name] = new Controls\ImageButton($src, $alt);
398:}
399:
400:public function addDatePicker($name, $label = NULL){
401:$container = new Container;
402:return $container[$name] = new \JanTvrdik\Components\DatePicker($label);
403:}

a jelikož to mám přímo v containeru tak jsem zkoušel i toto:

public function addDatePicker($name, $label = NULL){

return $this[$name] = new \JanTvrdik\Components\DatePicker($label);
}
jestli to nepomuže a pořád to hlásí:

Class ‚JanTvrdik\Components\DatePicker‘ not found search

Petrik.a.dost
Člen | 72
+
0
-

tak jo už to jede problém byl opravdu v namespace… omlouvám se, že jsem otravoval a díky za pomoc

Šaman
Člen | 2636
+
0
-

Trochu mimo téma, ale funguje vam DP+ s novým Nette 2.1? Po aktualizaci se mi formuláře s DP+ zřejmě zacyklí a neodešlou (nevyskočí ani žádná laděnka, jen bílá stránka a ladicí konzole firefoxu hlásí příliš mnoho rekurzí(?) ). Změna políček s DP+ na textové pole tuto chybu odstraní.
Dříve to fungovalo, v přilinkování DP+ a v tvorbě formulářů jsem nedělal změny. A Formulář se zobrazí, výběr data funguje, problém je až po odeslání.
Nesetkal jste se s tím někdo?

Jan Tvrdík
Nette guru | 2595
+
0
-

@Šaman: Ale pochopitelně, že jsem se s tím setkal. Používej DatePicker z Nextras, tam je to opravené.

Šaman
Člen | 2636
+
0
-

Jan Tvrdík napsal(a):

@Šaman: Ale pochopitelně, že jsem se s tím setkal. Používej DatePicker z Nextras, tam je to opravené.

A je někde ukázka použití pro lamy? Oproti tomu, co je v doplňkách, nebo na Merxes je tam výrazně víc souborů a asi jsem něco vynechal, protože teď už mi to ani nevybírá (jako kdyby tam picker vůbec nebyl).

czmacek@centrum.cz
Člen | 14
+
0
-

Ahoj, mohu pls. poprosit o radu? DataPicker mne funguje dobre. Nicmene jsem zjistlil, že pokud ho zobrazim v Chrome, tak se vubec neprojevi pridani addRule() resp. setRequired(). Tj. pokud se na to podivam v jakemkoli jinem prohlizeci mam vygenerovany kod:

<input id="frm-departure" class="date hasDatepicker" type="date" data-nette-rules="{op:':filled',msg:'Vyplňte prosím Váš odjezd'}" required="required" name="departure" readonly="readonly" size="11">

Pokud se na to podivam pres Chrome:

<input class="date hasDatepicker" id="frm-arrival" maxlength="524288" name="arrival" size="11" tabindex="0">

Nesetkal jste se s tim prosim nekdo?
Diky. Adam

czmacek@centrum.cz
Člen | 14
+
0
-

Tak uz jsem na to prisel, nevim tedy proc se tak Chrome chova, nicmene problem jde vyresit tak ze do javascriptu ktery svazuje input s kalendarem do $.each pridate prvek ktery chcete aby Vam Chrome hodil do vystupu. Plati pri jakemkoli atributu ktery k prvku pridavate ale nemate jej uvedeny v $.each. Tedy v mem pripade to vypada takto:

$.each("class,disabled,id,maxlength,name,size,style,tabindex,value,data-nette-rules,type".split(","), function(i, attr)  {
   tmp.attr(attr, el.attr(attr));
});

czmacek@centrum.cz napsal(a):

Ahoj, mohu pls. poprosit o radu? DataPicker mne funguje dobre. Nicmene jsem zjistlil, že pokud ho zobrazim v Chrome, tak se vubec neprojevi pridani addRule() resp. setRequired(). Tj. pokud se na to podivam v jakemkoli jinem prohlizeci mam vygenerovany kod:

<input id="frm-departure" class="date hasDatepicker" type="date" data-nette-rules="{op:':filled',msg:'Vyplňte prosím Váš odjezd'}" required="required" name="departure" readonly="readonly" size="11">

Pokud se na to podivam pres Chrome:

<input class="date hasDatepicker" id="frm-arrival" maxlength="524288" name="arrival" size="11" tabindex="0">

Nesetkal jste se s tim prosim nekdo?
Diky. Adam