Neodesílá se formulář (komponenta FilterForm vložená do komponenty Videos) obe komponenty jsou ve snippetech
- Martin67
- Člen | 6
Zdravím všechny
adaptuji nette kód, který udělal původně kolega.
Control Filter je vložen do Controlu Videos. Na stánce jsou AJAX snippety
obsahující odkazy na data a formulář kontrolu Filter, který je také ve
snippetu. Můj problém je, že tlačítka formuláře neodešlou
formulář.
Dokud nebyl pripojen AJAX (soubory .js nebyly na správné cestě) formulář
jel. Ale jakmile jsem připojil AJAX tlačítka formuláře neodešlou
formulář. Na fórech jsem se dočetl, že problém může být ve formuláři,
který nemá data, tak jsem vložil jednu hidden hodnotu. Ale nepomohlo.
Určitě je to nějaká drobnost, kterou díky nezkušenosti nevidím. Děkuji
za pomoc předem.
FilterFormControl.php
<?php
class FilterFormControl extends FormControl
{
/** @var callable[] */
public $onSuccess = [];
/** @var NetteResponse */
private $httpResponse;
public function __construct(NetteResponse $httpResponse)
{
parent::__construct();
$this->httpResponse = $httpResponse;
}
/**
* @internal
* @param SubmitButton
* @return void
*/
public function submitFilterClicked(SubmitButton $submitButton)
{
$form = $submitButton->getForm();
$values = $form->getValues();
// \Tracy\Debugger::dump($values);
// \Tracy\Debugger::dump($submitButton);
if ($submitButton->name=='submitFilterAll') {$filterValue="ALL";}
elseif ($submitButton->name=='submitFilterNews') { $filterValue="NEWS";}
elseif ($submitButton->name=='submitFilterThemes') { $filterValue="THEMES";}
elseif ($submitButton->name=='submitFilterSeries') { $filterValue="SERIES";}
// setCookie($name, $value, $time, [$path, [$domain, [$secure, [$httpOnly])
$this->httpResponse->setCookie('filterM', $filterValue, '100 days'); // odešle cookie
if ($this->getPresenter()->isAjax()) {
$this->redrawControl();
} else {
$this->redirect('this');
}
}
/*
* @inheritdoc
*/
protected function createComponentForm($name)
{
$form = parent::createComponentForm($name);
$form->addHidden('hiu','sos');
$form->addSubmit('submitFilterSeries', 'sentClipWebAccess.components.filterFormControl.submitFilterSeries')
->onClick[] = $this->submitFilterClicked;
$form->addSubmit('submitFilterAll', 'sentClipWebAccess.components.filterFormControl.submitFilterAll')
->onClick[] = $this->submitFilterClicked;
$form->addSubmit('submitFilterNews', 'sentClipWebAccess.components.filterFormControl.submitFilterNews')
->onClick[] = $this->submitFilterClicked;
$form->addSubmit('submitFilterThemes', 'sentClipWebAccess.components.filterFormControl.submitFilterThemes')
->onClick[] = $this->submitFilterClicked;
return $form;
}
}
?>
FilterFormControl.latte
<div n:snippet class="testControl">
{form form role => 'form'}
<div class="form-group">
{input hiu}
{input submitFilterAll class => 'btn btn-primary btn-lg'}
{input submitFilterNews class => 'btn btn-primary btn-lg'}
{input submitFilterThemes class => 'btn btn-primary btn-lg'}
{input submitFilterSeries class => 'btn btn-primary btn-lg'}
</div>
{/form}
</div>
VideosControl.latte
<div n:snippet class="videosControl">
{control filterFormControl}
{var $videos = $control->getVideos()}
{if count($videos)}
{else}
{/if}
</div>
zkoušel jsem i vložit mimo, ale zjevně na toto nemá vliv
{control filterFormControl}
<div n:snippet class="videosControl">
{var $videos = $control->getVideos()}
{if count($videos)}
{else}
{/if}
</div>
- David Matějka
- Moderator | 6445
co se tedy po odeslani stane? provede se najaky http pozadavek v developer konzoli? nehlasi konzole nejakou chybu?
- Martin67
- Člen | 6
Bohuzel moje zkušenosti s debuggingem v Safari nejsou velke. Ale myslim, ze:
- neodešle se nic. v konzoli není žádný síťový požadavek
- když spustím časový zázanam aktivitiy prohlížeče je vidět jen požadavek na uspořádání a vykreslení, ale to si myslím, že dělá HTML/CSS a po kliku na formulář se nestane nic.
Navic jsem přidal implicitně HTML kodem submit input, ktery take
nefunguje.
Ale pridaj jsem jeste text input na ktery jsem pridal do onclick atributu
odeslani a to funguje. Bohuzel nechapu proc. Chápu jen, ze to je nepouzitelna
praktika. Zde je kod
<section id="section-videos">
<div class="content">
<div class="testControl" id="snippet-videosControl-filterFormControl-">
<form action="/sentclip.com.webaccess/" method="post" id="frm-videosControl-filterFormControl-form" role="form">
<div class="form-group">
<input type=text" name="abc" onclick="document.getElementById('frm-videosControl-filterFormControl-form').submit();">
<input type="submit" value="submit">
<input type="hidden" name="hiu" value="sos">
<input type="submit" name="submitFilterAll" value="Všechna videa" class="btn btn-primary btn-lg">
<input type="submit" name="submitFilterNews" value="Novinky" class="btn btn-primary btn-lg">
<input type="submit" name="submitFilterThemes" value="Témata měsíce" class="btn btn-primary btn-lg">
<input type="submit" name="submitFilterSeries" value="Seriály" class="btn btn-primary btn-lg">
</div>
<input type="hidden" name="do" value="videosControl-filterFormControl-form-submit"><!--[if IE]><input type=IEbug disabled style="display:none"><![endif]-->
</form>
</div><div class="videosControl" id="snippet-videosControl-">
- David Matějka
- Moderator | 6445
skoro bych rekl, ze bude delat nejakou neplechu vlastni JS, ktery zamezi odeslani formulare..
- Martin67
- Člen | 6
Taky me to napadlo, ale nemam tolik zkusenosti a vedomosti, abych mohl
usoudit. Vyzkoušel jsem ale vyřadit ajax. změnil jsem cestu
…/resource/assets/bower_components/nette.ajax.js/… na
…/resource/assets/bower_components/Xnette.ajax.js/… a formular zacal hned
pracovat, ale nyni nejde spoutet videa v modálním okně na odkazu
<a href=„#“ data-video=„{$video->getId()}“
class=„video-item-btn“ data-log-view-url=„{link logView! id ⇒
$video->getId()}“ n:attr=„‚data-show-on-load‘ ⇒
$iterator->isFirst()“>
{control filterFormControl}
<div n:snippet class="videosControl">
{var $videos = $control->getVideos()}
{if count($videos)}
{var $firstVideo = array_values($videos)[0]}
<ul>
<li class="video-item" n:foreach="$videos as $video">
<img src="{$video->getImageUrl()}" alt="">
<div class="content-text">
<h3>{$video->getTitle()}</h3>
<p>{$video->getDescription()}</p>
<a href="#" data-video="{$video->getId()}" class="video-item-btn" data-log-view-url="{link logView! id => $video->getId()}" n:attr="'data-show-on-load' => $iterator->isFirst()">{_'sentClipWebAccess.components.videosControl.playVideo'}</a>
<a n:href="showVideoDetail! id => $video->getId()" class="video-item-btn">{_'sentClipWebAccess.components.videosControl.showVideoDetail'}</a>
</div>
Napoví to něco? Díky moc.