(Como prometido, minha opinião baseada na experiência.)
Primeiro de tudo, se você pode evitá-lo: não misture idiomas, sempre que possível.
Conforme o seu exemplo, parece que você está pensando principalmente sobre como isso deve ser feito em uma linguagem de modelagem misturada com HTML, que abordarei. (Outro caso seria construir o SQL usando outra linguagem de programação, o que exigiria regras completamente diferentes).
Como exemplo, falarei sobre o Django (mas PHP, Twig, etc) funcionam da mesma forma. O Django possui blocos lógicos nos modelos (abrir {% tag %}
, fechar {% endtag %}
). O HTML possui blocos lógicos (aberto <tag>
, fechado </tag>
). Aqui, eu principalmente sigo esta regra: incrementar após uma tag aberta, diminuir após uma tag de fechamento. Outra regra que mantenho: verifique se o conteúdo de um bloco Django é HTML bem formatado.
Conforme seu exemplo, na minha opinião, isso é muito errado:
<div>
IF FOO
<div someattribute>
ELSE
<div otherattribute>
END FOO
<p>content</p>
</div>
</div>
Por quê? Porque o conteúdo do IF
arquivo não é um HTML bem formatado. Como deve ser?
<div>
<div
IF FOO
someattribute
ELSE
otherattribute
END FOO
>
<p>Content</p>
</div>
</div>
(Como a linguagem do seu modelo não possui uma sintaxe agradável de analisar, precisamos das novas linhas. No Django, eu escreveria)
<div>
<div {% if foo %}someattribute{% else %}otherattribute{% endif %}>
<p>Content</p>
</div>
</div>
Como um benefício adicional, imagine que ele <div>
tenha 7 atributos, 1 dos quais é decidido com base em uma condição específica. Ou pior: e se tiver três atributos, cada um dos quais depende de uma condição. Isso daria 8 tags diferentes.
Tendo em mente a "regra" para manter o conteúdo de todos os blocos bem formatados nesse escopo, você não precisa se preocupar em quebrar o travessão de nenhum idioma.
Outro ponto que eu gostaria de abordar (embora ligeiramente fora de tópico): se as tags de abertura e fechamento estiverem em linhas diferentes, elas deverão ser a única tag nessa linha.
Errado:
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</i>
</ul>
Em vez disso, prefira
<ul>
<li>This is something <a href="http://programmers.stackexchange.com">Usefull</a></li>
</ul>
ou
<ul>
<li>
This is something <a href="http://programmers.stackexchange.com">Usefull</a>
</li>
</ul>
(Aviso: uso avançado): às vezes você tem várias tags de quebra automática, você pode (não deve) considerar isso como uma tag:
<ul>
<li><div id="something"><span class="like this">
Something like this
</span></div></li>
</ul>
No entanto, de preferência não misture idiomas (host / convidado) ao fazer isso. E de preferência não faça isso com for
loops. E não faça isso com.
TL; DR para sua pergunta específica.
- Você tem uma linguagem 'host' (por exemplo, Django templating) e 'guest' (por exemplo, HTML). Verifique se os blocos de idioma do host sempre contêm blocos de idioma do convidado formatados corretamente.
- A abertura de cada bloco deve incrementar o recuo, o fechamento de cada bloco deve estar alinhado com a abertura.
E a nota geral que devo acrescentar (como sempre): use seu próprio julgamento. Saiba quando se desviar.