Jauko:
Over:
<se type="replace" search="[0-9]" replace="" useregexp="yes">
<se
type="xlinks"
parent="{translationParam(1)}"
Header="<table>"
Format="<tr><td><td width='40px'>%ctspecificbit3%</td></tr>"
Footer="</table>"
/>
</se>
Geen idee wat dit doet, maar afhankelijk van de situatie wordt eerst de buitenste of anders de binnenste macro als eerste uitgevoerd. Uiteraard kan dit een heel verschillend resultaat opleveren.
Waarom vervang je alle getallen door niks? Wordt "width='40px'" dan niet ook "width='px'"?
En de huidige format maakt alleen maar een tabel met 1 kolom met daarin per record of 0 of 1. Maar aangezien jij 0-9 vervangt door niks maak je een lege tabel?
Dus naar mijn idee doet dit iets raars, en komt ook niet overeen met je eerdere voorbeeld. Lijkt net alsof je om het eerder probleem met die ctspecificbit3 en een replace van 0 door niks hebt proberen te omzeilen door dan maar 2 tabellen uit te voeren.
Dan de volgende:
<se type="SQLquery">
<parameters>
<sql>
<![CDATA[
select ctspecificvar1 kortetitel, description prijs, decode
(ctspecificbit3,0,'1px',1,'
vegetarisch') vegetarisch
from vwactive_tra
where parent={translationParam(1)}
and description is not null
]]>
</sql>
<header><![CDATA[<table>]]></header>
<format>
<![CDATA[<tr><td><img src="images2008/nieuws/itembullet.gif"></td><td
width="125">%Kortetitel%</td><td width="40px"><img src="images2008/
menu/%vegetarisch%.gif" width="20px" title="Vegetarisch gerecht"></
td><td>€ %prijs%</td></tr>]]>
</format>
<footer><![CDATA[</table>]]></footer>
<norecords>Er staat vandaag niets op het menu</norecords>
</parameters>
</se>
Hier heb je een query geschreven. Dat was al je oplossing voor het probleem met ctspecificbit3 waar je 0 door niks wil vervangen.
Dit is al vele malen beter dan je eerdere voorbeeld:
<se
type="xlinks"
parent="{translationParam(1)}"
Header="<table>"
Format="<tr><td><img src='images2008/nieuws/
itembullet.gif'></td><td
width='200'>%ctspecificvar1%</td><td width='40px'>%ctspecificbit3%</
td><td>€ %description%</td></tr>"
Footer="</table>"
norecords="Er staat vandaag (nog) niets op het menu"
replacedata="1:=<img src='images2008/menu/vegetarisch.gif'
width='20px' title='Vegetarisch gerecht'>"
replacedata="0:= "
/>
/>
Alleen al door het gebruik van xml syntax en een eigen query is dit beter. Ook kunnen 2 replacedata parameters eigenlijk niet. Je kan in 1 replacedata meerdere replaces opgeven door deze standaard te scheiden met een puntkomma(;). Maar je kan ook een eigen karakter hiervoor opgeven met de parameter "replaceseparator".
De "1px.gif" is niet echt een oplossing. Deze wordt namelijk nog steeds 20px breed in een kolom van 40px. Dus als iemand daar met zijn muis overheen gaat verschijnt in de meeste browsers nog steeds de title-tekst "vegetarisch gerecht" ook al lijkt het voor de bezoeker alsof die over een leeg stukje van het scherm beweegt. Daarnaast als iemand de pagina zou laten voorlezen dan is alles dus een vegetarisch gerecht.
Wat je echter in het eerdere voorbeeld wel goed probeerde is om de 1 van ctspecificbit3 in zijn geheel door een img tag te vervangen.
Overigens geld voor img tags dat je de alt-tekst in het attribuut "alt" zet ipv "title". Het attribuut "title" is gereserveerd voor de tag <A> (linkjes dus).
Ook is het niet handig om de vormgeving van een table in de html op te lossen. Handiger is waarschijnlijk dit in CSS op te lossen.
Het gebruik van variabelen in een query is niet veilig ivm SQL-Injection (zie google) zoals je doet met: "where parent={translationParam(1)}". Hiervoor dien je SQLParams te gebruiken.
Alles bij elkaar zou ik dan van jouw voorbeelden onderstaande voorbeelden maken:
<se type="SQLquery" error="Excuus er ging iets fout: {error}">
<parameters>
<sql>
<![CDATA[
select ctspecificvar1 kortetitel, description prijs
, decode
(ctspecificbit3,
0,'',
1,'<img src="images2008/menu/vegetarisch.gif" alt="Vegetarisch gerecht">'
) vegetarisch
from vwactive_tra
where parent = ?
and description is not null
]]>
</sql>
<sqlparams>long:{translationParam(1)}</sqlparams>
<header>
<![CDATA[<table id="KantineMenu">
]]>
</header>
<format>
<![CDATA[ <tr><td>%Kortetitel%</td><td>%vegetarisch%</td><td>€ %prijs%</td></tr>
]]>
</format>
<footer>
<![CDATA[</table>
]]>
</footer>
<norecords>Er staat vandaag niets op het menu</norecords>
</parameters>
</se>
Met behulp van CSS zou ik dan de opmaak regelen van de tabel.
De itembullet.gif kan namelijk als achtergrondje non-repeatable in de eerste kolom of de TR geplaatst worden die dan een padding krijgt om de inhoud van de cel iets op te schuiven om deze niet over de achtergrond heen te laten komen. Ik heb CSS niet zo goed paraat dus laat de vormgeving even door een html/css specialist controleren.
Maar eigenlijk heeft een tabel geen opsommingstekens als itembullet.gif nodig. Dat hoort thuis in opsommingslijstjes want in tabellen hoor je de TRs en eventueel celborders te bruiken voor het row verschil.
Tip voor de toekomst: gebruik geen CTSpeficbit om aan te geven of iets vegetarisch is. Aan te raden is een een duallist te gebruiken "Dieet gerecht" met de opties: vegetarisch, geen varkensvlees, biologisch, veganistisch, zoutloos, gluten vrij, lactose vrij etc.
Succes!
Groeten,
Johan