Spatne se renderujici tag <link> v sablone?

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

Zdravim,
neco mi meni v template s registrovanym Latte tag <link> na <link/>, cokoliv jineho projde v poradku viz. example nize:

<?php //netteCache[01]000247a:2:{s:4:"time";s:21:"0.74110500 1307983970";s:9:"callbacks";a:1:{i:0;a:3:{i:0;a:2:{i:0;s:19:"Nette\Caching\Cache";i:1;s:9:"checkFile";}i:1;s:77:"/web/virtuals/robzone/document_root/../app/templates/Export/googleGoods.phtml";i:2;i:1307983703;}}}?><?php
// file …/templates/Export/googleGoods.phtml
//

$_cb = Nette\Templates\LatteMacros::initRuntime($template, NULL, '734a5da787'); unset($_extends);

if (isset($presenter, $control) && $presenter->isAjax()) { Nette\Templates\LatteMacros::renderSnippets($control, $_cb, get_defined_vars()); }

if (Nette\Templates\SnippetHelper::$outputAllowed) {
?>
<<?php ?>?xml version="1.0" encoding="UTF-8" ?>
<rss version ="2.0" xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <title>Nazev feedu</title>
    <description>Popis feedu</description>
    <link />http://www.domena.tld<link>
<?php foreach ($iterator = $_cb->its[] = new Nette\SmartCachingIterator($products) as $item): ?>

EDIT: Zapommnel jsem na verzi, je to: 1.0 pro 5.3 s namespaces

Editoval grivaldu (13. 6. 2011 15:32)

Aurielle
Člen | 1281
+
0
-

Ukaž šablonu.

grivaldu
Člen | 13
+
0
-
<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
  <channel>
    <title>Nazev feedu</title>
    <description>Popis feedu</description>
    <link>http://www.domena.tld</link>
    {foreach $products as $item}
    <item>
      <g:id>{$item->idProduct}</g:id>
      <g:brand>Brand</g:brand>
      <title>{$item->getOriginalName()}</title>
      <link>{link //Product:default showId => $item->idProduct}</link>
      <g:price>{if $item->action_price > 0 && $item->action_price < $item->price}{$item->action_price}{else}{$item->price}{/if}</g:price>
      <description>{$item->content|stripTags}</description>
      <g:condition>new</g:condition>
      <g:gtin></g:gtin>
      <g:mpn>{$item->code}</g:mpn>
      <g:image_link>{$baseUri}{$item->sliderImage->size(200,NULL)->url}</g:image_link>
      <g:product_type>category</g:product_type>
      <g:quantity>99</g:quantity>
      <g:availability>in stock<g:availability>
      <g:shipping>
        <g:country>CZ</g:country>
        <g:service>Kurýr PPL zdarma</g:service>
        <g:price>0</g:price>
      </g:shipping>
    </item>
    {/foreach}
  </channel>
</rss>
David Grudl
Nette Core | 8228
+
0
-

Dej na začátek {contentType application/xml} jinak se použije HTML parser.

grivaldu
Člen | 13
+
0
-

Hmm Content-Type sem specifikoval v HttpResponse. Nebylo by vhodne aby si template renderer zjistil tedy nejprve informace z response headeru a az nasledne resil nastaveni sablony? Specifikovat contentType v sablone je hezka vec, ale pride mi to trosku prasacke.

Kazdopadne diky, zabralo to.

Editoval grivaldu (14. 6. 2011 12:50)

kravčo
Člen | 721
+
0
-

Predsa podľa obsahu šablóny (príp. hlavného layoutu) vieš, či je to HTML alebo XML. Aplikačná logika to nemá ako vedieť a nemá prečo vedieť…

grivaldu
Člen | 13
+
0
-

To s tebou nesouhlasim, aplikace muze vratit Content-Type v response absolutne nezavisle na tom, co je napsano v sablone. Sablona muze byt napr. uplne prazdna a presto muze aplikace rict, ze content, ktery vraci by mel byt XML, JSON ci cokoliv jineho. Primarne by aplikace mela rikat, co bude vystupem, nikoliv az sablona urcena k formatovani vystupu.

Koukas na to z pohledu HTML, nicmene v ramci Nette obsahem sablony nemusi byt vzdy vyhradne HTML. Rendering by dle meho nazoru nemel samovolne menit tebou vyprodukovany obsah do podoby o ktere si „mysli“, ze je spravna.

Makro contentType bych tedy bral jako moznost pretizeni hodnoty v HttpResponse, nikoliv jako jeho nahradu. Je to imho mocny nastroj, ale z meho pohledu muze pusobit i hodne problemu.

Dovedu si predstavit HTML kodera, ktery si udela include na sablonu ve ktere nekdo predtim modifikoval Content-Type. Vysledek pak bude jiste uzasny. :-)

Nerikam, ze je to takto spatne, jen to je z meho pohledu dost nepredvidatelne chovani a urcite by si to zaslouzilo varovani v dokumentaci sablon.

kravčo
Člen | 721
+
0
-

grivaldu napsal(a):

To s tebou nesouhlasim, aplikace muze vratit Content-Type v response absolutne nezavisle na tom, co je napsano v sablone.

Samozrejme že môže, ale je to správne?

… Sablona muze byt napr. uplne prazdna a presto muze aplikace rict, ze content, ktery vraci by mel byt XML, JSON ci cokoliv jineho.

Ktorá rozumná web aplikácia vracia prázdny výstup? (vygenerovaný šablónou)

… Primarne by aplikace mela rikat, co bude vystupem, nikoliv az sablona urcena k formatovani vystupu.

Predsa práve šablóna hovorí o tom, ako bude výstup formátovaný (aj v akom jazyku), tak kto to môže vedieť lepšie?

Máme view Articles:recent = odkaz na najnovšie články a šablóna je napísaná v HTML. Raz sa rozhodneme spraviť z toho feed. Všetko čo by malo byť treba zmeniť je šablóna – je to len iný formát výstupu, a žiadny zásah do aplikačnej logiky by nemal byť potrebný (a nemyslím si že zásahy do aplikačnej logiky sú vždy zlo). Z hľadiska UX to síce nie je najlepšie riešenie, ale táto zmena sa nemá prečo týkať iných častí ako šablóny (vrátane text/htmlapplication/rss+xml)

Koukas na to z pohledu HTML, nicmene v ramci Nette obsahem sablony nemusi byt vzdy vyhradne HTML. Rendering by dle meho nazoru nemel samovolne menit tebou vyprodukovany obsah do podoby o ktere si „mysli“, ze je spravna.

To si strelil vedľa…

Makro contentType bych tedy bral jako moznost pretizeni hodnoty v HttpResponse, nikoliv jako jeho nahradu. Je to imho mocny nastroj, ale z meho pohledu muze pusobit i hodne problemu.

Makro {contentType ct} nie je (a nechce byť) náhradou nastavenia Content-Type v HttpResponse. Ten má samozrejme podstatne širšie využitie a často so šablónami nijako nesúvisí. Makor je len spôsobom, ako na jednom mieste (v šablóne) nastaviť formu aj obsah výstupu.

Dovedu si predstavit HTML kodera, ktery si udela include na sablonu ve ktere nekdo predtim modifikoval Content-Type. Vysledek pak bude jiste uzasny. :-)

Makro {contentType ct} samozrejme dáva zmysel len na začiatku layoutu príp. hlavnej šablóny. Napísať blbosť sa dá vždy, z rovnakého dôvodu by sme mohli napríklad zakázať neescapovaný výstup.

Nerikam, ze je to takto spatne, jen to je z meho pohledu dost nepredvidatelne chovani a urcite by si to zaslouzilo varovani v dokumentaci sablon.

Myslím, že keby boli v dokumentácii všetky varovania tohto stupňa, ťažko by sa medzi nimi hľadala tá dokumentácia…

/// no offense plz

Elijen
Člen | 171
+
0
-

Dnes jsem na toto chování také narazil a přijde mi to dost magické a fuj. Proč by Latte mělo modifikovat výstup tam, kde není použíté žádné makro (nezávisle na Content-Type)?

Editoval Elijen (31. 1. 2012 23:28)