Autor | Zpráva | ||
---|---|---|---|
SleepingMouse Profil * |
#1 · Zasláno: 22. 11. 2015, 22:52:10
Ahoj,
řeším následující případ: Mám class, která zajišťuje vygenerování nějakého stromu, který je do sebe zanořený. Rád bych ale oddělil classnu od HTML a měl šablonu bokem. Nechci v šabloně ale volat nějaké funkce a podobně, ta by měla pouze vypisovat stringy, max. tak užití foreach. Potřebuji docílit rozbalovacích nabídek, do sebe vnořených: <div class="level-0"> <div>nejaka data o polozce</div> <div class="potomci"> <div class="level-1"> <div>nejaka data o polozce</div> <div class="potomci"> <div class="level-2> <div>nejaka data o polozce</div> <div class="potomci"> <div class="level-3"> <div>nejaka data o polozce</div> <div class="potomci"> </div> </div> </div> </div> </div> </div> </div> </div> Měl by někdo nápad na takovou realizaci? HTML potřebuji mít oddělené z toho důvodu, že se tato funkce bude používat na více místech a šablonu budu chtít pak přetěžovat. díky |
||
Alphard Profil |
#2 · Zasláno: 22. 11. 2015, 23:02:46
SleepingMouse:
„Nechci v šabloně ale volat nějaké funkce a podobně“ Tento požadavek se mi zdá zbytečně tvrdý. V šablonách se běžně používají makra/blocky/... (každý systém tomu říká jinak), které v podstatě představují funkce a lze je volat rekurzivně. Rekurzivní volání těchto bloků považuji za optimální způsob, jak vypisovat stromové struktury. |
||
SleepingMouse Profil * |
#3 · Zasláno: 22. 11. 2015, 23:04:32
Alphard:
To bych chtěl řešit v té class, šabloně pouze odevzdat šikovně data. |
||
Alphard Profil |
Já se snažím vysvětlit, že váš záměr není rozumný. Jasně, každou rekurzi jde přepsat do cyklu, ale nebude to hezké. Data se samozřejmě připraví mimo šablonu, ale nevidím jediný důvod, proč je nevypsat rekurzivně.
Tady je příklad, jak k tomu lze přistoupit. Troufám si tvrdit, že nic hezčího nevymyslíte. {% macro level(level_root_class) -%} <li> <div> <a href="..."> <span>{{level_root_class.name|e}}</span> </a> </div> {% if level_root_class.subclasses %} <ul> {% for class in level_root_class.subclasses|sort(attribute='name') %} {{level(class)}} {% endfor %} </ul> {% endif %} </li> {%- endmacro %} {% block content %} <div id="content"> <div class="tree"> <ul> {{level(root_class)}} </ul> </div> </div> {% endblock %} |
||
Časová prodleva: 8 let
|
0