Peter Tübben: Bedingtes Include

Hallo Leute,

ich möchte in Abhängigkeit einer Session-Variable eine Datei 'includen'. Leider funktioniert das nachfolgende Konstrukt nicht, da der Server beide Dateien gleichzeitig einbindet:

<%If Session("Sprache")="Deutsch" Then
  <!--#Include File="ger.inc"-->
Else
  <!--#Include File="eng.inc"-->
End If%>

Gibt es noch eine andere Möglichkeit?

Danke & Grüße ... Peter

  1. Hallo Leute,

    ich möchte in Abhängigkeit einer Session-Variable eine Datei 'includen'. Leider funktioniert das nachfolgende Konstrukt nicht, da der Server beide Dateien gleichzeitig einbindet:

    <%If Session("Sprache")="Deutsch" Then
      <!--#Include File="ger.inc"-->
    Else
      <!--#Include File="eng.inc"-->
    End If%>

    Gibt es noch eine andere Möglichkeit?

    Danke & Grüße ... Peter

    Hallo,

    da #include kein ASP-Tag ist, darf er auch nicht im ASP-Code stehen. Probiers mal so:

    <%If Session("Sprache")="Deutsch" Then%>
    <!--#Include File="ger.inc"-->
    <%Else%>
    <!--#Include File="eng.inc"-->
    <%End If%>

    Eine weitere Möglichkeit ist die Fallunterscheidung mit Select Case ...

    <%
    Select Case Session("Sprache")
        Case "Deutsch":%><!--#include file="ger.inc" //--><%
        Case Else:%><!--#include file="eng.inc" //--><%
    End Select
    %>

    Tschau, Stefan

    http://www.asp-database.de

    1. Tach Stefan,

      da #include kein ASP-Tag ist, darf er auch
      nicht im ASP-Code stehen. Probiers mal so: [...]

      ja, sorry, war auch so gemeint (hatte ich nur falsch aus dem Kopf abgetippt). Es klappt aber trotzdem nicht, da der Server ZUERST die Includes ausführt, und sich dann den ASP-Code anschaut. Das Ergebnis ist dann, daß beide Includes geladen werden.

      Beispielweise funktioniert das auch nicht:

      <%Session("Extension")="ger"%>
      <!--#Include File="datei.<%=Session("Extension")%>"-->

      Danke für Deine Mühe & Grüße ... Peter

      1. ja, sorry, war auch so gemeint (hatte ich nur falsch aus dem Kopf abgetippt). Es klappt aber trotzdem nicht, da der Server ZUERST die Includes ausführt, und sich dann den ASP-Code anschaut. Das Ergebnis ist dann, daß beide Includes geladen werden.

        Hallo,

        ich weiß ja nicht, auf welchem Webserver Du entwickelst, aber PWS und IIS haben mit der beschriebenen Methode absolut keine Probleme.
        Siehe "Select Case ..." Statement.

        Beispielweise funktioniert das auch nicht:

        <%Session("Extension")="ger"%>
        <!--#Include File="datei.<%=Session("Extension")%>"-->

        Das kann nicht funktionieren, da der String für die Datei immer feststehen muß (Keine dynamische Zuweisung von Dateien oder Teilen davon). Sonst würde ja <!--#include file="<%=Dateinameundendung%>" //--> auch funktionieren.

        Auf jeden Fall habe ich meine Includes wie oben beschrieben eingebunden und das funzt einwandfrei.

        Schick mir doch mal den Quelltext der ASP-Datei und der Include-Dateien per Mail zu. Vielleicht hat isch irgendwo der Fehlerteufel eingeschlichen.

        Tschau, Stefan

        1. Hallo Stefan,

          ich weiß ja nicht, auf welchem Webserver Du
          entwickelst, aber PWS und IIS haben mit der
          beschriebenen Methode absolut keine Probleme.

          wir entwickeln auf dem IIS. Leider funktioniert es bei uns nicht. Gibt es beim IIS eine besondere Einstellung, damit er diese Anweisung akzeptiert?

          Schick mir doch mal den Quelltext der ASP-Datei
          und der Include-Dateien per Mail zu. Vielleicht
          hat isch irgendwo der Fehlerteufel eingeschlichen.

          --- Das steht in der ASP-Datei: ---

          <%Session("LANG")="GER"

          If Session("LANG")="GER" Then%>
          <!--#Include File="start.de"-->
          <%Else%>
          <!--#Include File="start.en"-->
          <%End If%>

          --- Ende ---

          --- Das steht in der start.de: --
          <%
          Const Hallo = "Hallo"
          %>
          --- Ende ---

          --- Das steht in der start.en: --
          <%
          Const Hallo = "Hello"
          %>
          --- Ende ---

          --- Die Fehlermeldung lautet: ---

          Microsoft VBScript compilation error '800a0411'

          Name redefined

          /pcssupp/system/stamm/ppp/start.en, line 3

          Const Hallo = "hello"

          --- Ende ---

          Danke für Deine Mühe & Grüße ... Peter

          1. Nochmal Hallo Stefan,

            ich weiß ja nicht, auf welchem Webserver Du
            entwickelst, aber PWS und IIS haben mit der
            beschriebenen Methode absolut keine Probleme.

            folgendes habe ich auf der MSDN-Seite (http://msdn.microsoft.com/library/sdkdoc/iisref/iiwainc.htm) gefunden:

            --- zipppp ---

            <!--  This script will fail -->
            <% name=(header1 & ".inc") %>
            <!-- #include file="<%= name %>" -->

            --- zapppp ---

            somit ist es wohl offiziell...

            Grüße ... Peter

            1. Hallo Peter

              somit ist es wohl offiziell...

              Stimmt, steht uebrigens auch in der Hilfe vom IIS. Tja, SSI und ASP-Code darf eben nicht so gemischt werden. Wo SSI ist, muss ASP erst beendet sein, als ein %> vorher stehen. Hast Du ja dann auch gemacht, indem DU das IF und ELSE und END IF jeweils in eigene ASP-Abschnitte gesteckt hast. Nur wegen Deines speziellen Codes trat dann eben ein anderer Fehler auf. So sieht der Code nach dem Ausfuehren der Includes aus:

              <%Session("LANG")="GER"

              If Session("LANG")="GER" Then%>
                  <%
                  Const Hallo = "Hallo"
                  %>
                  <%Else%>
                  <%
                  Const Hallo = "Hello"
                  %>
                  <%End If%>

              oder weiter aufgeloest:

              <%
                  Session("LANG")="GER"

              If Session("LANG")="GER" Then
                      Const Hallo = "Hallo"
                  Else
                      Const Hallo = "Hello"
                  End If
                  %>

              Tja, steht leider zweimal Const auf denselben Bezeichner drin. Das ist, wie die Fehlermeldung ganz richtig sagt, eine (unzulaessige) Redefinition eines Bezeichners. (WOW! Eine aussagekraeftige Fehlermeldung von MS!) Dir wird nichts anderes Ueberigbleiben, als die Sache so ungefaehr zu machen:

              <%
                  Session("LANG")="GER"
                  dim Hallo

              If Session("LANG")="GER" Then
                      Hallo = "Hallo"
                  Else
                      Hallo = "Hello"
                  End If
                  %>

              oder, wenn Du unbedingt das Const drin haben willst:

              <%
                  const Hallo_de = "Hallo"
                  const Hallo_en = "Hello"
                  dim Hallo
                  
                  Session("LANG")="GER"

              If Session("LANG")="GER" Then
                      Hallo = Hallo_de
                  Else
                      Hallo = Hallo_en
                  End If
                  %>

              Die Sachen innerhalb der If-Verzweigung natuerlich wieder schoen auf die Include-Dateien verteilen

              Calocybe

              1. Hallo Calocybe,

                Tja, SSI und ASP-Code darf eben nicht so
                gemischt werden.[...]

                schade :-(

                Nur wegen Deines speziellen Codes trat
                dann eben ein anderer Fehler auf.

                eben dieser spezielle Code verdeutlicht, daß das bedingte Include entgegen den Aussagen von Stefan NICHT funktioniert.

                Dir wird nichts anderes Ueberigbleiben,
                als die Sache so ungefaehr zu machen: [...]

                ja, und gerade das wollte ich vermeiden. Naja, dann werde ich wohl in den sauren Apfel beissen müssen.

                Vielen Dank für Deine Hilfe!

                Grüße ... Peter