Welcome, Guest. Please login or register.
Did you miss your activation email?
Mar. 15, 2010, 06:52:30 PM
52798 Posts in 11735 Topics by 7960 Members
Latest Member: maraigreeninsti
News: Share your PRADO experience with other PRADOers by commenting on the QuickStart Tutorial.
 
The PRADO Community » General » Prado International » Indonesian » Menciptakan field baru berdasarkan jumlah nilai input « previous next »
Pages: [1] 2 Print
Author Topic: Menciptakan field baru berdasarkan jumlah nilai input  (Read 10382 times)
arsitek
Senior Member
***

Karma: 0
Offline Offline

Posts: 68


Hmmm...


View Profile
« on: Jun. 19, 2008, 06:47:06 AM »

Bagaimana caranya menampilkan field baru berdasarkan jumlah nilai input?

Misalnya:
Berapa nama yang ingin anda masukkan?

Kemudian user memberikan nilai 4.

Nah, bagaimana caranya menampilkan 4 field input baru secara otomatis lengkap dengan PRADO form validator?

Mungkin untuk penulisan PHP biasa dilakukan dengan menggunakan fungsi for() untuk mengulang field input sejumlah yang diminta. Namun bagaimana menyertakan prado validatornya?

Solusinya boleh pake ajax atau form wizard.

Terimakasih.
Logged
tyohan
Senior Member
***

Karma: 7
Offline Offline

Posts: 253


Coding is art


View Profile WWW
« Reply #1 on: Jun. 19, 2008, 07:57:07 AM »

Mungkin bs pake TRepeater contohnya kayak gini:

Code:
<com:TRepeater id="repeater">
<prop:ItemTemplate>
<com:TTextBox id='txtName'/><com:TRequiredFieldValidator Text="name required' ValidationGroup="1"/>
</prop:ItemTemplate>
</com:TRepeater>

Klo kepilih pengen 5 inputan pas di bind bs kayak gini

Code:
$data=array(1,2,3,4,5);
$this->repeater->datasource=$data;
$this->repeater->databind();

Klo input 3 tinggal ganti arraynya jadi

Code:
$data=array(1,2,3);
trus di bind lagi.

Cuma ga tau tuh validator bisa jalan ga ya klo dalam repeater. Coba aja. Saya blm nyobain contoh diatas, cuma kepikiran aja.
Logged

http://www.qvvo.com/link/f9871cfc/18855 - get paid for your links
http://thinkrooms.com - Indonesian IT knowledges & sharing
arsitek
Senior Member
***

Karma: 0
Offline Offline

Posts: 68


Hmmm...


View Profile
« Reply #2 on: Jun. 19, 2008, 10:58:44 AM »

Fieldnya berhasil direpeat. Tapi kecurigaan kang Yohan bahwan bahwa validatornya kemungkinan tidak bekerja dalam repeater benar.

Error yang muncul;
Quote
TConfigurationException
Description

TRequiredFieldValidator.ControlToValidate is empty or contains an invalid control ID path.
Source File

C:\AppServ\www\prado\framework\Web\UI\WebControls\TBaseValidator.php (469)

0458:
0459:     /**
0460:      * @return TControl control to be validated. Null if no control is found.
0461:      * @throws TConfigurationException if {@link getControlToValidate
0462:      * ControlToValidate} is empty or does not point to a valid control
0463:      */
0464:     protected function getValidationTarget()
0465:     {
0466:         if(($id=$this->getControlToValidate())!=='' && ($control=$this->findControl($id))!==null)
0467:             return $control;
0468:         else
0469: throw new TConfigurationException('basevalidator_controltovalidate_invalid',get_class($this));
0470:     }

Logged
tyohan
Senior Member
***

Karma: 7
Offline Offline

Posts: 253


Coding is art


View Profile WWW
« Reply #3 on: Jun. 19, 2008, 12:10:15 PM »

Berarti emang ga bisa ya bikin Validator dalam repeater, Klo ga bisa mungkin bisa generate control yang di insert ke TPanel. Misalnya di template kayak gini

Code:
Masukkan jumlah user yang ingin di input:<com:TTextBox Id="txtJmlUser"/><com:TButton id='btnJmlUser' OnCommand="loadInput" Text="Submit"/>
<com:TPanel Id="inputPanel">
<com:TTextBox id='txtUser'><com:TRequiredValidator id='validator' ControlToValidate='txtUser' ValidationGroup='1' Text='user Required'/>
</com:TPanel>
<com:TButton id='btnSubmitUser' text='submit user' OnCommand='submitUser' ValidationGroup='1'/>

trus untuk fungsi loadInput yang akan dipanggil saat TButton btnJmlUser diklik
Code:
function loadInput($sender,$param)
{
$jum=$this->txtJmlUser->text;
for($i=1;$i<=$jum;$i++;)
{
$newInput=new TTextBox;
$newInput->id='txtUser'.$i;
$this->InputPanel->Controls->add($newInput);

$newValidator=new TRequiredFieldValidator;
$newValidator->id='validator'.$i;
$newValidator->ControlToValidate=$newInput->id;
$newValidator->ValidationGroup='1';
$newValidator->text='user required';
$this->InputPanel->Controls->add($newValidator);
}
}

Jadi pada saat postback maka prado akan mengenerate sejumlah control sesuai jumlah inputan. Sekali lagi code diatas blm dicoba, silakan dicoba ya tar posting hasilnya.
Logged

http://www.qvvo.com/link/f9871cfc/18855 - get paid for your links
http://thinkrooms.com - Indonesian IT knowledges & sharing
arsitek
Senior Member
***

Karma: 0
Offline Offline

Posts: 68


Hmmm...


View Profile
« Reply #4 on: Jun. 20, 2008, 04:44:29 AM »

Error pada baris 0017.

Quote
TTemplateException
Description

Invalid template syntax: Unknown component type 'TRequiredValidator'. This may be caused by the following parsing error in the TRequiredValidator class file: [Warning] PradoBase::include_once(TRequiredValidator.php) [<a href='pradobase.include-once'>pradobase.include-once</a>]: failed to open stream: No such file or directory (@line 262 in file C:\AppServ\www\prado\framework\PradoBase.php).
Source File

C:\AppServ\www\web\protected\pages\Home.page (17)

0006:     <com:TButton id='btnJmlUser'
0007:         OnCommand="loadInput"
0008:         Text="Submit"/>
0009:         
0010:         <com:TPanel Id="inputPanel">
0011:         
0012:         <com:TTextBox id='txtUser'>
0013:             <com:TRequiredValidator
0014:                 id='validator'
0015:                 ControlToValidate='txtUser'
0016:                 ValidationGroup='1'
0017: Text='user Required'/>
0018:                 
0019:         </com:TPanel>
0020:         
0021:     <com:TButton
0022:         id='btnSubmitUser'
0023:         text='submit user'
0024:         OnCommand='submitUser'
0025:         ValidationGroup='1'/>
0026:
0027: </com:TForm>

Stack Trace

#0 C:\AppServ\www\prado\framework\Web\UI\TTemplateManager.php(769): TTemplate->handleException(Object(TInvalidOperationException), 17, '<com:TForm ID="...')
#1 C:\AppServ\www\prado\framework\Web\UI\TTemplateManager.php(248): TTemplate->parse('<com:TForm ID="...')
#2 C:\AppServ\www\prado\framework\Web\UI\TTemplateManager.php(82): TTemplate->__construct('<com:TForm ID="...', 'C:\AppServ\www\...', 'C:\AppServ\www\...')
#3 C:\AppServ\www\prado\framework\Web\Services\TPageService.php(460): TTemplateManager->getTemplateByFileName('C:\AppServ\www\...')
#4 C:\AppServ\www\prado\framework\Web\Services\TPageService.php(419): TPageService->createPage('Home')
#5 C:\AppServ\www\prado\framework\TApplication.php(1066): TPageService->run()
#6 C:\AppServ\www\prado\framework\TApplication.php(376): TApplication->runService()
#7 C:\AppServ\www\web\index.php(18): TApplication->run()
#8 {main}



Logged
tyohan
Senior Member
***

Karma: 7
Offline Offline

Posts: 253


Coding is art


View Profile WWW
« Reply #5 on: Jun. 20, 2008, 06:02:24 AM »

Ganti text TRequiredValidator ke TRequiredFieldValidator. Saya salah nulis tuh.
Logged

http://www.qvvo.com/link/f9871cfc/18855 - get paid for your links
http://thinkrooms.com - Indonesian IT knowledges & sharing
arsitek
Senior Member
***

Karma: 0
Offline Offline

Posts: 68


Hmmm...


View Profile
« Reply #6 on: Jun. 20, 2008, 06:25:54 AM »

Sebelumnya ada beberapa error pada skrip, yang bisa saya perbaiki saya perbaiki, namun yang terakhir ini tidak tahu dimana salahnya.

Quote
Fatal error: Call to a member function add() on a non-object in C:\AppServ\www\web\protected\pages\Home.php on line 31

Sekarang kodenya lengkapnya seperti berikut

Home.page
Code:
<com:TForm ID="form">

Masukkan jumlah user yang ingin di input:
<com:TTextBox Id="txtJmlUser"/>
<com:TButton id='btnJmlUser'
OnCommand="loadInput"
Text="Submit"/>

<com:TPanel Id="inputPanel">

<com:TTextBox id='txtUser'>
<com:TRequiredFieldValidator
id='validator'
ControlToValidate='txtUser'
ValidationGroup='1'
Text='user Required'/>
</com:TTextBox>
</com:TPanel>

<com:TButton
id='btnSubmitUser'
text='submit user'
OnCommand='submitUser'
ValidationGroup='1'/>
</com:TForm>

Home.php

Code:
class Home extends TPage
{

private  $InputPanel;
private  $add;

public function onLoad($param)
{
parent::onLoad($param);

}
function loadInput($sender,$param)
{
$jum=$this->txtJmlUser->text;
for($i=1; $i<=$jum; $i++)
{
$newInput=new TTextBox;
$newInput->id='txtUser'.$i;
$this->InputPanel->Controls->add($newInput);
   
$newValidator=new TRequiredFieldValidator;
$newValidator->id='validator'.$i;
$newValidator->ControlToValidate=$newInput->id;
$newValidator->ValidationGroup='1';
$newValidator->text='user Required';
$this->InputPanel->Controls->add($newValidator);
}
}
}
Logged
tyohan
Senior Member
***

Karma: 7
Offline Offline

Posts: 253


Coding is art


View Profile WWW
« Reply #7 on: Jun. 20, 2008, 01:11:35 PM »

Kayaknya errornya di

Code:
$this->InputPanel->Controls->add($newInput);

klo liat di template idnya inputPanel, coba ubah di php jadi inputPanel bukan InputPanel (I huruf kecil pada input). Saya ga tau bs ga, cuman klo dari error bisa dipastikan pada line tersebut karena yang ada method add() adalah line tersebut. Jangan lupa line yang memanggil function add ada 2. Coba diperiksa lagi.
Logged

http://www.qvvo.com/link/f9871cfc/18855 - get paid for your links
http://thinkrooms.com - Indonesian IT knowledges & sharing
Kabayan
Moderator
Platinum Member
***

Karma: 16
Offline Offline

Posts: 781


Save me...please


View Profile WWW
« Reply #8 on: Jun. 20, 2008, 03:31:33 PM »

Coba gunakan print_r() untuk menguji obyek, karena pembuatan obyeknya gagal.
Logged
arsitek
Senior Member
***

Karma: 0
Offline Offline

Posts: 68


Hmmm...


View Profile
« Reply #9 on: Jun. 21, 2008, 04:21:51 AM »

Penulisan untul TPanel id sudah disamakan namun tetap masih muncul error yang sama.

Code:
Fatal error: Call to a member function add() on a non-object in C:\AppServ\www\web\protected\pages\Home.php on line 31

Saya juga tidak mengerti bagaimana menggunakan print_r() untuk menguji obyek ini.

Terimakasih.
Logged
tyohan
Senior Member
***

Karma: 7
Offline Offline

Posts: 253


Coding is art


View Profile WWW
« Reply #10 on: Jun. 21, 2008, 09:18:39 AM »

coba tambahin get jadi
Code:
$this->InputPanel->getControls->add($newInput);

klo
Code:
print_r($this->inputPanel);

ato
Code:
var_dump($this->inputPanel);
Logged

http://www.qvvo.com/link/f9871cfc/18855 - get paid for your links
http://thinkrooms.com - Indonesian IT knowledges & sharing
arsitek
Senior Member
***

Karma: 0
Offline Offline

Posts: 68


Hmmm...


View Profile
« Reply #11 on: Jun. 23, 2008, 04:18:21 AM »

Errornya masih sama " Call to a member function add() on a non-object".

Hasil var_dump($this->InputPanel); = NULL. Sementara print_r($this->InputPanel); tidak memunculkan apa-apa.

Terimakasih.
Logged
tyohan
Senior Member
***

Karma: 7
Offline Offline

Posts: 253


Coding is art


View Profile WWW
« Reply #12 on: Jun. 23, 2008, 04:18:57 PM »

Ternyata masalahnya ada variable privat dideklarasi di class Home.

Code:
private  $InputPanel;
private  $add;

Buat apaan tuh? Akibatnya $this->InputPanel mengacu pada variable private itu, bukan ke TPanel di page Home. Coba hilangkan pasti bisa jalan.
Logged

http://www.qvvo.com/link/f9871cfc/18855 - get paid for your links
http://thinkrooms.com - Indonesian IT knowledges & sharing
arsitek
Senior Member
***

Karma: 0
Offline Offline

Posts: 68


Hmmm...


View Profile
« Reply #13 on: Jun. 24, 2008, 03:32:43 AM »

Variable privatenya sudah saya hilangkan..

get pada getControls nya juga dihilangkab karena menimbulkan error sebagai berikut:

Code:
Component property 'TPanel.getControls' is not defined.

Setelah diinput nilainya dan submit, maka error yang muncul adalah:

Code:
TInvalidDataValueException
Description

TTextBox.ID 'txtUser1' is not unique among all controls under the same naming container.

Sepertinya penomoran pada "txtUser$i" tidak berjalan..


Terimakasih.
Logged
kokoadi
Senior Member
***

Karma: 1
Offline Offline

Posts: 369


Human Knowladge Belongs To World


View Profile WWW
« Reply #14 on: Jul. 09, 2008, 05:32:03 PM »

Hai... di sini gue ikut nimbrung dari kasus diatas ok semoga bisa membantu sekalian. Berikut ini code yg gue bikin:

'CustomeControl.page
Code:
<com:TContent ID="main">
Masukan jumlah inputan: <com:TTextBox ID="txtInputan" ValidationGroup="data" /> <com:TRequiredFieldValidator ID="rfvInputan" ErrorMessage="*" Text="Data belum dimasukan" ControlToValidate="txtInputan" ValidationGroup="data" /><br /><com:TButton ID="btnRepeat" Text="Repeat!" OnClick="btnRepeat_onClick" ValidationGroup="data" />
    <com:TPanel ID="pnlResult" />   
    <com:TButton ID="btnSave" Text="Save" ValidationGroup="inputan" />
</com:TContent>

dan berikut controlnya
'CustomeControl.php
Code:
<?php
class CustomeControl extends TPage {
private $_label;
private $_textbox;
private $_validator;

public function onLoad($param){
parent::onLoad($param);

$this->btnSave->setVisible(false);
}

public function btnRepeat_onClick($sender$param){
if($this->IsValid){
for($i=1$i <= TPropertyValue::ensureInteger($this->txtInputan->Text); $i++){
$this->getLoopControls($i);
}
$this->btnSave->setVisible(true);
} else {
$this->btnSave->setVisible(false);
}
}

protected function getLoopControls($_id){
$this->_label = new TLabel;
$this->_label->setText('Inputan data ke-'.TPropertyValue::ensureString($_id).': ');
$this->pnlResult->getControls()->add($this->_label);

$this->_textbox = new TTextBox;
$this->_textbox->setID('txtInput'.$_id);
$this->_textbox->ValidationGroup 'inputan';
$this->pnlResult->getControls()->add($this->_textbox);

$this->_validator = new TRequiredFieldValidator;
$this->_validator->setID('rfvInput'.$_id);
$this->_validator->ControlToValidate $this->_textbox->getID();
$this->_validator->ValidationGroup 'inputan';
$this->_validator->ErrorMessage '*';
$this->_validator->Text 'Data inputan ke-'.$_id.' belum diisi!';

$this->pnlResult->Controls->add($this->_validator);

$this->pnlResult->Controls->add('<br />');
}

}
?>


Untuk di atas gue test pakai framewroks 3.1.2 untuk online silahkan coba di sini http://www.adisetiawan.co.nr/index.php?page=CustomeControl menggunakan framewroks dibawah 3.1.2 (agak lupa) tapi di sini saya sedikit ragu tentang metode penamaan data controlnya untuk proses savenya?Huh (gmana rekan2).

Ok semoga bermanfaat.
« Last Edit: Jul. 09, 2008, 05:33:35 PM by kokoadi » Logged

<img src="http://www.000webhost.com/images/banners/468x60/banner6.gif" alt="Free Web Hosting with Website Builder" width="468" height="60" border="0" /> View www.adisetiawan.co.nr
Pages: [1] 2 Print 
« previous next »
Jump to: