Questions & Answers

Packianathan
I'm new here

Arbeiten mit zwei Tabellen

Ich habe zwei Tabellen. In der einen sind die US-Bundesstaaten hinterlegt und in der anderen die dazugehรถrigen Adressen (1 zu N Beziehung).

Ich habe auch eine Abfrage eingebaut. In den Vorschau funktioniert die EInschrรคnkung der Daten weil ich auch eine Regel anwende .

Formular Syntax:

<CMS_INPUT_COMBOBOX name="st_name" sortOrder="ascending" useLanguages="no">

        <CMS_INCLUDE_OPTIONS type="database">

          <LABELS>

            <LABEL lang="*">#item.name</LABEL>

          </LABELS>

          <TABLE>helukabel_cms_schema.us_state</TABLE>

        </CMS_INCLUDE_OPTIONS>

        <LANGINFOS>

          <LANGINFO lang="*" label="State"/>

        </LANGINFOS>

      </CMS_INPUT_COMBOBOX>

      <CMS_INPUT_COMBOBOX name="st_address" sortOrder="ascending" useLanguages="no">

        <CMS_INCLUDE_OPTIONS type="database">

          <LABELS>

            <LABEL lang="*">#item.fs_id</LABEL>

          </LABELS>

          <QUERY name="helukabel_cms_schema.us_state2location">

            <PARAM name="id">1</PARAM>

          </QUERY>

          <TABLE>helukabel_cms_schema.location_us_state</TABLE>

        </CMS_INCLUDE_OPTIONS>

        <LANGINFOS>

          <LANGINFO lang="*" label="State"/>

        </LANGINFOS>

      </CMS_INPUT_COMBOBOX>

Regel:

<ON_EVENT>

        <WITH>

            <PROPERTY source="st_name" name="VALUE" />

        </WITH>

        <DO>

            <PROPERTY source="st_address" name="query.id" />

        </DO>

    </ON_EVENT>

In der HTML Ausgabe kriege ich es nicht hin. In Abhรคngigkeit des Auswahls der ersten Tabelleninfos die dazugehรถrige Daten aus der zweiten Tabelle auszugeben.

Die Varainte fรผr jede Option von der Tabelle1  eine eigene Abfrage mit dem entsprechenden Parameter zu hinterlegen, wรผrde ich gerne vermeiden.

Ist mein Anliegen mรถglich ?

0 Kudos
11 Replies
Peter_Jodeleit
Crownpeak employee

Wenn zwischen den beiden Tabellen eine Fremdschlรผsselbeziehung liegt, dann einfach der Beziehung รผber das Objektmodell folgen.

Peter
0 Kudos

Was meinen Sie hier genau ? Ein Beispiel hierzu wรคre nicht schlecht.

0 Kudos

Im mitgelieferten Demo-Projekt ("Mithras Energy") gibt es einige Beispiele dazu. Z.B. bei den Produkten.

Peter
0 Kudos

leider ist bei uns Mithras Projekt nicht installiert. Da wir schon zwei Projekte haben ist das einspielen weiterhin nicht mรถglich. Gibt es eine Mรถglichkeit auf die Daten zuzugreifen ?

0 Kudos

Du kannst dir einen lokalen Server aufsetzen, zum Ausprobieren sollte das reichen.

Noch mal zu dem "Problem". Ich postuliere mal, die Tabellen heiรŸen "address" und "state" und die Fremdschlรผsselbeziehung in Adresse heiรŸt ebenfalls "state". Wenn du dann ein Objekt x aus der Tabelle "state" hast, bekommst du mit x.getValue("state") ein Objekt aus der Tabelle "state" (oder "null", wenn die Fremdschlรผsselbeziehung nicht gesetzt ist.

Peter
0 Kudos

Anbei รœbersicht der beiden Datenbank Tabellen.

Ich habe auch vergessen mein HTML Code mitzuteilen.

<CMS_FUNCTION name="contentSelect" resultname="cs_us_state">

    <CMS_PARAM name="schema" value="helukabel_cms_schema" />

    <QUERY entityType="us_state">

        <ORDER>

            <ORDERCRITERIA attribute="name" ascending="1" />

        </ORDER>

    </QUERY>

</CMS_FUNCTION>

   <select name="us-select" id="us-select" >

      <option value="choose">$CMS_VALUE(#global.gca("languagedependantcontent").getData().get("pt_contact_please_choose").getEditor().get(#global.language))$ ...</option>

        $CMS_FOR(state,cs_us_state)$

        <option value="$CMS_VALUE(state.fs_id)$">$CMS_VALUE(state.name)$</option>

      $CMS_END_FOR$

    </select>

Datenbank.jpg

Wie erhalte ich die Daten von der zweiten Tabelle ? Muss ich ein CMS_FUNCTION fรผr die zweite Tabelle machen ? Aus deinem Hinweis Text werdeich nicht schlau !

0 Kudos

Ich werde aus deiner Frage nicht schlau Smiley Wink

Was ist fรผr dich die "zweite Tabelle"?

Wenn das Element aus der Tabelle "location_us_state" stammt, kommst du รผber das Attribut "us_state" an das Element aus der Tabelle "us_state":

     $CMS_VALUE(location.us_state.name)$

Umgekehrt hast du eine Liste, รผber welche du iterieren kannst:

   $CMS_FOR(location, state.location_us_stateList)$

        Location: $CMS_VALUE(location.web)$

   $CMS_END_FOR$

Peter
0 Kudos

Ich will die Adress Daten aus der Tabelle location_us_state ausgeben, in Abhรคngigkeit was in der Tabelle us_State (Eingrichtet als Combobox) ausgewรคhlt wurde.

Ich habe versucht dein Code zu benutzen. Aber es werden keine Daten im HTML ausgegeben.

Hier nochmal mein HTML Code

<CMS_HEADER>

<CMS_FUNCTION name="contentSelect" resultname="cs_us_state">

    <CMS_PARAM name="schema" value="helukabel_cms_schema" />

    <QUERY entityType="us_state">

        <ORDER>

            <ORDERCRITERIA attribute="name" ascending="1" />

        </ORDER>

    </QUERY>

</CMS_FUNCTION>

</CMS_HEADER>

<div id="worldmap" class="world"$CMS_VALUE(editorId())$>

    <select name="us-select" id="us-select" >

      <option value="choose">$CMS_VALUE(#global.gca("languagedependantcontent").getData().get("pt_contact_please_choose").getEditor().get(#global.language))$ ...</option>

        $CMS_FOR(state,cs_us_state)$

        <option value="$CMS_VALUE(state.fs_id)$">$CMS_VALUE(state.name)$</option>

      $CMS_END_FOR$

    </select>

  $CMS_VALUE(state.location_us_stateList)$

  $CMS_FOR(location, state.location_us_stateList)$

        Location: $CMS_VALUE(location.address)$

  $CMS_END_FOR$

   

$--                   

    $CMS_FOR(location_us_state,cs_location_us_state)$

        $CMS_IF(location_us_state.us_state.fs_id == sv_activeStateId)$

            <div class="country-contact">

                <div class="address">

                    $CMS_VALUE(location_us_state.address)$

                </div>

                $CMS_IF(location_us_state.phone.isEmpty && location_us_state.fax.isEmpty)$

                $CMS_ELSE$

                    <div class="phone">

                        $CMS_IF(!location_us_state.phone.isEmpty)$

                            <p>Tel $CMS_VALUE(location_us_state.phone)$</p>

                        $CMS_END_IF$

                        $CMS_IF(!location_us_state.fax.isEmpty)$

                            <p>Fax $CMS_VALUE(location_us_state.fax)$</p>

                        $CMS_END_IF$

                    </div>

                $CMS_END_IF$

                $CMS_IF(location_us_state.email.isEmpty && location_us_state.web.isEmpty)$

                $CMS_ELSE$

                    <div class="online">

                            $CMS_IF(!location_us_state.email.isEmpty)$

                                <p>E-Mail: <a href="mailto:$CMS_VALUE(location_us_state.email)$" class="wm-mailto">$CMS_VALUE(location_us_state.email)$</a></p>

                            $CMS_END_IF$

                            $CMS_IF(!location_us_state.web.isEmpty)$

                                <p>Internet: <a href="$CMS_IF(!location_us_state.web.contains("://"))$http://$CMS_END_IF$$CMS_VALUE(location_us_state.web)$" target="_blank" class="wm-web">$CMS_VALUE(location_us_state.web)$</a></p>

                            $CMS_END_IF$

                    </div>

            </div>

        $CMS_END_IF$

    $CMS_END_FOR$

    --$

</div>

Was mache ich hier falsch ?

Die Anzeige sollte dynamisch sein. Wenn in Combobox ein andere US Staat ausgewรคhlt wurde, sollte auch die dazugehรถrige Adresse in der HTML Ausgabe erfolgen.

0 Kudos

Du hast jetzt eine Datenbankabfrage รผber alle "location_us_state" Eintrรคge gebaut. Wenn da in der Schleife nichts ausgegeben wird, wird die Schleife wohl nicht durchlaufen. Gibt es denn Eintrรคge in der Tabelle?

Peter
0 Kudos

Type a product name