> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# Importdatei prod.cfg

> Aufbau und Inhalt der Importdatei prod.cfg: Produktdatenfelder, Kategoriedaten und weitere Abschnitte, die WEBSALE V8s beim Produktdatenimport schreibt, sowie drei Praxisfälle zum Nachschlagen.

Die Importdatei `prod.cfg` ist die einzige Konfigurationsdatei des Shops, die Sie nicht schreiben, sondern nur lesen. WEBSALE V8s erzeugt sie automatisch bei jedem Produkt- und Kategoriedaten-Import. Sie hält fest, welche Produktdatenfelder der Shop kennt, welche Kategorien angelegt sind und wie beide konfiguriert sind.

Genau deshalb ist sie das wichtigste Nachschlagewerk, wenn Sie als Designer oder Partner keinen Zugriff auf das führende Warenwirtschaftssystem haben. Statt beim Shopbetreiber nachzufragen, welche Daten überhaupt ankommen, sehen Sie es hier direkt.

Sie finden die Datei im Online-Servicebereich (OSB) unter dem Service "Konfiguration", als lesbare Datei je Subshop.

> [!WARNING]
>
> Bearbeiten Sie die `prod.cfg` nicht von Hand. Der nächste Produktdatenimport überschreibt die Datei vollständig.
>
> Eine Ausnahme gibt es: Kategoriefelder, die Sie im TopRank-Manager zur manuellen Pflege freigegeben haben, führt der Import nach dem Schreiben wieder in die Datei zurück. Diese Felder stammen also nicht aus der Warenwirtschaft und überleben jeden Import. Welche das sind, legen Sie im TopRank-Manager fest.

Grundlagen: [Grundlagen zu Konfigurationen](https://dokumentation.websale.de/v8s/grundlagen-konfiguration/konfiguration-grundlagen.md) · Wegweiser: [Beschreibung einer Kategorie, Kategorie anzeigen](https://dokumentation.websale.de/v8s/kategorien/beschreibung-einer-kategorie.md)

Diese Seite erklärt den Aufbau der Datei und die Parameter, die der Shop daraus liest, nicht die inhaltliche Bedeutung der einzelnen Produktdatenfelder.

## Grundaufbau

Die `prod.cfg` ist aufgebaut wie die übrigen Konfigurationsdateien von WEBSALE V8s. Sie ist in Abschnitte unterteilt, die mit `<..>` geöffnet und mit `</..>` geschlossen werden, und jeder Abschnitt enthält Parameter in der Form `Name = Wert`.

Zwei Eigenheiten unterscheiden sie von den handgepflegten Konfigurationen:

Die gesamte Datei liegt in einer Klammer `<Prod>` bis `</Prod>`.

Die Kategoriedaten stehen immer am Ende. Beim Import entfernt WEBSALE V8s alles ab dem ersten `<Category>` und hängt die neu erzeugten Kategorieabschnitte an. Alles, was davor steht, bleibt also erhalten, alles danach wird ersetzt.

Diese Abschnitte kommen vor:

| Abschnitt | Inhalt |
| - | - |
| `Cfg` | Basisverzeichnisse und Standardbilder |
| `InventoryCfg` | Standardtexte und Reservierungszeit der Lagerbestandsanzeige |
| `DownloadCfg` | Standardwerte für Download-Produkte |
| `AttributeNames` | alle Produktdatenfelder, Standardfelder und freie Felder |
| `GlobalCategoryFilterCfg` | global gültige Filterkriterien für Kategorien |
| `AutoBasket` | Produkte, die automatisch in den Warenkorb gelegt werden |
| `Category` | ein Abschnitt je Kategorie |

Die übrigen fünf Abschnitte liest der Shop ebenfalls aus der \`prod.

## Produktdatenfelder: `AttributeNames`

Im Abschnitt `AttributeNames` stehen alle Produktdatenfelder des Shops, Standardfelder wie freie Felder.

> [!WARNING]
>
> Dieser Abschnitt ist zwingend erforderlich. Fehlt er, bricht der Shop mit einer Fehlermeldung ab.

### Standard-Produktdatenfelder

Jedes Standard-Produktdatenfeld hat seinen eigenen Abschnitt innerhalb von `AttributeNames`. Der Abschnittsname ist der interne Feldname und liegt fest, `FieldName` ist der nach außen sichtbare Name, unter dem Sie das Feld in Tags ansprechen.

Auszug für das Standardfeld `Name`, den Produktnamen:

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<AttributeNames>

   ...

   <Name>
      FieldName      = Name
      DisplayName    = Name
      DepVar         = yes
      Visible        = yes
      Search         = y
      SearchSuffix   = q1
      Order          = 1
      Sort           = VARCHAR
   </Name>

   ...

</AttributeNames>
```

| Parameter | Bedeutung |
| - | - |
| `FieldName` | der externe Feldname. Ihn verwenden Sie in Templates und Tags. Fehlt er, gilt der Abschnittsname |
| `DisplayName` | der Anzeigename, den der Shop beispielsweise über Filterkriterien ausgibt |
| `BaseDir` | Basisverzeichnis, wenn der Feldinhalt ein Dateiname ist |
| `Search` | ob das Feld durchsuchbar ist. `y` schaltet die Suche ein |
| `SearchSuffix` | das Suffix, unter dem das Feld im Suchindex liegt |
| `Sort` | ob das Feld sortierbar ist, und mit welchem Datentyp |
| `CatFilterOrder` | Sortierung der Auswahlliste, wenn das Feld als Filterkriterium auf Kategorieebene dient. `Int` sortiert numerisch, `list` nach einer hinterlegten Liste |
| `CatFilterEmptyEntry` | Text für den Leereintrag dieser Auswahlliste |

Zwei Verhaltensweisen sind beim Lesen wichtig:

`SearchSuffix` wertet der Shop nur aus, wenn `Search = y` gesetzt ist. Steht dort ein anderer Wert, bleibt das Suffix unberücksichtigt, auch wenn es in der Datei steht.

`Sort` macht ein Feld sortierbar, sobald überhaupt ein Wert hinterlegt ist. Der konkrete Datentyp, im Beispiel `VARCHAR`, spielt für diese Entscheidung keine Rolle.

### Freie Produktdatenfelder

Für jedes freie Produktdatenfeld entsteht ein Abschnitt `<UserField>` innerhalb von `AttributeNames`.

Auszug für das freie Produktdatenfeld `Erscheinungstermin`:

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<AttributeNames>

   ...

   <UserField>
      FieldName      = Erscheinungstermin
      DisplayName    = Erscheinungstermin
      DepVar         = yes
      Type           = 0
      OutPutType     = text
      Uid            = 2-5162
      SearchSuffix   = kz
      DepSearchOrder = 0
      Order          = 247
   </UserField>

   ...

</AttributeNames>
```

| Parameter | Bedeutung |
| - | - |
| `FieldName` | der externe Feldname, den Sie in Tags verwenden |
| `DisplayName` | der Anzeigename |
| `BaseDir` | Basisverzeichnis, wenn der Feldinhalt ein Dateiname ist |
| `OutputType` | wie der Shop den Inhalt ausgibt. `list`, `file`, `meta`, sonst Text |
| `OutputStyleName` | Name des Ausgabestils |
| `Search` | ob das Feld durchsuchbar ist. `y` schaltet die Suche ein |
| `SearchSuffix` | das Suffix im Suchindex |
| `DepSearchIdx` | Index des Feldes in der abhängigen Suche |
| `DepSearchOrder` | Sortierung in der abhängigen Suche |
| `Sort` | ob das Feld sortierbar ist |
| `CatFilterOrder` | Sortierung der Filterauswahlliste. `Int` oder `list` |
| `CatFilterEmptyEntry` | Text für den Leereintrag dieser Auswahlliste |

Auch hier lohnt ein Blick auf das tatsächliche Verhalten:

Die Reihenfolge der `<UserField>`-Abschnitte in der Datei bestimmt die interne Nummerierung der freien Felder. Das erste freie Feld wird intern zu `User1`, das zweite zu `User2` und so fort. Wenn Sie wissen wollen, welches freie Feld hinter `User7` steckt, zählen Sie die `<UserField>`-Abschnitte von oben ab.

Ein gefülltes `BaseDir` schaltet die Ausgabe auch dann auf Datei um, wenn `OutputType` gar nicht auf `file` steht.

`DepSearchOrder = 2` setzt eine hinterlegte Sortierliste voraus. Fehlt diese, fällt der Wert stillschweigend auf `0` zurück.

Drei Feldnamen behandelt der Shop trotz freier Definition wie Standardfelder: `GiftProduct`, `GiftProductSubTotal` und `Glossary`.

Die Parameter `DepVar`, `Visible`, `Type`, `Uid` und `Order` aus den Beispielen oben liest der Shop selbst nicht aus der `prod.cfg`. Der Import schreibt sie für andere Komponenten mit, etwa für die Oberflächen im Online-Servicebereich. Für die Darstellung im Shop sind sie ohne Wirkung.

## Kategoriedaten: `Category`

Für jede Kategorie entsteht ein eigener Abschnitt `<Category>`.

Auszug für die Kategorie `Handschuhe`:

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Category>
   DataFile        = 01-aa_247398.wp5
   Index           = 247398
   Name            = Handschuhe
   Descr           = Handschuhe für jedes Wetter
   FreeField1      = Handschuhe für jedes Wetter
   FreeField3      = Modische Handschuhe aus hochwertigen Materialien.
   LongDescr       = Der Handschuh zählt unter anderem zur wichtigen Winterausrüstung.
   ImgAdvNav       = handschuhe.jpg
   ImgOverview     = handschuhe.jpg
   ProdTemplate    = ws_product_handschuh.htm
   Template        = ws_category_handschuh.htm
   Filter          = g
   ProdCount       = 0
   ProdCountChild  = 93
   RobotFollow     = y
   RobotIndex      = y
   RobotProdFollow = y
   RobotProdIndex  = y
</Category>
```

### Identität und Inhalt

| Parameter | Bedeutung |
| - | - |
| `Index` | der Kategorieindex. Er identifiziert die Kategorie eindeutig und wird in Tags verwendet |
| `Name` | der Kategoriename |
| `DataFile` | die Produktdatendatei der Kategorie |
| `Descr` | die kurze Kategoriebeschreibung |
| `LongDescr` | die lange Kategoriebeschreibung |
| `FreeField1` bis `FreeField30` | freie Kategoriefelder |
| `TRSearch` | der Kategoriename für Suchmaschinen |
| `RealIndex` | bei virtuellen Kategorien der Index der realen Kategorie, deren Daten gelten |

Der Parameter ist hier im Beispiel ergänzt.

Ein Index, der mit `cms-` beginnt, kennzeichnet eine CMS-Kategorie. Der Index `autobasket` ist reserviert und taucht in der Navigation nicht auf.

### Bilder

| Parameter | Bedeutung |
| - | - |
| `ImgClosed` | Bild der geschlossenen Kategorie in der Navigation |
| `ImgOpen` | Bild der geöffneten Kategorie |
| `ImgSelected` | Bild der ausgewählten Kategorie. Fehlt es, verwendet der Shop `ImgOpen` |
| `ImgAdvNav` | Bild für die erweiterte Navigation |
| `ImgOverview` | Bild für die Kategorieübersicht |

Wegweiser: [Bilder einer Kategorie](https://dokumentation.websale.de/v8s/kategorien/bilder-einer-kategorie.md)

### Templates

| Parameter | Bedeutung |
| - | - |
| `Template` | eigenes Template für die Produktübersichtsseite dieser Kategorie |
| `ProdTemplate` | eigenes Template für die Produktdetailansicht dieser Kategorie |
| `CMSTemplate-X` | Template einer CMS-Kategorie |

Beide Templatezuweisungen vererben sich auf die Unterkategorien. Der Praxisfall weiter unten zeigt, warum das bei der Fehlersuche entscheidend ist.

### Sichtbarkeit

Diese Parameter entscheiden, ob eine Kategorie im Shop überhaupt erscheint.

| Parameter | Bedeutung |
| - | - |
| `Hide` | `y` blendet die Kategorie aus der Navigation aus. Sie bleibt über ihren Index erreichbar |
| `Test` | `y` macht die Kategorie nur im Testmodus des Shops sichtbar |
| `UserGroupProduct` | Kundengruppen, die die Kategorie sehen dürfen. Alle anderen Kunden sehen sie nicht |
| `ValidFrom`, `ValidUntil` | Gültigkeitszeitraum als Zeitstempel. Außerhalb verhält sich die Kategorie wie eine Testkategorie |
| `Type` | Sonderform der Kategorie. `Link`, `Catalogue`, `Event` oder `Image`. Leer bedeutet normale Kategorie |

> [!WARNING]
>
> Ausblendung und Testmodus vererben sich nach unten. Steht eine Oberkategorie auf `Hide = y` oder `Test = y`, sind damit auch alle ihre Unterkategorien ausgeblendet, selbst wenn dort nichts eingetragen ist.
>
> Wenn eine Kategorie im Shop fehlt, prüfen Sie daher immer auch die Oberkategorien.

### Filterkriterien

| Parameter | Bedeutung |
| - | - |
| `Filter` | woher die Filterkriterien stammen. `y` aus dieser Kategorie, `g` aus der globalen Definition, jeder andere Wert schaltet die Filter ab |
| `Filter1`, `Filter2`, … | die Feldnamen der Filterkriterien, wenn `Filter = y` gesetzt ist |

Bei `Filter = g` holt der Shop die Kriterien aus dem Abschnitt `GlobalCategoryFilterCfg` der `prod.cfg`, der dieselben Parameter `Filter1`, `Filter2` und so fort enthält. Alle Kategorien mit `Filter = g` filtern dann nach denselben Feldern.

Anzeigename und Sortierung eines Filterkriteriums stammen nicht aus dem Kategorieabschnitt, sondern aus der Felddefinition in `AttributeNames`. Der Shop sucht den Feldnamen zuerst unter den freien Feldern, danach unter den Standardfeldern.

### Produktzahlen

| Parameter | Bedeutung |
| - | - |
| `ProdCount` | Anzahl der Produkte direkt in dieser Kategorie |
| `ProdCountChild` | Anzahl der Produkte in dieser Kategorie und allen Unterkategorien |

Ob diese beiden Werte überhaupt geschrieben werden, steuert der Abschnitt `CatProdCount` der `shop.config`. Ist er nicht freigeschaltet, fehlen die Parameter in der `prod.cfg`, und die zugehörigen Tags geben nichts aus.

Referenz: [shop.config, Produkte, Katalog und Suche](https://dokumentation.websale.de/v8s/referenz/konfigurationen/shopkonfiguration-shop-config/produkte-katalog-und-suche.md)

### Suchmaschinen

| Parameter | Bedeutung |
| - | - |
| `RobotIndex` | ob Suchmaschinen die Kategorieseite indizieren dürfen |
| `RobotFollow` | ob Suchmaschinen den Links auf der Kategorieseite folgen dürfen |
| `RobotProdIndex` | ob Suchmaschinen die Produktseiten dieser Kategorie indizieren dürfen |
| `RobotProdFollow` | ob Suchmaschinen den Links auf diesen Produktseiten folgen dürfen |

Alle vier Parameter sperren auf `n`. Jeder andere Wert, auch das `y` aus dem Beispiel, lässt Suchmaschinen gewähren.

## Weitere Abschnitte

Die folgenden Abschnitte liest der Shop ebenfalls aus der `prod.cfg`.

### `Cfg`

| Parameter | Bedeutung |
| - | - |
| `DataFileBaseDir` | Basisverzeichnis der Produktdatendateien |
| `NavImgBaseDir` | Basisverzeichnis der Navigationsbilder |
| `DefaultImage` | Standardbild, wenn ein Produkt kein eigenes hat |
| `DefaultLargeImage` | Standardbild in der großen Ansicht |
| `DefaultThumbnail` | Standard-Vorschaubild |
| `DefaultMiniThumbnail` | kleines Standard-Vorschaubild |
| `DefaultInsert` | Standardwert für Einfügungen |

Das Basisverzeichnis der Templates steht nicht in dieser Datei. Der Shop setzt es fest auf `benutzer/templates/<Sprache>/`.

### `InventoryCfg`

| Parameter | Bedeutung |
| - | - |
| `Green-Txt` | Standardtext für die grüne Ampel |
| `Yellow-Txt` | Standardtext für die gelbe Ampel |
| `Red-Deliverable-Txt` | Standardtext für rot, aber lieferbar |
| `Red-SoldOut-Txt` | Standardtext für rot und ausverkauft |
| `ReservationTime-Value` | Reservierungszeit in Minuten. Fehlt der Wert oder steht dort `0`, gelten 120 Minuten |

### `DownloadCfg`

| Parameter | Bedeutung |
| - | - |
| `Duration` | Gültigkeitsdauer eines Downloads |
| `Downloads` | zulässige Anzahl Downloads |

### `AutoBasket`

Enthält die Produkte, die der Shop automatisch in den Warenkorb legt.

Diesen Abschnitt sucht der Shop zuerst in der separaten Datei `import-data-prod.cfg`. Nur wenn er dort nicht steht, greift er auf die `prod.cfg` zurück. Wenn Sie Autobasket-Einträge in der `prod.cfg` ändern und sich nichts tut, prüfen Sie zuerst, ob die andere Datei einen Abschnitt `<AutoBasket>` enthält.

Wegweiser: Produkte automatisch in den Warenkorb legen

## Drei Praxisfälle

Die folgenden drei Fälle zeigen, wie Sie typische Fragen mit einem Blick in die `prod.cfg` beantworten. Öffnen Sie die Datei dafür jeweils im Online-Servicebereich unter dem Service "Konfiguration".

### Kategorieindex einer versteckten Kategorie ermitteln

Auf der Shop-Startseite `ws_start.htm` sollen die Produkte der versteckten Kategorie `Handschuhe` erscheinen. Ohne Zugriff auf das Warenwirtschaftssystem kennen Sie deren Kategorieindex nicht, brauchen ihn für die Ausgabe aber zwingend.

Suchen Sie in der `prod.cfg` nach `Handschuhe`. Im gefundenen Abschnitt `<Category>` mit `Name = Handschuhe` lesen Sie den Parameter `Index` ab, im Beispiel `247398`.

Mit diesem Index bauen Sie die Ausgabe auf der Startseite:

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{CAT-AdvData(247398,99)}

   {@PR-Data}
      ~PR-Name~
   {/@PR-Data}

{/CAT-AdvData(247398,99)}
```

Referenz: [`CAT-AdvData()`](https://dokumentation.websale.de/v8s/referenz/tags/cat/navigation-und-kategoriebaum#cat-advdata) · [`DC-CompareStringInList()`](https://dokumentation.websale.de/v8s/referenz/tags/dc/vergleiche)

Ob eine Kategorie tatsächlich versteckt ist, erkennen Sie im selben Abschnitt am Parameter `Hide`. Steht dort `y`, erscheint die Kategorie nicht in der Navigation, bleibt über ihren Index aber erreichbar. Fehlt `Hide`, prüfen Sie die Oberkategorien, denn die Ausblendung vererbt sich nach unten.

### Fehlende Kategoriebeschreibung aufklären

Bei einer Kategorie erscheint im Shop keine Beschreibung, obwohl der Shopbetreiber sagt, es sei eine hinterlegt.

Suchen Sie in der `prod.cfg` nach der Kategorie, beispielsweise `Handschuhe`. Prüfen Sie im Abschnitt `<Category>` mit `Name = Handschuhe` die Parameter `Descr` und `LongDescr`.

Fehlen beide Parameter oder steht hinter dem `=` kein Wert, ist für die Kategorie tatsächlich keine Beschreibung hinterlegt. Sprechen Sie dann mit dem Shopbetreiber. Möglicherweise ist eine erneute Übertragung der Kategoriedaten nötig.

Sind die Parameter gefüllt, liegt es an den Templates. Prüfen Sie, ob die Ausgabe-Tags auf der Produktdetailansicht `ws_product.htm` vorhanden sind:

```html theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{CAT-Descr}
   ~Cat-Descr~
{/CAT-Descr}

{CAT-LongDescr}
   ~Cat-LongDescr~
{/CAT-LongDescr}
```

Referenz: [`CAT-Descr`](https://dokumentation.websale.de/v8s/referenz/tags/cat/kategoriedaten#die-tags-im-uberblick) · [`CAT-LongDescr`](https://dokumentation.websale.de/v8s/referenz/tags/cat/kategoriedaten#die-tags-im-uberblick)

### Änderungen an der Produktübersichtsseite wirken nicht

Sie haben die Produktübersichtsseite `ws_category.htm` geändert, in einer bestimmten Kategorie ist davon aber nichts zu sehen. Dann hat diese Kategorie vermutlich ein eigenes Template zugewiesen bekommen.

Suchen Sie in der `prod.cfg` nach der Kategorie und prüfen Sie im Abschnitt `<Category>` die Parameter `Template` und `ProdTemplate`.

```ini theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
<Category>
   ...
   Index         = 247398
   Name          = Handschuhe
   ProdTemplate  = ws_product_handschuh.htm
   Template      = ws_category_handschuh.htm
   ...
</Category>
```

In diesem Beispiel verwendet die Kategorie `Handschuhe` sowohl für die Produktdetailansicht `ws_product.htm` als auch für die Produktübersichtsseite `ws_category.htm` ein eigenes Template. Ihre Änderungen gehören dann in diese beiden Dateien.

> [!WARNING]
>
> Spezielle Templates vererben sich auf alle Unterkategorien. Sind `Template` und `ProdTemplate` in der Kategorie selbst leer, prüfen Sie deshalb auch die Oberkategorien.

## Wenn ein erwarteter Wert fehlt

Taucht ein Parameter in der `prod.cfg` nicht auf, hilft diese Reihenfolge:

Prüfen Sie zuerst, ob der Wert überhaupt importiert wird. Die `prod.cfg` bildet ab, was das Warenwirtschaftssystem geliefert hat. Was dort nicht ankommt, steht auch hier nicht.

Prüfen Sie dann, ob das Feld im TopRank-Manager zur manuellen Pflege freigegeben ist. Freigegebene Felder stammen nicht aus der Warenwirtschaft, sondern aus dem Online-Servicebereich, und überleben jeden Import.

Prüfen Sie zuletzt, ob der Abschnitt überhaupt geschrieben wird. `ProdCount` und `ProdCountChild` beispielsweise entstehen nur, wenn der Abschnitt `CatProdCount` der `shop.config` freigeschaltet ist.


## Related topics

- [Konfigurations-Typen](https://dokumentation.websale.de/v8s/grundlagen-konfiguration/konfigurations-typen.md)
- [Bilder einer Kategorie](https://dokumentation.websale.de/v8s/kategorien/bilder-einer-kategorie.md)
- [Kategorie anzeigen](https://dokumentation.websale.de/v8s/kategorien/kategorie-anzeigen.md)
- [Beschreibung einer Kategorie](https://dokumentation.websale.de/v8s/kategorien/beschreibung-einer-kategorie.md)
- [Konfiguration: Grundlagen](https://dokumentation.websale.de/v8s/grundlagen-konfiguration/konfiguration-grundlagen.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.