problém se snippety a prázdným JSON

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

Ahoj mám menší problém se snippety.
ajax mi vrací: {„state“:[]} nevím proč.
zajímavý efekt, kdy mám jednu ajaxovou část, která bez problému funguje, jiná část aplikace na jiné stránce již ne. Napadlo mě, že by byl problém v {snippet:form}. toto uvození bloku html, který chci měnit používám na obou stránkách, tak mě napadlo, zda-li nedochází k nějaké kolizy, když jedna stránka použije {snippet:form} a druhá též – ale ne ve stejný okamžik…
proč dostávám prázdný JSON? je někde podrobný popis, jak snippety fungují, kam se co ukládá, co by se mělo vracet a proč? Díky

Patrik Votoček
Člen | 2221
+
0
-

Někde máš špatně zavináče… Já s tím teď bojoval celou noc…

wdolek
Člen | 331
+
0
-

zkusil bych precist tento thread: https://forum.nette.org/…agie-v-praxi

magie se tomu rika opravnene – ale staci si trosku zadumat a clovek na to prijde. setkal sem se jednou s tim, ze programator(ka) zapomela dat zavinac pred {widget ...} v kterem snippet mela.

  • muze to byt ale banalnejsi – pokud je snippet v tele if-else, musi byt zavinac i pred if-else…
  • pokud je snippet v nejake sablone pohledu (neco.phtml) mel by byt zavinac i pred {block #content}

jinak snippet by mel vratit v payloadu pole snippetu, id snippetu a html, ktere pak javascript nacpe misto puvodniho html kodu… {"state":{"language":"cs"},"snippets":{"snippet-mediaList-itemList":"<p>novy obsah snippetku</p>"}}

Honza Kuchař
Člen | 1662
+
0
-

zavináče, zavináče, zavináče… :)

RDPanek
Člen | 189
+
0
-

ok, popíšu snad veškeré situace a možnosti co mě napadly – hned jak se dostanu dom., ale přísahám, že zavináče používám – stejně tak přiznávám, že někde jsem něco přehlídl a nebo mám díru ve znalostech nette…

RDPanek
Člen | 189
+
0
-

Takže mám view: default.phtml

{block #content}
<div id="tabs" >
    <ul>
        <li><a href="#tabs-1" title="Video">
                 <img src="{$basePath}/images/application_view_tile.png" style="border:0;" />
                 Video</a></li>
    </ul>
    <div id="tabs-1" style="background-color: #ffffff; display: block;">
        {include movies.phtml}
    </div>
</div>

movies.phtml

{block #content}
{if isset($newVideo)}
<fieldset>
    <legend>Přidat Video</legend>
    {snippet:form}
	{if isset($values)}
    <strong>Stav nahrávání:</strong><br />
    <b>{=count($values["upload"])}</b> přijatých souborů.
	<br />
        <br />
        <div id="indicator" style="padding: 5px; background-color: #FFFFFF; ">
            <img src="{$basePath}/images/admin/accept.png" style="border:0;" />
            &nbsp;ukládání je úspěšně u konce.
        </div>
	{else}
		{widget form}
                <br />
                <div id="indicator" style="padding: 5px; background-color: #FFFFFF; display: none;">
                    <img src="{$basePath}/images/admin/reload_green.gif" style="border:0;" />
                    &nbsp;pracuji, čekejte prosím...
                </div>
	{/if}
{/snippet}
</fieldset>
<br />
<fieldset>
    <legend>Akce</legend>
    {widget endForm}
</fieldset>

<!-- vypne prehled kategorii -->
{assign $closeViewPhotogallery '1'}
{/if}

MoviesPresenter.php

public function createComponentForm($name)
        {
            $form = new AppForm($this,$name);
            $form->getElementPrototype()->class[] = "ajax";

            $form->addTextArea('description_file', 'Popis:', 30, 2);
            /*
             * Nastavim formular, podle toho, zda-li se jedna o fotografii
             * nebo video
             */
            $enviroment = Environment::getHttpRequest()->getQuery();

            $form->addMultipleFileUpload("upload","Vybrat: ")
                 /*->addRule("MultipleFileUpload::validateFilled","Musíte odeslat alespoň jeden soubor!")
                 ->addRule("MultipleFileUpload::validateFileSize","Soubory jsou dohromady moc veliké!",100*1024)*/;

            $form->addSubmit("odeslat", "Uložit vybranné");
            $form['odeslat']->getControlPrototype()->class('odeslatBut');
            $form->onSubmit[] = array($this,"onSubmit");

            // Invalidace snippetů
            $form->onInvalidSubmit[] = array($this,"handlePrekresliForm");
            $form->onSubmit[] = array($this,"handlePrekresliForm");
        }

public function onSubmit(Form $form) {
		$data = $form->getValues();
                $enviroment = Environment::getHttpRequest()->getPost();
                // Předáme data do šablony
		$this->template->values = $data;
		$queueId = uniqid();
		// Přesumene uploadované soubory
		foreach($data["upload"] AS $file) {

                            $directory = "videogallery";

			// $file je instance HttpUploadedFile
                        $filePath = strtolower(Helpers::convertDiacritic(
                                        str_replace(" ", "", "/".$directory."/q{".$queueId."}__f{".rand(10,99)."}__".$file->getName()))
                                                );
                        $copyFilePath = WWW_DIR.$filePath;
                        /*
                         * @todo Pri nahravani souboru nejak osetrit neuspech
                         */

                        if($file->move($copyFilePath)){
                               /*
                                * Pokus o nastaveni limitu na serveru
                                */
                               Helpers::setServerLimits();
                               /*
                                * Ulozeni zaznamu
                                */
                               $arr = array(
                                    'id_admin'          =>  $this->myInfo['id_admin'],
                                    'status'            =>  '0',
                                    'date_create'       =>  Date("Y-m-d", Time()),
                                    'name_video'        =>  $data['description_file']?$data['description_file']:Helpers::convertDiacritic(str_replace(" ", "", strtolower($file->getName()))),
                                    'size_disk_video'   =>  filesize($copyFilePath),
                                    'name_video_disk'   =>  $filePath
                                    );
                               $this->multimediaModel->SaveNewInfoFile($arr, "video");
                        }
		}

	}
        public function handlePrekresliForm() {
		$this->invalidateControl("form");
	}

:-)
je to z rozsireni MultiFileUpload

RDPanek
Člen | 189
+
0
-

Honza Kuchař napsal(a):

zavináče, zavináče, zavináče… :)

taky se někde používají a někde ne, podle verze nette…

wdolek
Člen | 331
+
0
-

zkusil bych nasledujici zazavinacovani (zakrucankovani :D)…


  1. default.phtml
@{block #content}
	...
	@{include movies.phtml}
	...
@{/block}

  1. movies.phtml
@{block #content}
	@{if isset ($newVieo)}
		...
		{snippet ...}
		...
	@{/if}
@{/block}

  1. @layout.phtml
<html>
	<head>...</head>
	<body>
		@{include #content}
	</body>
</html>

(a take bych zkusil lepe odsazovat kod ;))

Editoval wdolek (3. 8. 2010 16:20)

RDPanek
Člen | 189
+
0
-

@layout.phtml mi vyskočil error – nic méně, MultipleFileUpload mám na jednom místě ve stejné aplikaci implementováno, ale v jiné části mi to nefunguje, i když napsaný by to mělo být dobře – jde mi o to, že výsledek z nefunknčí implementace ve firebugu je: {„state“:[]}, nejsem si jistej, jest-li tím, že rozšíření MultipleFileUpload resp. jeho implementace používám v jedné části systému a pak v druhé, tak jest-li se něco v jeho implementaci nesmí jmenovat stejně, jest-li se nějaká jeho část nekešuje, tzn. když používám dvě stejné implementace z různých míst, tak jest-li nedochází ke kolidaci…

RDPanek
Člen | 189
+
0
-

Repeat:
deafult.phtml

@{block #content}
<div id="tabs" >
    <ul>
        <li><a href="#tabs-1" title="Video">
                 <img src="{$basePath}/images/application_view_tile.png" style="border:0;" />
                 Video</a></li>
    </ul>
    <div id="tabs-1" style="background-color: #ffffff; display: block;">
        @{include movies.phtml}
    </div>
</div>

movies.phtml

@{block #content}
<script type="text/javascript" language="javascript" src="{$basePath}/js/lytebox/lytebox.js"></script>
<script type="text/JavaScript" src="{$baseUri}js/jquery.livequery.js"></script>
        <script type="text/JavaScript" src="{$baseUri}js/swfobject.js"></script>
        <script type="text/JavaScript" src="{$baseUri}js/jquery.uploadify.v2.1.0.js"></script>
        <script type="text/JavaScript" src="{$baseUri}js/nette-ajax-driver.js"></script>
        <script type="text/JavaScript" src="{$baseUri}js/nette-ajax-form.js"></script>
        <script type="text/JavaScript" src="{$baseUri}js/MultipleFileUpload.js"></script>
<link rel="stylesheet" href="{$basePath}/js/lytebox/lytebox.css" type="text/css" media="screen" />
<link rel="stylesheet" media="screen,projection,tv" href="{$baseUri}css/uploadify.css" type="text/css" />
<script>
$(function() {
    $(".videoBox").mouseover(function() {
         $(this).find("#editIcon").show();
    });
     $(".videoBox").mouseout(function() {
         $(this).find("#editIcon").hide();
    });
});

</script>

<!-- nove video -->
@{if isset($newVideo)}
<fieldset>
    <legend>Přidat Video</legend>
    {snippet:form}
	{if isset($values)}
    <strong>Stav nahrávání:</strong><br />
    <b>{=count($values["upload"])}</b> přijatých souborů.
	<br />
        <br />
        <div id="indicator" style="padding: 5px; background-color: #FFFFFF; ">
            <img src="{$basePath}/images/admin/accept.png" style="border:0;" />
            &nbsp;ukládání je úspěšně u konce.
        </div>
	{else}
		{widget form}
                <br />
                <div id="indicator" style="padding: 5px; background-color: #FFFFFF; display: none;">
                    <img src="{$basePath}/images/admin/reload_green.gif" style="border:0;" />
                    &nbsp;pracuji, čekejte prosím...
                </div>
	{/if}
{/snippet}
</fieldset>
<br />
<fieldset>
    <legend>Akce</legend>
    {widget endForm}
</fieldset>

<!-- vypne prehled kategorii -->
{assign $closeViewPhotogallery '1'}
@{/if}
RDPanek
Člen | 189
+
0
-

při této implementaci dostanu opět ve firebugu {„state“:[]}
Grrrrrrr!!!

wdolek
Člen | 331
+
0
-

ze v payloadu je prazdny pole snippetu bych spise vysvetloval tim, ze Nette takovy snippet vubec nezaregistrovalo (ID a nove HTML se do payloadu neposle pokud Nette nema takovy snippet „zaregistrovany“). je zavinac (-ova magie) spravne ve vsech „nadrazenych“ sablonach?

… a jeste me napada – smazat cache sablon?

RDPanek
Člen | 189
+
0
-

smazal jsem celý temp… zavináče u tohoto problému jsem umístil, dokonce u implementace, která funguje žádné zavináče nepoužívám.

RDPanek
Člen | 189
+
0
-

{snippet:form} je stejný u obou dvou implementací v různých částí aplikace…

wdolek
Člen | 331
+
0
-

:( tak to me uz moc nenapada… respektive me nenapada nic. chtelo by to nekoho znalejsiho. jeste me teda tedka napadlo pri pohledu na tu „druhou implementaci“ – mas tam stejnou verzi Nette?

blacksun
Člen | 177
+
0
-

No zavináče a snippet:name jsou různé přístupy k ajaxu, ne?

Co použít buď zavináče a snippet[mezera]name a nebo bez zavináčů s poslední verzí nette?

RDPanek
Člen | 189
+
0
-

jj stejná verze nette 1.0dev – používám poslední verzi snippet:form a bez zavináčů – teda teď jsem zkusil uvést zavináče, ale bez výsledku

blacksun
Člen | 177
+
0
-

Hoď někam celej ten projekt zazipovanej nebo mi ho pošli do mailu, případně nějakou kostru, na který to nefunguje.. takhle se v tom člověk blbě orientuje..

RDPanek
Člen | 189
+
0
-

blacksun napsal(a):

Hoď někam celej ten projekt zazipovanej nebo mi ho pošli do mailu, případně nějakou kostru, na který to nefunguje.. takhle se v tom člověk blbě orientuje..

Děkuji „blacksun“ za výpomoc – problém úspěšně vyřešen…

wdolek
Člen | 331
+
0
-

:) a v cempak byl zakopany pes?

RDPanek
Člen | 189
+
0
-

Samozřejmě v zavináčích

toka
Člen | 253
+
0
-

Jestli máte navíc nějaké zavináče, tak bych si dal. Klidně i uzenáče nebo třeba pepřenky :-)