Home
About
Testimonials
Demos
Download
Documentation
Forum
Development
Forum
Help
Search
Chatroom
Login
Register
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
Author
Topic: Menciptakan field baru berdasarkan jumlah nilai input (Read 10382 times)
arsitek
Senior Member
Karma: 0
Offline
Posts: 68
Hmmm...
Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 253
Coding is art
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 68
Hmmm...
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 253
Coding is art
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 68
Hmmm...
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 253
Coding is art
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 68
Hmmm...
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 253
Coding is art
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 781
Save me...please
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 68
Hmmm...
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 253
Coding is art
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 68
Hmmm...
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 253
Coding is art
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 68
Hmmm...
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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
Posts: 369
Human Knowladge Belongs To World
Re: Menciptakan field baru berdasarkan jumlah nilai input
«
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?
(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
« previous
next »
Jump to:
Please select a destination:
-----------------------------
General
-----------------------------
=> Announcements
=> Prado-powered Applications
=> Prado International
===> Chinese
===> Dutch
===> French
===> German
===> Indonesian
===> Italian
===> Japanese
===> Polish
===> Portuguese
===> Russian
===> Spanish
=> Job Opportunities
-----------------------------
Prado v3.x
-----------------------------
=> General Discussion
===> Active Controls (Ajax)
===> Database
===> JavaScript
===> General PHP Topics
===> PRADO Extension
=> Installation and Setup
=> Feature Requests
=> Bug Reports
=> Tips, Snippets and Tutorials
===> Screencasts
=> Component Repository
-----------------------------
Prado-related Projects
-----------------------------
=> PRADO Community Project
=> PetShop Project
=> Entity framework
=> IDE/Editor for Prado
-----------------------------
Prado v2.x
-----------------------------
=> General Discussion
===> Installation and Setup
===> Active Controls (Ajax)
===> Feature Requests
=> Bug Reports
=> Tips, Snippets and Tutorials
=> Component Repository
-----------------------------
Beyond Prado
-----------------------------
=> Miscellaneous
Terms of Service
|
Contact Us
Copyright © 2006-2007 by the PRADO Group.
Powered by SMF 1.1.11
|
SMF © 2006, Simple Machines LLC