DOIT Content

Geändert am Thu, 12 May 2022 um 10:45 AM

Die Erzeugung von Content / Inhalt in Online Shops kann sehr aufwändig und zeitraubend sein. Oft werden auch Artikel-Attribute, Crosselling und Zubehör nicht oder nicht vollständig gepflegt.

Die manuelle Erstellung und Optimierung von Informationen pro Artikel bzw. Shop-Kategorien sollte immer das Ziel sein.

Allerdings kann die (halb-automatische) Erstellung von Content durchaus Sinn machen. “Leere” Webseiten bieten Shop Besuchern kaum einen Mehrwert und verschlechtern den Gesamteindruck der Webseite immens. Genau das wird auch von Suchmaschinen auch bemerkt und es hat negative Konsequenzen!

Nachteile von nicht ausreichend gepflegten Artikel bzw. Kategorie Seiten

  1. zu wenig Informationen vorhanden um eine Kaufentscheidung zu treffen → Kunde kauft dort wo er gute Informationen bekommt!

  2. Produktseiten ähneln sich sehr und laden so nicht zum Stöbern ein

    1. höhere Abbruchquoten

    2. kurze Verweildauer

    3. schlechtere Conversion

  3. negative Signale an Suchmaschinen. Diese bewerten die Seite schlecht bzw. nehmen sie nicht in den Index auf. Folge: keine Besucher über diese Seite

  4. sehr schlechtes Gesamtbild der Webseite. Für potentielle Käufe als auch für Suchmaschinen

  5. Webseiten werden bei Google auch durch Menschen (Google Quality Rater) geprüft und je bewertet!

  6. “Kanibalisierung” von Inhalten → kein stabiles Ranking

Ergebnis: Vertrauen in die Webseite durch User und Suchmaschinen sehr schlecht!

Es lohnt sich also für gute Inhalte zu sorgen!

halbautomatische Content Erzeugung

Sicherlich ist es immer das Optimum Inhalte manuell zu erzeugen! Um aber einen Anfang zu machen bzw. eine Webseite insgesamt sehr stark aufzuwerten, eignet sich das DOIT Content Modul sehr gut. Es macht sicherlich Sinn anschließend die wichtigen Landing Pages nachzuoptimieren.

Landingpages

Ziel einer Internetseite ist es Besucher auf die für ihn bestimmten Seiten zu bekommen. Diese Seiten werden Landingpages genannt.

Im Prinzip bedeutet dies, dass jede Seite einen bestimmten Zweck hat:

  • Artikel Detailseiten Ziel

    • ein Besucher der ein Produkt sucht und eventuell kaufen will

    • er muss hier auf möglichst effektive Weise die zur Kaufentscheidung benötigten Informationen bekommen

    • der potentielle Käufer muss ein positives Gefühl bekommen, dass es richtig ist in diesem Shop zu bestellen.

  • Kategorie Seiten Ziel

    • Besucher der Produkte einer Kategorie sucht

    • auf der Kategorie Landingpage müssen die Produkte so dargestellt werden dass sofort ersichtlich ist welche Artikel angeboten werden.

    • bei ähnlichen Artikel muss schon auf Ebene der Kategorie Seite klar ersichtlich sein was die Unterschiede der ähnlichen Artikel sind.

  • Hersteller Seiten Ziel

    • Besucher der Artikel eines Herstellers sucht

    • Besucher der Informationen zu einem Hersteller sucht

Auswirkungen von schlecht gepflegten Landing Pages

Artikel-Detailseiten

Shops verfügen meistens über eine Vielzahl von Artikeln. Die Pflege der großen Anzahl von Artikel kann sehr aufwändig sein. Dennoch haben schlecht gepflegte Artikel negative Auswirkungen.

negative Auswirkungen
  • Kunde

    • Kaufentscheidung wird nicht ermöglicht da Informationen fehlen

    • Kauf beim Mitbewerber da dort die für den Kauf wichtigen Informationen vorhanden sind

    • schlechte Conversion

    • wenig Vertrauen in den Shop / Shopbetreiber

  • Suchmaschinen

    • schlechte oder keine Rankings und somit kaum Besucher

    • schlechte oder keine Indizierung der Seite

    • Duplicate Content Probleme (viele ähnliche schlechte Seiten)

    • insgesamt schlechte Bewertung der Website z.B. auch durch Google Quality Rater

    • Inhalte werden von Google als “wertlos” betrachtet und das Gesamtbild des Shops negativ beeinträchtigt

Kategorie-Seiten

Shop Kategorie Seiten sind sehr gut als Landing Pages geeignet. Meistens ist die Anzahl der Shop Kategorien wesentlich geringer als die der Artikel. Somit ist die Optimierung der Kategorien weniger aufwändig. Es macht auch viel Sinn mindestens die wirklich wichtigen Shop Kategorien manuell zu optimieren.

Typen von schlechten Kategorie Seiten
  • Kategorien mit wenigen Artikeln

    • Seite bietet keinen wirklichen Mehrwert

  • Kategorien mit sehr vielen Produkten

    • die Kategorie Seite enthält eine Paginierung mit sehr vielen Seiten

      • welche der Kategorie Seiten die eigentliche Landingpage ist, ist unklar

      • Produkte können nur schwer gefunden werden

      • Duplicate Content Probleme

  • Artikel in einer Kategorie nicht klar unterscheidbar

    • die Artikelliste der Kategorie liefert ungenügend Informationen. Der Kunde kann nicht unterscheiden zu welchem Artikel er gehen soll

    • Variantenauflistung

      • Produkte die eigentlich nur Produkt-Varianten eines Artikels sind, werden als einzelne Artikel dargestellt.

        • alle Artikel (Varianten) sehen gleich aus.

        • Suchmaschinen bewerten dies möglicherweise negativ

  • Kategorien ohne Content

    • Seiten die lediglich aus Links zu weiteren Unterkategorien enthalten, sind nicht wirklich gute Landingpages

  • Kategorien ohne Artikel

    • Bei vielen Artikeln einer Kategorie macht es durchaus Sinn die wichtigsten Artikel dieser Kategorie als Artikelliste anzuzeigen

Hersteller-Seiten

Oft wird das Potential von gut gepflegten Hersteller-Seiten nicht genutzt. Hersteller Namen in Verbindung mit Produkt Namen sind eine gängige Sucheingabe in Suchmaschinen. Auch ist es vertrauensfördernd Informationen zu einem Hersteller und seinen Produkten anzubieten. Es kann auch Sinn machen die beliebtesten Artikel eines Herstellers auf Hersteller Seiten hervorzuheben.

Hersteller Seiten werden oft eher vernachlässigt, da auf Ebene der Produkt-Detailseiten auch auf Hersteller und Produktname optimiert wird.

Grundlegendes zu Landing Pages

Bei der Optimierung von Webseiten wird oft darauf optimiert ob Besucher über Keyword oder Keyword Kombinationen die Seite erreichen. Diesen Ansatz halten wir für nicht ausreichend!

Der richtige Ansatz für “SEO” ist die Optimierung von Webseiten nach ihrem Zweck und dem Benutzer-Erlebnis! Nicht umsonst nennt man SEO auch S earch E xperience O ptimisation !!!

Wenn eine für den Besucher optimierte Seite Keywords oder Keyword Kombinationen enthält und diese Sinn machen, dann haben diese eine Daseinsberechtigung!

Der Fokus muss aber IMMER beim Webseiten Besucher sein!

gut gepflegte Landing Pages

Artikel-Detailseiten

  • einen eindeutigen Artikel Titel der für jeden Artikel individuell ist

  • eine aussagekräftige Kurzbeschreibung,die sofort erkennen lässt um was es sich bei diesem Artikel handelt bzw. wie dieser Artikel sich von anderen ähnlichen Artikeln unterscheidet.

  • gut gepflegte Produkt Attribute

    • Attribute liefern auf einen Blick Informationen über die wichtigsten Produktmerkmale

    • Attribute werden bei Produktvergleichen eingeblendet und deshalb liefern Produktvergleiche nur die wichtigen Informationen wenn Attribute gepflegt sind

    • für die Erzeugung von Attributen eignet sich das DOIT Attributes Modul hervorragend.

  • Informationen zum Hersteller des Produkts

Kategorie Seiten

Dieser Typ von Landing-Pages ist oft die eigentliche Einstiegsseite von Shop Besuchern. Artikel-Detailseiten generieren oft nur wenige Besuche, wenn sie nicht hervorrragend gepflegt sind. Kategorie Seite sind mit weniger Aufwand so zu optimieren dass Ranking erzielt werden können.

  • eindeutige gut beschreibende Kategorien / Unterkategorie Namen

  • eventuell kurze Beschreibungen der Unterkategorien. Sie dienen der Orientierung

  • Bilder / Thumbnails für Unterkategorien

  • gut strukturierter Kategorienbaum der pro Kategorie nur eine überschaubare Anzahl Artikel zulässt

  • Artikellisten heben die Unterschiede der Artikel gut dar. Der User kann sofort erkennen auf welchen Artikel er klicken muss.

  • in Artikellisten werden KEINE Varianten der Artikel aufgelistet

Hersteller Seiten

Dieser Landing Page Typ kann sehr gut optimiert werden auf Hersteller Suchen. Das Suchvolumen für einen Hersteller Namen ist oft recht groß.

Landing Page Blöcke

Es kann Sinn machen Seiten mit Informations-Blöcken aufzuwerten.

Beispiele:

  • Kontaktinformationen

  • besondere Angebote

  • Preisersparnis Hinweise

Crossselling / Zubehör

Artikel Detailseiten sollten über gut gepflegtes Crossselling und Zubehör verfügen.
Mit dem DOIT Content Modul können dynamische Inhalte wie Crossselling und Zubehör erzeugt werden.
Wir empfehlen aber hierfür auch das DOIT CrossSelling / Zubehör Modul.

Gedanken zum Thema Seitenqualität

Bei der Erstellung von Landing Pages zählt aus unserer Sicht NICHT primär, dass SEO im Sinne von technischem SEO betrieben wird. Technisches SEO ist nur 1 Grundpfeiler erfolgreicher Webseiten.

Wenn technisches SEO in einem Shop erfolgreich umgesetzt ist, aber der Inhalte ungenügend ist, sind die Seiten nach wie vor ohne Mehrwert für den Kunden!

Um einen Webshop wirklich erfolgreich zu betreiben muss deer Inhalt eines Shops am User orientiert optimiert sein!

Ist er dies nicht wird oft mit dem Argument “der Kunde kauft nur über den Preis” argumentiert.

Die Ansicht dass es Kunden bei einer Kaufentscheidung hauptsächlich über Preis geht, vertreten wird eindeutig nicht!

Kunden kaufen dann, wenn sie sich wohl fühlen und eine Kaufentscheidung sich gut anfühlt!

Der Zweck aller unsererer DOIT Module ist Ihnen die Pflege Ihres Shops möglichst einfach zu machen.

YAML-Konfigurations-Dateien

Die Konfiguration des DOIT Import Moduls wird (wie bei allen DOIT Modulen) in einer oder mehreren YAML-Dateien eingestellt.

YAML Dateien sind vergleichbar mit XML Dateien und werden dementsprechend strukturiert aufgebaut.

DOIT Modul Einstellungen

Um das DOIT Import Modul aufrufen zu können, muss es als DOIT Modul konfiguriert sein.

Die Konfigurationsdatei, z.B. “doitcontent.yaml” muss sich im Verzeichnis:

„Shopverzeichnis/source/modules/webtools/doitconfig/doitcontent“

befinden.

Weitere Informationen zum Aufbau dieser Datei finden Sie in der DOIT Workflow Modul Dokumentation.

meinTask.yaml:

task:
  module:
    id: doitcontent
    name: Do It Content erstellen
    classname: DoItContent
    namespacename: WebTools\DoItContent\Application\Controller\Admin\DoIt
    active: true
    stepsize: 25
  form:
    active: true
    template:
    alternative_definition:
      id: Form1
      name: FormName
      submits:
        taskformsubmit:
          type: submit
          active: true
          id: submit
          name: Submit
          value: TaskFormSubmit
          css: btn btn-success mt-3
          label: Content erstellen
      rows:
        row01:
          id: Row1
          columns:
            column0:
              id: col0
              css: col-md-12
              name: Content Generator
              label: Content Generator
              type: text
              value: Dieses Modul erstellt Content!
  steps:
    Generate_ArticleContent:
      id: GenerateArticleContent
      active: true
      name: Article Content Generator
      handling: run
      mode: dbtable
      functionname: generateArticleContent
      functionparams:
      dbtable: oxarticles
    Generate_CategoryContent:
      id: GenerateCategoryContent
      active: true
      name: Category Content Generator
      handling: run
      mode: dbtable
      functionname: generateCategoryContent
      functionparams:
      dbtable: oxcategories
    Generate_ManufacturerContent:
      id: GenerateManufacturerContent
      active: true
      name: Manufacturer Content Generator
      handling: run
      mode: dbtable
      functionname: generateManufacturerContent
      functionparams:
      dbtable: oxmanufacturers

Diese Konfiguration erzeugt nacheinander Content für Artikel, Kategorien und Hersteller.

Eine DOIT Konfiguration für die Erzeugung von Textblöcken anhand von Kategorien könnte folgendermassen aussehen:

task:
  module:
    id: doitcontentcategorytexts
    name: Do It Content Kategorien Texteblöcke  erstellen
    classname: DoItContent
    namespacename: WebTools\DoItContent\Application\Controller\Admin\DoIt
    active: true
    stepsize: 10
  steps:
    Generate_CategoryBlock_top:
      id: GenerateCategoryBlock_top
      active: true
      die: true
      debugmax: 1
      name: Category Content Block TOP
      handling: run
      mode: dbtable
      functionname: generateCategoryContent
      functionparams: NameDesDOITContentYamlTemplates
      dbtable: oxcategories

DOIT Content Inhalte Konfiguration

Die Konfigurationsdateien für Inhalte, z.B. “article.yaml” müssen sich im Sprachen Verzeichnis:

„Shopverzeichnis/source/modules/webtools/doitconfig/doitcontent/SprachId/“

befinden.

Z.B.: „Shopverzeichnis/source/modules/webtools/doitconfig/doitcontent/0/“ für die Shop Sprache 0.

Landingpage Content Typen

Der Übersichtlichkeit halber wird nach 3 Landingpage Typen unterschieden.

Artikel

language:
  de:
    type:
      article:

Kategorie

language:
  de:
    type:
      category:

Hersteller

language:
  de:
    type:
      manufacturer:

Für jeden Typ können viele Einstellungen gemacht werden

language:
  de:
    type:
      article/category/manufacturer:
        # übergeordnete Clearing Einstellungen
        clearing:
          general: true / false
          regex:
          replace:
          delete:
        # übergeordnete Einstellungen  
        settings:
          synonyms:
            allow: true / false
          functions:
            function1_x:
        # übergeordenete Synonyme    
        synonyms:
          synonym1_x:
        # alle Templates dieser Konfiguration  
        templates:
          template1_x:

Aufbau templates / blocks / block

Jede Konfiguration kann tief erweitert werden.

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              template1_block1:
              template1_block2:
              template1_block_x:
          template2:
            blocks:
              template2_block1:
              template2_block_x:
          template_x:
            blocks:
              template_x_block1:

Da die Konfiguration sehr umfangreich werden kann, bietet es sich an die Konfigurationen in mehrere Dateien zu splitten

Template 1:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              template1_block1:
              template1_block2:
              template1_block_x:

Template 2:

language:
  de:
    type:
      article:
        templates:
          template2:
            blocks:
              template2_block1:
              template2_block_x:

Template-x:

language:
  de:
    type:
      article:
        templates:
          template-x:
            blocks:
              template_x_block1:

Jedes Template kann beliebig viele Blocks haben, die nacheinander oder nach Sortierung abgearbeitet werden.

Blocks

Ein Block entspricht einem Inhalt der je nach Bedingung (Condition) verarbeitet wird.

Ausgabe von Text Inhalt inkl. H2-Überschrift:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                header:
                  type: h2
                  css: 
                  text:
                    - 'Artikel Block 1 Überschrift'
                content:
                  type: div
                  css: 
                  text:
                    - 'Artikel Block 1 Inhalt: Dieser Text wird durch das 
                       DOIT Content Modul erzeugt und auf der Artikel 
                       Detailseite ausgegeben!'

Ausgabe von Inhalt aus OXID CMS Kundeninformationen ohne Überschrift:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                content:
                  type: div
                  css: 
                  cms:
                    - cmsident

Ausgabe von ZUFÄLLIGEM Text Inhalt:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                content:
                  type: div
                  css: 
                  text:
                    - 'Artikel Block 1 Inhalt: Dieser Text wird durch das 
                       DOIT Content Modul erzeugt und auf der Artikel 
                       Detailseite ausgegeben!'
                    - 'Artikel Block 1 Inhalt 2: Dieser Text wird auch 
                       durch das DOIT Content Modul erzeugt'
                    - 'Artikel Block 1 Inhalt 3: Dieser Text ist noch besser'

zufällige Ausgabe von Inhalt aus OXID CMS Kundeninformationen ohne Überschrift:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                content:
                  type: div
                  css: 
                  cms:
                    - cmsident1
                    - cmsident2
                    - cmsident_x

Conditions

Ob ein Content Block erzeugt werden soll kann anhand von Conditions / Bedingungen definiert werden.

einfache Bedingung (ohne Operator or /and):

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition:
                  oxcategories__field:
                    value:
                      - Wert1
                      - Wert2
                      - Wert_x

umfangreichere Definition einer Bedingung (operator or oder and):

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition:
                  operator: or / and
                  oxcategories__field1:
                    value:
                      - Wert1
                      - Wert2
                      - Wert_x
                    operator: !=
                  oxcategories__field2:
                    value:
                      - Wert1
                      - Wert2
                      - Wert_x
                    operator: ==                    
                  MyFunction:
                    class: YourClass\....\
                    function: MyFunction
                    params:
                      - $this->oObject
                      - 'false'

Condition Typen

Variable (oxarticles, oxcategories, oxmanufacturers)

Es kann auf jedes Feld der Datenbank Tabellen oxarticles, oxcategories und oxmanufacturers zugegriffen werden.

Bei der Suche wird unterschieden ob es sich um die Generierung von Artikel, Kategorie oder Hersteller Texten handelt.

Bei der Suche in Artikel-Daten werden die Daten des Artikel und Attribute, Hersteller und Hauptkategorie des Artikels automatisch berücksichtigt.
Beide Suche in Kategorie oder Hersteller Daten werden jeweils nur die Daten der Kategorie oder des Herstellers berücksichtigt.

Artikel Datenbank Tabelle

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition:
                  operator: or / and
                  oxarticles__oxprice:
                    value:
                      - 10
                    operator: >=

Kategorie Datenbank Tabelle

language:
  de:
    type:
      category:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition:
                  operator: or / and
                  oxcategories__oxtitle:
                    value:
                      - Kiteboarding
                      - Kites
                    operator: ==

Hersteller Datenbank Tabelle

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition:
                  operator: or / and
                  oxmanufacturers__oxtitle:
                    value:
                      - OXID eSales
                    operator: !=

Attribut

Suche nach Wert in 1-x Attributen (Beispiel: Attribut Farbe und Größe):

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition:
                  operator: or / and                
                  attributes:
                    # Attribute Yaml Id
                    color:
                      # Attribut Name
                      name: Farbe
                      # einer dieser Werte muss zutreffen, dann TRUE  
                      value:
                        - grün
                        - gelb
                        - rot
                      operator: '!='
                    # Attribute Yaml Id für   
                    size:   
                      name: Größe
                      value:
                        - L 
                        - XL

regexall

prüfe im kompletten Suchobject (Artikel, Kategorie / Hersteller Daten) ob ein Wert 1-x Fach vorhanden ist:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition:
                  operator: # (leer entspricht and)
                regexall:  
                  kite:
                    regex: /Kite/i
                    count: # (leer entspricht > 0)
                  trapez:
                    regex: "/Größen/"
                    count: 2
                    operator: '>='

url

Suche nach Wort “Kite” in Url in Url

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition: 
                  url:
                    - Kite
                    - Wakeboard

regexurl

Suche nach Wort regular Expression “Kite / Wakeboard” in der Url

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition: 
                  regexurl:
                    - /(Kite)/i\b
                    - /(Wakebord)/i\b

url mit count und Bedingung

Suche nach Wort “Kite” in Url in Url

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition: 
                  url:
                    kite:
                      value: 
                        - Kite
                      count: 1
                      operator: > 

regexurl mit count und Bedingung

Suche nach Wort regular Expression “Kite / Wakeboard” in der Url

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition: 
                  regexurl:
                    kite:
                      value: 
                        - /(Kite)/i\b
                      count: 2
                      opertor: < 

url Mischform (gleicher Aufbaue bei regexurl)

Suche in Url nach Wort “Kite”: Anzahl des Vorkommens größer als 1 und gleichzeitig Suche nach “Wakeboard” mindestens 1 Vorkommen.

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition: 
                  url:
                    kite:
                      value: 
                        - Kite
                      count: 1
                      operator: > 
                    - Wakeboard  

regexurl Mischform (gleicher Aufbaue bei url) mit opertor and / or

Suche in Url nach Wort “Kite”: Anzahl des Vorkommens größer als 1 oder (operator “or”) Vorkommen von “Wakeboard” mindestens 1 mal.

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition: 
                  regexurl:
                    operator: or (and)
                    kite:
                      value: 
                        - /(Kite)/i\b
                      count: 1
                      operator: > 
                    - Wakeboard  

manufacturer

Suche nach Hersteller über den Namem oder die OXID:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition:
                  manufacturer:
                    name:
                      - Core Kiteboarding
                      - ION
                      - Jucker Hawaii
                    oxid:
                      - adc566c366db8eaf30c6c124a09e82b3

Funktion

Suche über Funktionsaufruf. Wenn die Funktion TRUE zurück gibt wird die Bedingung als TRUE interpretiert.

rufe checkComparableProductExists UND checkSomething auf:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                condition:
                  operator: and
                  # Platzhalter
                  CHECKCOMPARABLEPRODUCTEXISTS:
                    class: MyClass\...\
                    function: checkComparableProductExists
                      - $this->oObject
                  # Platzhalter
                  CHECKSOMETHING:
                    class: MyClass\...\
                    function: checkSomething
                    params:
                      - $this->oObject
                      - "false"

Parameter werden (durch YAML) als Array übergeben.

$this->oObject enthält die Daten des Artikels, der Kategorie oder des Herstellers.

Beispielfunktionen:

namespace MyClass\...;

class MyClass
{

    public function checkComparableProductExists($SubmitParams) {
        $oArticle=$SubmitParams['0'];
        $aCrossSelling=$oArticle->getCrossSelling();
        
        if (is_array($aCrossSelling)) {
          if (count($aCrossSelling)>0)
            return TRUE;
          else
            return FALSE;  
            }
        }    
        else
          return FALSE;  
      }
    
    public function checkSomething($SubmitParams) {
        $oArticle=$SubmitParams['0'];
        $blILikeDOITModules=$SubmitParams['1'];
        
        if ($blILikeDOITModules)
          return TRUE;
        else
          return FALSE;  
    }

Condition Operator Typen

Für den das Setzen einer einzelnen Bedingung stehen folgende Operator Typen zur Verfügung:

  • gleich

    • =

    • ==

    • blank (leer)

  • größer

    • >

  • größer gleich

    • >=

  • kleiner

    • <

  • kleiner gleich

    • <=

  • nicht gleich

    • !=

  • regex

    • kompletter Regex String, liefert TRUE zurück wenn preg_match = true

Platzhalter in Texten

Das DOIT Content Module arbeitet mit Platzhaltern. Diese Platzhalter werden bei der Generierung von Texten statisch oder dynamisch ersetzt. Die Platzhalter können beliebig benannt werden. Wir empfehlen aber Platzhalter GROSS zu schreiben und bei der Benenning zwischen statischen und dynamischen Platzhaltern zu unterscheiden.

Die Platzhalter werden durch Funktionen befüllt und in 2 Schritten verarbeitet

  1. Generierung von Inhalten durch DOIT Workflow Modul inkl. Ersetzen von STATISCHEN Werten

  2. LIVE beim Aufruf der Webseite durch Ersetzen der DYNAMISCHEN Werte

Die Definition der Platzhalter-Funktionen erfolgt in den Dateien

„Shopverzeichnis/source/modules/webtools/doitconfig/doitcontent/SprachId/functions.yaml“

und

„Shopverzeichnis/source/modules/webtools/doitconfig/doitcontent/SprachId/dynfunctions.yaml“

functions.yaml

language:
  de:
    functions:
      STAT_MYPLACEHOLDER:
        class: MyClass\...
        function: getSTATMyPlaceHolderValue
        params:
          - $this->oObject

dynfunctions.yaml

language:
  de:
    functions:
      DYN_MYPLACEHOLDER:
        class: MyClass\...
        function: getDYNMyPlaceHolderValue
        params:
          - $this->oObject

Funktion LONGESCRIPTION

Eine besonderer Platzhalter (interne DOIT Content Funktion) ist LONGDESCRIPTION! Er gibt die Langbeschreibung eines Artikels aus.

Beispiel für Verwendung von LONDESCRIPTION mit Prefix und Suffix:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              before_longdesc:
                name: before_longdesc
                active: true
                content:
                  type: div
                  text:
                    - 'Dieser Text erscheint vor der Ausgabe der Langbeschreibung'
              article_longdesc:
                name: article_longdesc
                active: true
                content:
                  type: div
                  text:
                    - LONGDESCRIPTION
              after_longdesc:
                name: after_longdesc
                active: true
                content:
                  type: div
                  text:
                    - 'Dieser Text erscheint nach der Ausgabe der Langbeschreibung'

Blöcke können beliebig viele Platzhalter enthalten. Es wird zwischen 2 Typen Platzhaltern unterschieden.

Platzhalter Typen:

  • stattische Platzhalter
    (werden bei Generierung der Inhalte über die DOIT Content Funktionen im Admin-Bereich gefüllt)

  • dynamische Platzthalter
    Generierung von Content im LIVE-Betrieb

statische Platzhalter

Block mit statischen Platzhaltern:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                content:
                  type: div
                  text:
                    - 'Dieses STATIC_PLATZHALTER1 ist genial! 
                       Die anderen STATIC_PLATZHALTER2 auch ;-)'

Definition von STATIC_PLATZHALTER1 und STATIC_PLATZHALTER 2 in functions.yaml:

language:
  de:
    functions:
      STATIC_PLATZHALTER1:
        class: MyStaticClass\...
        function: getStaticPlatzhalter1
      STATIC_PLATZHALTER2:
        class: MyStaticClass\...
        function: getStaticPlatzhalter2  

Beispiel Definition einer Platzhalter Funktion:

namespace MyClass\...;

class MyStaticClass
{
    public function getStaticPlatzhalter1() {
      return 'DOIT Modul';
    }
    
    public function getStaticPlatzhalter2() {
      return 'DOIT Module';
    }
}

dynamische Platzhalter

Eine Besonderheit gilt bei dynamischen Platzhaltern. Dynamische Platzhalter müssen im Yaml File gesondert definiert werden. Entweder (und) im Template oder im jeweiligen Block in der Einstellung settings: dynvalues: . Das DOIT Content Modul fasst alle definierten dynamischen Platzhalter zusammen und führt die entsprechenden Funktionen 1 mal aus um die Platzhalter anschließend zu füllen.

dynamische Platzhalter Definition in Template Settings.

Block mit dynamischen Platzhaltern:

language:
  de:
    type:
      article:
        templates:
          template1:
            settings:
              dynvalues:
                - DYN_PLATZHALTER1
                - DYN_PLATZHALTER2

dynamische Platzhalter Definition in Block Settings:

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                settings:
                  dynvalues:
                    - DYN_PLATZHALTER1
                    - DYN_PLATZHALTER2

dynamische Platzhalter Definition in Template und Block Settings:

language:
  de:
    type:
      article:
        templates:
          template1:
            settings:
              dynvalues:
                - DYN_PLATZHALTER1
            blocks:
              block1:
                name: block1
                active: true
                settings:
                  dynvalues:
                    - DYN_PLATZHALTER2
                content:
                  type: div
                  text:
                    - 'Dieses dynamische DYN_PLATZHALTER1 ist genial! 
                       Die anderen dynamischen DYN_PLATZHALTER2 auch ;-)'

Definition von DYN_PLATZHALTER1 und DYN_PLATZHALTER 2 in functions.yaml:

language:
  de:
    functions:
      DYN_PLATZHALTER1:
        class: MyClass\...
        function: getDynPlatzhalter1
      DYN_PLATZHALTER2:
        class: MyClass\...
        function: getDynPlatzhalter2  

Beispiel Definition einer Platzhalter Funktion:

namespace MyClass\...;

class MyDynClass
{
    public function getDynPlatzhalter1() {
      return 'DOIT Modul';
    }
    
    public function getDynPlatzhalter2() {
      return 'DOIT Module';
    }
}

Settings

In jedem Template also auch jedem Block können Settings (Einstellungen) gemacht werden.

übergeordenete Setttings

language:
  de:
    settings:
    synonyms:
    clearing:  
    dboutput:

Template Settings

language:
  de:
    type:
      article:
        templates:
          template1:
            settings:
              synonyms:
              clearing:  
              dboutput:
              showresult:
              dynvalues:

Block Settings

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                settings:
                  synonyms:
                  clearing:
                  dynvalues:

Synonyme

Um nicht alle Texte / Inhalte gleich aussehen zu lassen und eine gewisse Mischung der Wörter zu erzeugen können Synonyme definiert werden. Synonyme können auf Template oder Block Ebene definiert werden.

Template Synonyme

language:
  de:
    type:
      article:
        templates:
          template1:
            settings:
              synonyms:
                active: true / false
            synonyms:
              Kite:
                - Kite Surfing
                - Kitesurfing
                - Kiteboarding
                - Powerkiting
              Wakeboard:
                - Wake Board
                - Board

Block Synonyme

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                settings:
                  synonyms:
                    general: true / false
                    active: true / false
                synonyms:
                  Kite:
                    - Kite Surfing
                    - Kitesurfing
                    - Kiteboarding
                    - Powerkiting
                  Wakeboard:
                    - Wake Board
                    - Board

Clearing

Wenn Texte z.B. von Produkt-Herstellern geliefert wurden, ist es ratsam diese Texte nicht 1:1 zu übernehmen sondern diese Texte Stück für Stück zu ändern. Manchmal macht es auch Sinn Texte die automatisch erzeugt wurden zu korrigieren. Dies kann auf Template oder Block Ebene definiert werden.

Template Clearing

language:
  de:
    type:
      article:
        settings:
          clearing:
            general: true
            active: true
        clearing:
          regex:
            # suche nach oxidshop und ersetze es mit nichts 
            # es macht hier eher Sinn die delete: Funktion zu nutzen
            /oxidshop/i:
              -
            /ersetze mich/i:
              - ich wurde ersetzt  
            /VariantListAsOrderedlist/i:  
              # zeige eine Liste aller Varianten als <ul><li> Liste an
              - VARIANTLISTALL_LIST
          replace:
            # suche nach "OXID Shop" und ersetze mit einem der Werte
            Oxid Shop:
              - mein Shop 
              - mein toller Shop 
              - mein wunderbarer Shop
              - mein mit DOIT optimierter Shop
        Varianten:
              # gebe Liste aller Varianten als <ul><li> Liste aus
              - VARIANTLISTALL_LIST
              # gebe Liste aller Varianten mit Komma getrennt aus
              - VARIANTLISTALL_KOMMA
              # gebe Liste aller aktiven Varianten als <ul><li> Liste aus
              - VARIANTLISTACTIVE_LIST
              # gebe Liste aller Varianten mit Komma getrennt aus
              - VARIANTLISTACTIVE_KOMMA
              # gebe Liste aller deaktivierten Varianten als <ul><li> Liste aus
              - VARIANTLISTINACTIVE_LIST
              # gebe Liste aller deaktivierten mit Komma getrennt aus
              - VARIANTLISTINACTIVE_KOMMA
            Kategorie:  
              - oxcategories__oxtitle
          delete:
            # ersetze alle dieser Werte (Reihenfolge beachten!)
            - OXID Shop
            - OXID

Block Clearing

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
                name: block1
                active: true
                settings:
                  synonyms:
                    general: true / false
                    active: true / false                
                clearing:
                # siehe Einstellung Möglichkeiten bei template:

Sonderfunktionen

Es gibt einige Sonderfunktionen die von Haus aus Werte ermittlen und ausgeben. Sollten Sie weitere Sonderfunktionen wünschen, dann bitten wir um Kontaktaufnahme.

LONGDESCRIPTION

Gibt die Langbeschreibung eines Artikels aus.

VARIANTLIST

                # gebe Liste aller Varianten als <ul><li> Liste aus
                  - VARIANTLISTALL_LIST
                  # gebe Liste aller Varianten mit Komma getrennt aus
                  - VARIANTLISTALL_KOMMA
                  # gebe Liste aller aktiven Varianten als <ul><li> Liste aus
                  - VARIANTLISTACTIVE_LIST
                  # gebe Liste aller Varianten mit Komma getrennt aus
                  - VARIANTLISTACTIVE_KOMMA
                  # gebe Liste aller deaktivierten Varianten als <ul><li> Liste aus
                  - VARIANTLISTINACTIVE_LIST
                  # gebe Liste aller deaktivierten mit Komma getrennt aus
                  - VARIANTLISTINACTIVE_KOMMA

Shop Admin

Durch die Generierung von Content durch das DOIT Content Modul wird eine alternative Langbeschreibung erstellt. Ist diese vorhanden wird sie anstatt der im Shop hinterlegten Langbeschreibung angezeigt.

Dazu können im Shop Administrations-Bereich bei Artikel und Kategorien einige Einstellungen gemacht werden.

Artikel

Wenn beim Artikel dennoch die Original Langbeschreibung angezeigt werden soll, muss “OXID Langbeschreibung” verwenden aktiv sein.

Bei Artikel Content Templates können, durch Komma, getrennt mehrere Templates eingetragen werden die bei der Generierung von Content nacheinander durchgearbeitet werden.

Wenn eine generierte Langbeschreibung vorhanden ist, wird sie unter der OXID Langbeschreibung angezeigt. Möchte man die OXID Langbeschreibung mit der generierte Langbeschreibung ersetzen genügt ein Klick auf “Langbeschreibung mit DOIT Langbeschreibung ersetzen. (Bitte darauf achten dass “OXID Langbeschreibung verwenden” aktiviert ist.

Kategorie

Wenn bei einer Kategorie dennoch die Original Langbeschreibung angezeigt werden soll, muss “OXID Langbeschreibung” verwenden aktiv sein.

Bei “Artikel Content Templates” können, durch Komma, getrennt mehrere Templates eingetragen werden die bei der Generierung von Content dieser Artikel nacheinander durchgearbeitet werden.

Bei “Kategrie Content Templates” können, durch Komma, getrennt mehrere Templates eingetragen werden die bei der Generierung von Content dieser Artikel nacheinander durchgearbeitet werden.

Wenn eine generierte Langbeschreibung vorhanden ist, wird sie unter der OXID Langbeschreibung der Kategorie angezeigt. Möchte man die OXID Langbeschreibung mit der generierten Langbeschreibung ersetzen genügt ein Klick auf “Langbeschreibung mit DOIT Langbeschreibung ersetzen. (Bitte darauf achten dass “OXID Langbeschreibung verwenden” aktiviert ist.

Ausgabe des generierten Contents

Der generierte Content überschreibt keine originale Artikel oder Kategoriebeschreibungen!

Soll Content Artikel oder Kategorieabhänig erzeugt werden, z.B: für die Anzeige von “Informations-Blöcken” in der Sidebar, so genügt die Angabe von dboutput:

language:
  de:
    type:
      article/category/manufacturer:
        # übergeordnete Clearing Einstellungen
        clearing:
          general: true / false
          regex:
          replace:
          delete:
        # übergeordnete Einstellungen  
        settings:
          dboutput:
            - oxcategories__myfieldname

showresults

Manchmal ist es sinnvoll während der DOIT Content Generierung im Shop Admin-Bereich zu sehen was generiert wird. Mit showresult: true werden dann die Ergebnisse der Generierung angezeigt.

language:
  de:
    type:
      article:
        templates:
          artikel_template:
            settings:
              showresult: true

Wenn Sie z.B. anhand eines bestimmen Artikels die Generierung prüfen wollen, können Sie in der DOIT Konfiguration diesen einen Artikel über den query-Parameter selectieren, die Content Generierung für diesen 1 Artikel starten und den Step abbrechen inkl. Content Ausgabe.

task:
  module:
    id: doitcontentarticletexts
    name: Do It Content Artikel Texteblöcke  erstellen
    classname: DoItContent
    namespacename: WebTools\DoItContent\Application\Controller\Admin\DoIt
    active: true
    stepsize: 10
  steps:
    Generate_Article_Content:
      id: GenerateArticleContent
      active: true
      die: true
      query: "Select * from oxarticles where oxartnum='MyArtNum'"
      name: Artikel Content Generierung
      handling: run
      mode: dbtable
      functionname: generateArticleContent
      functionparams: artikel_template
      dbtable: oxarticles

Tipps

Erstellen Sie verschiedene YAML-Konfigurationsdateien im jeweiligen Sprachenordner

„Shopverzeichnis/source/modules/webtools/doitconfig/doitcontent/LanguageId/“

clearing.yaml

language:
  de:
    type:
      article:
        settings:
          clearing:
            general: true
            active: true
        clearing:
      category:
        settings:
          clearing:
            general: true
            active: true
        clearing:        

functions.yaml

language:
  de:
    functions:
      STATIC_PLATZHALTER1:
        class: MyStaticClass\...
        function: getStaticPlatzhalter1

dynfunctions.yaml

language:
  de:
    functions:
      DYN_PLATZHALTER1:
        class: MyDynClass\...
        function: getDynPlatzhalter1

article.yaml

language:
  de:
    type:
      article:
        # übergeordnete Clearing Einstellungen
        clearing:
          general: true / false
          regex:
          replace:
          delete:
        # übergeordnete Einstellungen  
        settings:

article_templates.yaml

language:
  de:
    type:
      article:
        templates:
          template1:
          template2:

article_template1_blocks.yaml

language:
  de:
    type:
      article:
        templates:
          template1:
            blocks:
              block1:
              block2:

category.yaml

language:
  de:
    type:
      category:
        # übergeordnete Clearing Einstellungen
        clearing:
          general: true / false
          regex:
          replace:
          delete:
        # übergeordnete Einstellungen  
        settings:

usw.

generated Settings

Das Modul generiert aus allen YAML-Dateien des Sprachverzeichnisses eine Datei

“generatedSettings.yaml”

im Ordner

„Shopverzeichnis/source/modules/webtools/doitconfig/doitcontent/“

Es kann sehr hilfreich sein sich diese Datei anzuschauen!

Fazit

Das DOIT Content Modul ist sehr komplex und wir empfehlen Ihnen schrittweise und “mit Konzept” vorzugehen. Bei Fragen freuen wir uns über Ihre Kontaktaufnahme!

DOIT Module Voraussetzungen

Jedes Modul von WebTools benötigt die Installation des WebTools-Basis Moduls.

Für die Anpassung / Entwicklung von DOIT Funktion oder eigenen DOIT Klassen ist eine DOIT (Workflow) Modul Professional Lizenz erforderlich.

Alle DOIT Module sind mit IonCube verschlüsselt.

DOIT Module Preise

Die DOIT Module sind sehr komplex und kaum zu vergleichen mit “einfachen OXID Modulen”. Für uns steht die Leistungsfähigkeit der Module, die Kosten und Zeit-Ersparnis und der Mehrwert der durch die Module erzeugt wird im Vordergrund.

Deshalb haben alle DOIT Module eine einmalige Lizenzgebühr die die Nutzung des Modules für 1 Jahr includiert. Die Module werden laufend fortentwickelt und deshalb berechnen wir in jedem Folgejahr automatisch eine jährliche Gebühr von 50% der ursprünglichen Lizenzgebühr damit das Modul aktiv bleibt. Soll das Modul nicht mehr genutzt werden senden Sie uns bitte eine Kündigung für das Modul an doit@webtools.de

Fragen zu DOIT Modulen?

Wir freuen uns darauf Sie unterstützen zu dürfen. Gerne erarbeiten wir das für Ihren Shop passende Optimierungskonzept.

Sie erreichen und telefonisch unter +49 89 45455580 oder per E-Mail an doit@webtools.de .

War dieser Artikel hilfreich?

Das ist großartig!

Vielen Dank für Ihr Feedback

Leider konnten wir nicht helfen

Vielen Dank für Ihr Feedback

Teilen Sie uns mit, wie wir diesen Artikel verbessern können!

Wählen Sie wenigstens einen der Gründe aus

Feedback gesendet

Wir wissen Ihre Mühe zu schätzen un werden versuchen, den Artikel zu korrigieren