plamka
I'm new here

Daten aus einem schema auslesen

Jump to solution

Hi,

ich würde gerne Inhalte mehrmalls aus einem Schema auslesen und diese auf nur !!! einer Seite mit verschiedenen Navigationen ausgeben.

1. Es wird z.B. ein Schema mit Produkten erstellt.

2. Es wird eine neue Datenquelle angelegt

3. Es wird eine Vorlage erstellt, die alle Produkte mit einer bestimmten Kategorie und der dazugehörige Naviagtion ausließt.

Die auszulesenden Daten lassen sich im Daten Tab beim Anlegen des Sturkturknoten noch weiter eingrenzen. z.B. Kategorie ID.

Bis dahin alles wunderbar. Ein Beispiel findet ihr hier

http://mithrasenergy.com/content/de/products/productcategories.html

Ich würde gerne auf einer Seite zuerst die Produkte A auslesen (mit Navigation), dadrunter z.B. bischen Text ausgeben und dann die Produkte B auslesen. Geht das überhaupt??? Man kan die Absatzvorlagen beliebig kombinieren, es ist aber nicht möglich mehrfach eine Schema Absatzvorlage zu verwenden. Wie auch denn, wenn im Strukturknoten später für die ganze Seite der Filter für die Daten gesetzt wird.

Wie gehe ich am besten vor, oder habe ich etwas übersehen?

0 Kudos
1 Solution

Accepted Solutions
hoebbel
Crownpeak employee

Hallo Herr Zasada,

Seitengruppen und Ausgabe auf einer einzelnen Seite widerspricht sich aber Smiley Wink

Seitengruppen stellen "nur" eine Navigation zwischen einzelnen Seiten, die sich im selben Ordner befinden, zur Verfügung.

Was Sie wohl haben wollen ist eine Absatzvorlage, über die der Redakteur eine Liste von Projekten anhand der entsprechenden Kategorie auswählen kann.

Eine Lösungsmöglichkeit wäre eine Combobox, die automatisch alle gültigen Kategorien darstellt:

über CMS_INCLUDE_OPTIONS

User: FIRSTDoku

Pass: FSdown_V2

Die Produkte dann einfach über eine contentSelect Funktion ausgeben, die den Rückgabewert der Combobox als Einschränkung auf die Kategorie benutzt.

Viele Grüsse aus Dortmund,

  Holger Höbbel

View solution in original post

0 Kudos
10 Replies
hoebbel
Crownpeak employee

Hallo Herr Zasada,

Sie können Datenbankinhalte entweder über eine Tabellenvorlage oder über eine ContentSelect Funktion ausgeben.

Die wichtigsten Unterschiede zwischen diesen beiden Ausgabearten:

Tabellenvorlage

  • Die Ausgabe der Datensätze kann über mehrere Seiten gesplittet werden
  • Die Abfrage kann vom Redakteur leicht konfiguriert werden
  • Es ist nur eine Tabellenvorlage pro Seite zulässig

ContentSelect Funktion

  • Die Ausgabe der Datensätze erfolgt immer auf einer einzelnen Seite
  • Die Konfiguration der Funktion erfolgt im Template. Eine Konfiguration der Abfrage durch den Redakteur ist nur eingeschränkt möglich [Templateentwickler muss entsprechende Eingabekomponenten zur Verfügung stellen]
  • Es können beliebig viele Content Select Funktionen auf einer Seite verwendet werden

Sie können das Problem also einfach lösen, indem Sie die Produkte über entsprechende ContentSelect Funktionen ausgeben, sofern ich Sie richtig verstanden habe und Sie tatsächlich nur eine Seite ausgeben wollen.

Ansonsten besteht natürlich die Möglichkeit, mehrere Seiten mit Contentprojektionen (Ausgabe mittels Tabellenvorlagen) in einer Seitengruppe zusammenzufassen. Die Seitengruppe umfasst dann alle erzeuten Seiten - die Trennung entsprechender Navigationen ist aber dann etwas "kniffelig".

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos

Hallo Herr Höbbel,

ja, dass haben Sie schon richtig verstanden. Ihr Vorschlag mit den Seitengruppen hört sich gut an.

Gibt es zu den Seitengruppen und wie man diese einsetzt eine Doku?

Evtl. werde ich eine Navigation an der Stelle garnicht benötigen. Ich würde gerne auf einer Seite die neuesten Produkte zu X Kategorien ausgeben, wobei ich den Filter eben gerne pro Kategorie setzen würde (eine Navigation wird es somit an dieser Stelle wohl doch nicht geben).

Vielen Dank

0 Kudos
hoebbel
Crownpeak employee

Hallo Herr Zasada,

Seitengruppen und Ausgabe auf einer einzelnen Seite widerspricht sich aber Smiley Wink

Seitengruppen stellen "nur" eine Navigation zwischen einzelnen Seiten, die sich im selben Ordner befinden, zur Verfügung.

Was Sie wohl haben wollen ist eine Absatzvorlage, über die der Redakteur eine Liste von Projekten anhand der entsprechenden Kategorie auswählen kann.

Eine Lösungsmöglichkeit wäre eine Combobox, die automatisch alle gültigen Kategorien darstellt:

über CMS_INCLUDE_OPTIONS

User: FIRSTDoku

Pass: FSdown_V2

Die Produkte dann einfach über eine contentSelect Funktion ausgeben, die den Rückgabewert der Combobox als Einschränkung auf die Kategorie benutzt.

Viele Grüsse aus Dortmund,

  Holger Höbbel

0 Kudos

Vielen Dank,

Ich habe noch ein Frage.

Das Objekt CMS_INCLUDE_OPTIONS liefert als Rückgabewert einen String zurück.

Wenn ich den Paramter "st_productCategories" in meiner Query setze, wird der Wert anscheinend nicht richtig gesetzt.

Wenn ich ein Number Feld definiere und dieses in der FUNCTION setze, funktioniert alles einwandfrei.

Muss ich den Wert "st_productCategories" noch in einen Number Wert umwandeln und wenn ja, wie mache ich das ?

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

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

  <CMS_VALUE_PARAM name="category" value="st_productCategories" />

  <QUERY entityType="products">

   <FILTERPARAM parameter="category" datatype="java.lang.Integer" value="194"/>

     <EQ attribute="product_categoriesList.fs_id" parameter="category"/>

      <ORDERCRITERIA attribute="date" descending="0" />

  </QUERY>

</CMS_FUNCTION>

</CMS_HEADER>

Gruß und vielen Dank

David

0 Kudos
hoebbel
Crownpeak employee

Hallo David,

hier müsste ein toNumber ausreichend sein, also

<CMS_VALUE_PARAM name="category" value="st_productCategories.toNumber" />

Vorausgesetzt, Du bekommst tatsächlich den String mit der ID zurück.

Tipp: Mit $CMS_VALUE(st_productCategories + " / " + st_productCategories.class)$ bekommst Du den Rückgabewert und seien Klasse ausgegeben.

Weiterer Tipp: Es ist gut möglich, dass st_productCategories.toNumber ein long und kein interger zurückgibt. Dann einfach im Query den Parametertyp [datatype="java.lang.Long"] entsprechend anpassen Smiley Wink

Viele Grüsse aus Dortmund,

  Holger

0 Kudos

Die Methode toNumber liefert für den Typ CMS_INPUT_COMBOBOX keinen Wert zurück.

-------------------------------------------------------------------------------------------------------------

<CMS_INPUT_COMBOBOX name="st_productCategories" useLanguages="no">

    <CMS_INCLUDE_CONTENT type="entries" table="admProducts.product_categories">

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

    </CMS_INCLUDE_CONTENT>

    <LANGINFOS>

      <LANGINFO lang="DE" label="Kategorien"/>

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

    </LANGINFOS>

  </CMS_INPUT_COMBOBOX>

-------------------------------------------------------------------------------------------------------------

0 Kudos
hoebbel
Crownpeak employee

Das hier sollte klappen (wenn die ID des Datensatzes der kategory benötigt wird)

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

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

  <CMS_VALUE_PARAM name="category" value="st_productCategories.value.getId()" />

  <QUERY entityType="products">

   <FILTERPARAM parameter="category" datatype="java.lang.Integer" value="194"/>

     <EQ attribute="product_categoriesList.fs_id" parameter="category"/>

      <ORDERCRITERIA attribute="date" descending="0" />

  </QUERY>

</CMS_FUNCTION>

</CMS_HEADER>

Anmerkung: Es sollte anstelle von CMS_INCLUDE_CONTENT besser CMS_INCLUDE_OPTIONS verwendet werden.

Siehe auch Anmerkung ganz unten auf der Seite:

http://www.e-spirit.com/odfs42/de/vorlagenentwicklung/formular/cmsinclude/cms_include_options/option...

User: FIRSTDoku

Pass: FSdown_V2

0 Kudos

Super vielen Dank.

Jetzt gehts

0 Kudos

Hallo Herr Höbbel,

mir ist noch ein kleiner Fehler aufgefallen, dass das Sortieren der Datensätze nicht richtig funktioniert. Mit der Angabe     <ORDERCRITERIA attribute="date"  descending="0" /> werden alle Datensätze richtig aufsteigend nach dem Datum sortiert. Wenn ich die Sortierreihenfolge auf     <ORDERCRITERIA attribute="date"  descending="1" /> setze, werden die Daten willkürlich durcheinander sortiert, müssten aber absteigend sortiert werden. Ist dieses Problem schon bekannt oder mache ich etwas falsch?

Gibt es einen Workaround um meinen Result umzusortieren, z.B. revert des Results?

Schöne Grüße

David Zasada

0 Kudos