Probleem met tabeltitel op vervolgpagina

Status
Niet open voor verdere reacties.

leifoet

Gebruiker
Lid geworden
7 okt 2007
Berichten
326
Zoek de mogelijkheid om de inhoud van een tabeltitel (th) op een vervolgpagina voorwaardelijk te maken.

Bijvoorbeeld
<table>
<tr><th>ABC<th><tr>
<tr><td>….
Bovenaan de tabel komt bijgevolg als titel : ABC zowel op de eerste pagina als op de eventuele vervolgpagina('s)
Stel dat de titel op de vervolgpagina verschillend moet zijn : dus bijvoorbeeld XYZ (in plaats van ABC)
Kan dat ? met IF ? of gesofisticeerder ?

Dank voor tips.
 
Laatst bewerkt:
Dat kan je met een if'je doen.
Maar een exact voorbeeld kan ik niet geven gezien ik niet weet hoe de voorwaarde bepaald wordt.
 
op de eerste pagina als op de eventuele vervolgpagina('s)
Bedoel je de tabelkop van een grote tabel op een printer afdrukken (meerdere pagina's) of bedoel je de tabelkop op een andere html pagina tonen?
Wil je dit doen in de backend met php of in de frontend met Javascript?
 
Als het gaat om een printer dan moet Javascript worden gebruikt. Er is echter een probleem, Javascript kan niet achterhalen welke randapparatuur wordt gebruikt en weet dus niet welke printer er is (in de meeste gevallen A4) maar belangrijker nog, hoeveel niet-printbare marge heeft de printer waardoor tabellen kunnen "breken".
De "@media print" styling van Bootstrap 3 en 4 heb ik samengevoegd en dan krijg je onderstaande css, misschien kan je hiermee iets proberen.
Code:
@media print {
  * {
    text-shadow: none !important;
    box-shadow: none !important;
  }
  a, a:visited {
    text-decoration: underline;
  }
  table {
    border-collapse: collapse !important;
  }
  thead {
    display: table-header-group;
  }
  tr, img {
    page-break-inside: avoid;
  }
  img {
    max-width: 100% !important;
  }
  h2, h3, p {
    orphans: 3;
    widows: 3;
  }
  h2, h3 {
    page-break-after: avoid;
  }
  /* hieronder @page en body eventueel aanpassen */
  @page {
    size: a3;
  }
  body {
    min-width: 992px !important;
  }
}

Suc6. Have fun.
 
In de context van mijn vraag sub #1 situeer ik deze Javascript-code niet onmiddellijk.

Actueel krijg ik een lange tabel (met HTML) perfect gespitst en afgedrukt (op de printer) met op elke pagina de tabeltitel(s).
Mijn probleem is : hoe kan ik een tabeltitel (tabelkoptekst) als bijvoorbeeld ABC vanaf de 2de pagina wijzigen in XYZ ?
Ik dacht in de richting van een soort IF-clausule die een splitsing kan detecteren:
<table>
<tr><th>ABC<th><tr>
<%If page-break=true then%>
<tr><td>XYZ<th><tr>
<%else
end if%>

Kan dat werkbaar worden ?
 
Support voor MS IIS is altijd lastig.

Info van Microsoft : "... Een van de algemene VB of VBA-functies die in VBScript (VBS) voor Active Server Pages (ASP) is weggelaten is de 'Direct als' ofwel functie IIf() . …"
Kan je met dit voorbeeld (klik) verder?
 
In plaats van een oplossing op de webserver (backend) kan je het misschien in de browser (frontend) oplossen. Als voorbeeld deze tabel
Code:
<table id="mijntabel">
  <tr><th>ABC</th></tr>
  <tr><td>TR2</td></tr> <!--1e TD op 2e TR regel-->
  <tr><td>TR3</td></tr>
  <tr><td>ABC</td></tr> <!--4e TR regel-->
  <tr><td>TR5</td></tr>
  <tr><td>TR6</td></tr>
</table>

1) dynamisch : script kijkt naar de tekst in TD en verandert deze bij IF voorwaarde
Code:
<script type="text/javascript">
const Tds = document.getElementById("mijntabel").querySelectorAll("td");
Tds.forEach(function (Td) {
  if (Td.innerHTML == "ABC") Td.innerHTML = "XYZ";
});
</script>

2) statisch : script telt de TR regels en wijzigt de TD-tekst in de Ne TR regel
Code:
<script type="text/javascript">
const TrKopRegel = 4;
const Trs = document.getElementById("mijntabel").querySelectorAll("tr");
var i;
for (i = 0; i < Trs.length; i++) {
  if (i == TrKopRegel - 1) Trs[i].firstChild.innerHTML = "XYZ";
}
</script>
 
Omdat de IFF-code op het eerste gezicht toepasselijk leek (!), heb ik geprobeerd om de code van het voorbeeld sub #7 te implementeren in onderstaande test : het afdrukken van een tabel bestaande uit meerdere A-4 pagina's.
Bedoeling van de test is op de eerste pagina 'Naam' als titel te zien en op alle volgende: 'nieuweNaam'. Helaas verschijnt 'Naam' op alle pagina's.
Zeer vermoedelijk is mijn formulering van de 'voorwaarde' (pagebreak) niet conform ? (of moeten in de Function ook aanpassingen gebeuren ?
Dank voor tips.


<% @LANGUAGE="VBSCRIPT" %>
<% Function IIf(i,j,k)
If i Then IIf = j Else IIf = k
End Function
%>

<html>
<head></head>
<body>
<table border="1">
<thead>
<tr height="1">
<th width="25" align="right"><b><i>Nr.</i></b></td>
<th width="100" align="left"><b><i>

<%Response.Write IIf(Page-Break-after=true, "nieuweNaam", "Naam") %> </b></td>

<th width="70" align="left"><b><i>&nbsp;&nbsp;Datum</i></b></td>
</tr>
</thead>
 
Laatst bewerkt:
<%Response.Write IIf(Page-Break-after=true, "nieuweNaam", "Naam") %>
Een css eigenschappen (bijv. page-break-after) kan je niet op deze manier gebruiken. Dit kan wel:
Code:
<body id="page">
...
<script>
var page = document.getElementById("page");
if (page.style.pageBreakAfter == "always") {
  alert("De waarde is always");
}
</script>
</body>
 
Ben een beetje in de war met de sub #10 vermelde CSS-eigenschappen.
Ik zocht (testte) in de IIF-code sub #9 de correcte formulering voor de IIF-voorwaarde (condition) - mijn laatste (foutieve) poging was : Page-Break-after=true.
Met de CSS-code kom ik er (nog) niet tenzij ik ze verkeerd toepas (ingevoegd in de body voor de IIF-code) ?

Dank bijgevolg voor (nog steeds) bruikbare (test)tips voor een correcte page-break-formulering voor de IFF-condition ?
 
Laatst bewerkt:
In het kort:
ASP wordt op de IIS server uitgevoerd en kan een pagina naar de browser sturen.
HTML, CSS en Javascript worden in de browser uitgevoerd.
HTML en CSS kunnen niets naar de IIS server sturen.
Javascript kan wel iets naar de server sturen, het antwoord van de server wordt in Javascript verwerkt.

ASP Classic (of ASP.NET) pagina's worden op de IIS server gegenereerd, daarin kan je met VBS (of C#) de IFF (of bij C# de IF) gebruiken. Dit gebeurt dus op de server. Daarentegen wordt de html én css in de browser verwerkt t.b.v. de structuur/flow (html) en de opmaak (css). Het is niet mogelijk dat html of css in de browser een eigenschap naar de IIS server stuurt die dan in de IIS server met een IFF (of IF) wordt verwerkt.

Het kan wel met Javascript (zie #10) omdat Javascript in de browser wordt uitgevoerd, net als html en css.
Javascript heeft zoals je ziet in #10 ook een IF statement waarmee je conditioneel css eigenschappen kan opvragen of veranderen.

Het probleem voor jou is dat de server niet weet welke printer de persoon heeft die de pagina wil printen. Hiermee bedoel ik met name het printbare deel van een A4.
Om veiligheidsredenen weet de browser ook niet welke printer er is. Het enige wat de browser kan doen is een "page-break" in de pagina zetten en hopen dat het bij de printer goed gaat.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan