Neodesílá se formulář (komponenta FilterForm vložená do komponenty Videos) obe komponenty jsou ve snippetech

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

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
+
0
-

co se tedy po odeslani stane? provede se najaky http pozadavek v developer konzoli? nehlasi konzole nejakou chybu?

Martin67
Člen | 6
+
0
-

Bohuzel moje zkušenosti s debuggingem v Safari nejsou velke. Ale myslim, ze:

  1. neodešle se nic. v konzoli není žádný síťový požadavek
  2. 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
+
0
-

skoro bych rekl, ze bude delat nejakou neplechu vlastni JS, ktery zamezi odeslani formulare..

Martin67
Člen | 6
+
0
-

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.