Manuální render formuláře, snippet a table

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

Ahoj všichni,
prosím o pomoc.

Nějak jsem se ocitl v koutě při vykreslování formuláře.
Potřeboval bych vykreslit formulář přes {form formAdd} … {/form} tak aby byl reprezentovaný formou tabulky.

Použiji-li control, níže, tak vše je ok a s tagy tabulky.

<?php
{control formAdd}
?>

Ale jak toho mohu docílit, pokud potřebuji použít snippety v řešení DependencySelectBox, který funguje skvěle: https://blog.nette.org/…-and-pure-js

Potřeboval bych níže uvedený formulář nějakým způsobem vykreslit s pomocí tagů tabulky.

<?php
{form formAdd}
    {label zadavatel /} {input zadavatel}
    {label nalezce /} {input nalezce}
    {label sektor /} {input sektor}
    {snippet linkaSnippet}
        {label linka /} {input linka}

        {snippet pracSnippet}
            {label pracoviste /} {input pracoviste}
        {/snippet}

        {include #js}
    {/snippet}
    {label rizikopopis /} {input rizikopopis}
    {label zdrojrizika /} {input zdrojrizika}
    {label riziko /} {input riziko}
    {label ergoriziko /} {input ergoriziko}
    {label next /} {input next}

    {input ok}
{/form}
?>

Mooc díky

Editoval kralik (3. 11. 2014 14:16)

matopeto
Člen | 395
+
0
-

jednoducho

{form formAdd}
	<table>
    <tr><th>{label zadavatel /}</th><td>{input zadavatel}</td>
	<tr><th>{label nalezce /}</th><td>{input nalezce}</td>

	...

Editoval matopeto (3. 11. 2014 14:44)

kralik
Člen | 230
+
0
-

Tohle ano, ale co snippety?

<?php
{snippet A}
<tr>
	<th>{label zadavatel /}</th><td>{input zadavatel}</td></tr>
	{snippet B}
		<tr><th>{label nalezce /}</th><td>{input nalezce}</td></tr>
    {/snippet}
{/snippet}
?>

Bohužel se snippety to dělá nesmysly.

Díky

jiri.pudil
Nette Blogger | 1029
+
0
-

Použij n-makro: <tr n:snippet="A">

matto
Člen | 55
+
0
-

neviem ci to vzniklo prepisom, ale mas tam poprehadzovane tagy <tr>

kralik
Člen | 230
+
0
-

Tak jsem zkusil n:snippet, ale nějak špatně.

Níže ve formuláři se mi snippet A překreslí, ale snippet B, ne.
Problém je ten že snippet B potřebuji mít ve snippetu A.

Prosím lze to nějak udělat?

Díky

Form

<?php
{form formAdd}
    <table class="form">
        <tr class="required">
            <th class="w100">{label zadavatel /}</th>
            <td>{input zadavatel}</td>
        </tr>
        <tr class="required">
            <th class="w100">{label nalezce /}</th>
            <td>{input nalezce}</td>
        </tr>
        <tr class="required">
            <th class="w100">{label sektor /}</th>
            <td>{input sektor}</td>
        </tr>
        <tr n:snippet="A" class="required">
            <th class="w100">{label linka /}</th>
            <td>{input linka}</td>
        </tr>
        <tr n:snippet="B" class="required">
            <th class="w100">{label pracoviste /}</th>
            <td>{input pracoviste}</td>
        </tr>

        {include #js}
        <tr class="required">
            <th class="w100">{label prilet /}</th>
            <td>{input prilet}</td>
        </tr>
        <tr class="required">
            <th class="w100">{label rizikopopis /}</th>
            <td>{input rizikopopis}</td>
        </tr>
        <tr class="required">
            <th class="w100">{label zdrojrizika /}</th>
            <td>{input zdrojrizika}</td>
        </tr>
        <tr class="required">
            <th class="w100">{label riziko /}</th>
            <td>{input riziko}</td>
        </tr>
        <tr class="required">
            <th class="w100">{label ergoriziko /}</th>
            <td>{input ergoriziko}</td>
        </tr>
        <tr class="required">
            <th class="w100">{label next /}</th>
            <td>{input next}</td>
        </tr>

            {input ok}

    </table>
{/form}

{define #js}

<script type="text/javascript">
{include #jsCallback, input => sektor, link => linkaChange}
{include #jsCallback, input => linka, link => pracChange}
</script>

{/define}


{define #jsCallback}

    $('#{$control["formAdd"][$input]->htmlId}').on('change', function() {
        $.nette.ajax({
            type: 'GET',
            url: '{link {$link}!}',
            data: {
                'value': $(this).val(),
            }
        });
    });

{/define}
?>