workershop hat geschrieben:{if $category.ID >0 and not 511 and not 515 and not 513 and not 516 and not 517 and not 518 and not 522 and not 523 and not 617 and not 659}
{include file="test.html"} {/if}
Keine Ahnung, was das für eine Sprache ist, aber üblicherweise hat and einen geringeren Bindungswert als > und not. Vielleicht wird es farblich etwas deutlicher, wie der Parser Deine Kette aufdröselt:
$category.ID > 0 and
not 511 and
not 515
Die roten Teile werden (theoretisch) zuerst ausgewertet und erst dann deren Ergebnisse mit Und verkettet (praktisch bricht Und beim ersten Boolschen Falsch ab, denn ist ein Teil falsch, ist der gesamte Und-Ausdruck falsch und weitere Prüfungen erübrigen sich). Das Ergebnis von "not 511" ist, mal abgesehen davon, dass das so keinen Sinn macht, falsch (false); gleiches gilt bei Deinen anderen "not [Zahl]", lediglich "not 0" ergäbe wahr (true).
Der Punkt ist, dass
Nicht (not) üblicherweise kein Vergleichsoperator ist, sondern den Inhalt seines nachfolgenden Parameters, wenn es sich um einen Boolschen Wert handelt, ins Gegenteil umkehrt, aus falsch wird wahr, aus wahr wird falsch. Möchtest Du zwei Werte vergleichen, brauchst Du den Operator für "ungleich", mathematisch ≠ (durchgestrichenes Gleichheitszeichen), in Programmiersprachen häufig != ("nicht gleich") geschrieben, manchmal auch #.
Die Zeile würde nach der ersten Auflösung daher immer so aussehen:
[Ergebnis von id > 0] and
false and
false
Ich denke, es sollte ab hier klar sein, was rauskommt.
Damit Deine Anweisung wie gewünscht funktioniert, musst Du Deinen Wunsch etwas genauer formulieren: "ist die Kategorie größer als 0 und ist die Kategorie ungleich 511 und ist die Kategorie ungleich 515" etc.