Cette idée est de Classic ASP Master Pages | Godless Code. J'ai transcrit le code en images sur cette page, j'ai un peu prolongé son exemple et j'ai aussi exploré les limites de cette technique.
L'idée est que chaque page n'a qu'une seule inclusion côté serveur (un appel <!--#include file="" -->
). L'inclusion unique est un fichier modèle principal, que vous pouvez nommer master.asp
. La page maître appelle des sous-programmes personnalisés sur chaque page à la place de chaque zone de contenu. Chaque page enfant définit ces sous-programmes avec Sub
, avec un contenu propre à cette page enfant.
master.asp
<!DOCTYPE html>
<html>
<head>
<title><% Title() %></title>
</head>
<body>
<% BodyContent() %>
</body>
</html>
aboutUs.asp
<!--#include file="master.asp" -->
<% Sub Title %> About Us <% End Sub %>
<% Sub BodyContent %>
<h1>About Us</h1>
<p>
We do things!
</p>
<% End Sub %>
qui se transforme en ce HTML lorsque vous visitez aboutUs.asp
sur un serveur IIS:
<!DOCTYPE html>
<html>
<head>
<title> About Us </title>
</head>
<body>
<h1>About Us</h1>
<p>
We do things!
</p>
</body>
</html>
Cependant, cette approche ne permet pas d'imbrication:
subtemplate.asp
<div class="innerLogo <% LogoSide() %>">
<% LogoImg() %>
</div>
template_user.asp
<!--#include file="master.asp" -->
<% Sub Title %> Our Logo <% End Sub %>
<% Sub BodyContent %>
<!--#include file="subtemplate.asp" -->
<% Sub LogoSide %> leftside <% End Sub %>
<% Sub LogoImg %>
<img src="img/about.png" alt="About" />
<% End Sub %>
<% End Sub %>
Cela ne fonctionnera pas, car imbriqués Sub
s sont une erreur de syntaxe:
Microsoft VBScript compilation error '800a03ea'
Syntax error
/template_user.asp, line 9
Sub LogoSide
^
Depuis l'imbrication n'est pas autorisé, ce système de templating est, en effet, un solution unique. Si les sous-routines de vos pages individuelles deviennent trop lourdes, vous ne pouvez plus utiliser cette technique. Donc, lorsque vous utilisez cette technique, vous devez choisir avec soin l'emplacement de votre ensemble de modèles afin de fournir le meilleur équilibre entre flexibilité et DRY.
Ce n'est pas tout à fait clair mais est-ce conditionnel que vous êtes après? Parce que ce n'est pas vraiment possible '<% Si vrai Alors%><%Else%><%End If%>' – Filburt
Sensationnel. Je suis venu ici pour savoir où se trouvait le code magique sur la page ASP classique sur laquelle je travaille et qui comprend un en-tête. Je n'ai pas réalisé que les '" comments "étaient en fait des directives./Facepalm. Microsoft remporte une fois de plus le prix du "concept de code le plus bête" ... –