predanie parametra do komponenty
- tomas.hrnciar
- Člen | 10
Ahojte, viem, že sa podobné veci riešili, ale aj po prečítaní všetkých možných vlákien som stále zmätený ako by to malo fungovať.
Mám problém s predaním parametru do komponenty.
Snažil som sa to robiť podľa toho, ako to bolo tu: https://doc.nette.org/…eating-posts
ale stále mi to nejde. Resp. ani nerozumiem, prečo to v tom návode
funguje.
Moje funkcie by mali zhruba odpovedať tým z návodu.
createComponentEmailSelect() == createComponentPostForm()
loadEmail(UI\Form $form, $values) == postFormSucceeded($form, $values)
createComponentUpdateEmail($pom) == actionEdit($postId)
updateEmail(UI\Form $button) == postFormSucceeded($form, $values)
Hlavná vec, čomu nerozumiem je, ako sa v tom návode predáva premenná $values, aby som to potom mohol skúsiť napodobniť u seba.
Ďakujem
class EmailsPresenter extends \BasePresenter
{
public $file;
protected function createComponentEmailSelect()
{
$form = new UI\Form;
$dir = __DIR__.'/templates/Homepage/EmailTemplates/';
$result = array_diff(scandir($dir), array('..', '.'));
$form->addSelect('email', 'Zvolte email:', $result);
$form->addSubmit('select', 'Potvrdit');
$form->onSubmit[] = [$this, 'loadEmail'];
return $form;
}
public function loadEmail(UI\Form $form, $values)
{
dump($values);
$dir = __DIR__.'/templates/Homepage/EmailTemplates/';
$result = array_diff(scandir($dir), array('..', '.'));
$fileIndex = $form->getValues(TRUE);
$fileName= $result[$fileIndex['email']];
$path = $dir.$fileName;
$pom = file_get_contents($path);
return $pom;
}
protected function createComponentUpdateEmail($pom)
{
dump($pom);
$button = new UI\Form();
$button->addTextArea('code')
->setValue($pom)
->setAttribute("class", "codemirror-textarea");
$button->addSubmit('save', 'Uložiť');
$button->onSubmit[] = [$this, 'updateEmail'];
return $button;
}
public function updateEmail(UI\Form $button) {
$data = $button->getValues();
dump('afsgfs');
dump($data);
}
}
- tomas.hrnciar
- Člen | 10
@CZechBoY v $pom bude obsah súboru, čiže nejaký template emailu, ktorý sa vloží do TextArea(‚code‘), tam si ho užívateľ môže upraviť a pomocou updateEmail() sa tie zmeny potom uložia
- CZechBoY
- Člen | 3608
No a když to funguje tak jak píšu tak co s tím uděláš?
Pokud se to má brát z formuláře tak to ber z formuláře a ne z parametru
metody na vytváření komponenty.
Ukaž ještě šablonu a javascript nebo prostě všechno co máš. Takhle podle php kodu presenteru mi není vůbec jasný co chceš vlastně udělat.
Editoval CZechBoY (13. 2. 2017 22:34)
- tomas.hrnciar
- Člen | 10
@CZechBoY
nič moc tam už nemám,
toto je šablóna:
{block content}
<link rel="stylesheet" type="text/css" href="/bp/bower_components/codemirror/lib/codemirror.css">
<div class="center">
<!-- javascript -->
<script src="/bp/bower_components/nette-forms/src/assets/netteForms.min.js"></script>
<script src="/bp/bower_components/codemirror/lib/codemirror.js"></script>
<script type="text/javascript" src="/bp/app/model/default.js"></script>
<script type="text/javascript">
{ifset $file}
var file = {$file};
{/ifset}
</script>
<h2>Vyberte email pre úpravu</h2>
{control emailSelect}
{control updateEmail}
</div>
{/block}
a js:
$(document).ready(function(){
//code here...
var code = $(".codemirror-textarea")[0];
var editor = CodeMirror.fromTextArea(code, {
lineNumbers : true
});
});
O čo sa snažím:
Vytvoriť stránku, kde si bude môcť užívateľ upraviť súbor
s templateom pre email. Čiže, najskôr pomocou
createComponentEmailSelect()
vytvorím Select, ktorý bude
obsahovať všetky templaty v danej zložke. Užívateľ vyberie, ten čo chce
a klikne na tlačítko ‚Potvrdiť‘. Tým sa zavolá funkcia
loadEmail()
, ktorá si zo zvoleného súboru vytiahne obsah a
uloží ho do premennej $pom
. Potiaľto som sa dostal. No a teraz
potrebujem nejakým spôsobom predať obsah premennej $pom
, do
funkcie createComponentUpdateEmail($pom)
, ktorá vytvorí textareu
a nastaví do nej obsah premennej $pom
. No a na záver, užívateľ
upraví ten súbor a pomocou updateEmail(UI\Form $button)
, by som
ho chcel uložiť a zapísať do pôvodného súboru.
Editoval tomas.hrnciar (13. 2. 2017 23:10)
- CZechBoY
- Člen | 3608
No radši bych sáhnul po WebChemistry/wizard, ale
můžeš si to zkusit nakodit i sám.
Ve zkratce stačí přehodit načtenou hodnotu po odeslání prvního
formuláře do druhého.
class EmailsPresenter extends \BasePresenter
{
public $file;
protected function createComponentEmailSelect()
{
$form = new UI\Form;
$dir = __DIR__.'/templates/Homepage/EmailTemplates/';
$result = array_diff(scandir($dir), array('..', '.'));
$form->addSelect('email', 'Zvolte email:', $result);
$form->addSubmit('select', 'Potvrdit');
$form->onSubmit[] = [$this, 'loadEmail'];
return $form;
}
public function loadEmail(UI\Form $form, $values)
{
dump($values);
$dir = __DIR__.'/templates/Homepage/EmailTemplates/';
$result = array_diff(scandir($dir), array('..', '.'));
$fileIndex = $form->getValues(TRUE);
$fileName= $result[$fileIndex['email']];
$path = $dir.$fileName;
$pom = file_get_contents($path);
$this['updateEmail']['code']->setValue($pom); // vložit obsah do druhého formuláře
}
protected function createComponentUpdateEmail()
{
$button = new UI\Form();
$button->addTextArea('code')
->setRequired()
->setAttribute("class", "codemirror-textarea");
$button->addSubmit('save', 'Uložiť');
$button->onSubmit[] = [$this, 'updateEmail'];
return $button;
}
public function updateEmail(UI\Form $button) {
$data = $button->getValues();
dump('afsgfs');
dump($data);
}
}
Editoval CZechBoY (14. 2. 2017 10:53)
- tomas.hrnciar
- Člen | 10
@CZechBoY ďakujem, toto pomohlo. Ešte by som potreboval predať
$fileName
z loadEmail()
do updateEmail()
.
Vedel by si mi poradiť ako na to?