Meta Description anpassen

Ich versuche gerade dass Oxid bevorzugt aus der oxshortdesc die Meta Beschreibung ausliest.
Also sodass, wenn keine Meta Beschreibung in der Seo angegeben ist, dass die Information zuerst aus der oxshortdesc ausgelesen wird. Nur, wenn da nichts steht, soll dann die restliche Logik angewandt werden.

Ich habe schon versucht ganz simpel die base.tpl zu ändern.

[{block name="head_meta_description"}]
            [{if $oView->getMetaDescription()}]
                <meta name="description" content="[{$oView->getMetaDescription()}]">
                
                [{else}]
                <meta name="description" content="[{$oDetailsProduct->oxarticles__oxshortdesc->rawValue}]">
            [{/if}]
        [{/block}]
    Leider funktioniert das so nicht wie gewünscht. 

Nun dachte ich das ja irgendwo diese Anweisung sein muss.
In der details.php gibt es ja folgenden Code. Nur ich komme mit den Anweisungen nicht klar.
Wenn ich den Code

  if ($sMeta == '') {
                $sMeta = $oProduct->oxarticles__oxshortdesc->value;
            }

in

if ($sMeta not '') {
                $sMeta = $oProduct->oxarticles__oxshortdesc->value;
            }

ändere, wird das nicht angenommen. Wo muss ich überhaupt ansetzen?


/**
     * Returns current view meta data
     * If $sMeta parameter comes empty, sets to it article title and description.
     * It happens if current view has no meta data defined in oxcontent table
     *
     * @param string $sMeta     user defined description, description content or empty value
     * @param int    $iLength   max length of result, -1 for no truncation
     * @param bool   $blDescTag if true - performs additional dublicate cleaning
     *
     * @return string
     */
    protected function _prepareMetaDescription($sMeta, $iLength = 200, $blDescTag = false)
    {
        if (!$sMeta) {
            $oProduct = $this->getProduct();

            if ($this->getConfig()->getConfigParam('bl_perfParseLongDescinSmarty')) {
                $sMeta = $oProduct->getLongDesc();
            } else {
                $sMeta = $oProduct->getLongDescription()->value;
            }
            if ($sMeta == '') {
                $sMeta = $oProduct->oxarticles__oxshortdesc->value;
            }
            $sMeta = $oProduct->oxarticles__oxtitle->value . ' - ' . $sMeta;
        }

        return parent::_prepareMetaDescription($sMeta, $iLength, $blDescTag);
    }

Das Problem ist, dass die Funktion getMetaDescription() automatisch in die Artikel Longdescription schaut, sofern kein eigener SEO Text vorhanden ist.
Somit funktioniert deine erste “If MetaDescript else Shortdescription” Logik schon mal nicht, weil die Funktion immer etwas zurück gibt, wenn der Artikel eine longdescription hat.

Du müsstest im Endeffekt nur die Reihenfolge in der Funktion _prepareMetaDescription umstellen, etwa so:

protected function _prepareMetaDescription($sMeta, $iLength = 200, $blDescTag = false)
{
    if (!$sMeta) {
        $oProduct = $this->getProduct();

        // prüfen, ob es shortdescription gibt
        if(trim($oProduct->oxarticles__oxshortdesc->value)) 
        {
            // meta aus shortdesc erstellen
            $sMeta = $oProduct->oxarticles__oxshortdesc->value;
        }
        else if ($this->getConfig()->getConfigParam('bl_perfParseLongDescinSmarty'))
        {
            $sMeta = $oProduct->getLongDesc();
        }
        else $sMeta = $oProduct->getLongDescription()->value;
        
        $sMeta = $oProduct->oxarticles__oxtitle->value . ' - ' . $sMeta;
    }

    return parent::_prepareMetaDescription($sMeta, $iLength, $blDescTag);
}

Ich habe das mal ausprobiert. Nicht so ganz was ich wollte[QUOTE][/QUOTE]

Den Code habe ich mal geändert.

protected function _prepareMetaDescription($sMeta, $iLength = 200, $blDescTag = false)
{
    if (!$sMeta) {
        $oProduct = $this->getProduct();

        // prüfen, ob es shortdescription gibt
        if(trim($oProduct->oxarticles__oxshortdesc->value)) 
        {
            // meta aus shortdesc erstellen
            $sMeta = $oProduct->oxarticles__oxshortdesc->value;
        }
        else if ($this->getConfig()->getConfigParam('bl_perfParseLongDescinSmarty'))
        {
            $sMeta = $oProduct->getLongDesc();
        }
        else $sMeta = $oProduct->getLongDescription()->value;
        
    }

    return parent::_prepareMetaDescription($sMeta, $iLength, $blDescTag);
} 

Ich habe dabei den Teil:

// prüfen, ob es shortdescription gibt
        if(trim($oProduct->oxarticles__oxtitle->value)) 
        {
            // meta aus shortdesc erstellen
            $sMeta = $oProduct->oxarticles__oxshortdesc->value;
        }

durch

// prüfen, ob es shortdescription gibt
        if(trim($oProduct->oxarticles__oxshortdesc->value)) 
        {
            // meta aus shortdesc erstellen
            $sMeta = $oProduct->oxarticles__oxshortdesc->value;
        }

ersetzt.

Und den Teil:

$sMeta = $oProduct->oxarticles__oxtitle->value . ' - ' . $sMeta;

Gelöscht.

Den Teil finde ich sowie so überflüssig.

Zumindest scheint es den gewünschten Effekt zu haben. Schon mal vielen Dank dafür. Ich habe mir dabei richtig einen abgebrochen.

Ob das für SEO gut oder schlecht ist, kann ich noch nicht sagen.

Was meinen die Experten dazu?

das mit oxtitle war ein copy-paste Fehler :frowning:
habs jetzt auch im Code nachgebessert

Mist. Jetzt muss ich doch noch mal nachfragen.
Ich wollte das ganze in ein Modul pressen, aber irgendwas ist falsch.

Hier meine metadata.php

<?php
/**
 * Module information
 */
$sMetadataVersion = '1.1';

$aModule = array(
    'id' => 'mbm_seo',
    'title' => 'Seo Einstellungen',
    'description' => 'SEO-Extensions ',
    'thumbnail' => '',
    'version' => '1.0',
    'author' => '',
    'extend' => array(
        'details' => 'mbm_seo/detailsdescription',
   ),
    
);
?>

und dann den Teil der die details.php überschreibt.

<?php
class Detailsdescription extends Detailsdescription_parent
{

protected function _prepareMetaDescription($sMeta, $iLength = 200, $blDescTag = false)
{
    if (!$sMeta) {
        $oProduct = $this->getProduct();

        // prüfen, ob es shortdescription gibt
        if(trim($oProduct->oxarticles__oxshortdesc->value))
        {
            // meta aus shortdesc erstellen
            $sMeta = $oProduct->oxarticles__oxshortdesc->value;
        }
        else if ($this->getConfig()->getConfigParam('bl_perfParseLongDescinSmarty'))
        {
            $sMeta = $oProduct->getLongDesc();
        }
        else $sMeta = $oProduct->getLongDescription()->value;

    }

    return parent::_prepareMetaDescription($sMeta, $iLength, $blDescTag);
}
  }

Habe ich da was übersehen?

Heißt die Datei detailsdescription.php?

Ansonsten glaube ich, dass die Klassennamen case sensitive sind
detailsdescription <> Detailsdescription

    'extend' => array(
        'details' => 'mbm_seo/[b]d[/b]etailsdescription',
   ),
class [b]D[/b]etailsdescription extends

Verstehe ich jetzt nicht. Genauso habe ich das doch geschrieben.

eben, ich hab ja auf den möglichen Fehler hingewiesen :smiley:

Auch klein geschrieben geht das nicht. Ich finde den Fehler einfach nicht.

dann müsstest du am besten das Modul zippen und hier anhängen

Habe ich mal hochgeladen.

wenn du den Zeilenumbruch in der Zeile 1 in metadata.php entfernst, dann gehts

Bei mir nicht.

tmp/ geleert?
versuch auch Modul zu deaktivieren, tmp/ zu leeren und dann wieder zu aktivieren.

Ansonsten hier mein demo shop: https://oxid.mb-dev.de/4.10/Wakeboarding/Sets/probe.html
in der meta description ist shortdesc drin

Nichts zu machen. Das Modul wird noch nicht einmal mehr aufgelistet.

Ist ja nicht das erste Modul was ich für mich erstelle, aber sowas hatte ich noch nicht.

Ah, doch. Jetzt.
Ich hatte die vendormetadata.php drin. Und vorher hatte der Pfad bei mir nicht gestimmt.

Betrifft - OXID CE 6.1.4

Hi Oxid-Profis,

ich stehe gerade auf dem Schlauch und bekomme es gerade nicht hin, die Metadescription selber pflegbar zu machen.

Es soll bei den Kategorien sein. Ich habe im Admin-Bereich schon ein Feld für die alternative Metadescription drinnen, welches den Wert in der Datenbank speichert.

Nun stehe ich aber total auf dem Schlauch und habe keinen Überblick, welche Methode in welcher Klasse ich überschreiben muss, damit das auch im Frontend angezeigt wird?
Kann mir hier jemand einen Tip geben?

Etwas aneres ist mir aufgefallen:
Bei der OXID-Quellcode-Dokumentation sind keine Verlinkungen mehr zu den direkten Zeilen in den Quellcode-Dateien mehr. Mache ich hier etwas falsch oder wurde das tatsächlich entfernt?
Siehe:
https://docs.oxid-esales.com/sourcecodedocumentation/6.1.4/class_oxid_esales_1_1_eshop_community_1_1_application_1_1_controller_1_1_frontend_controller.html#a653cf9082516cf5a172bd694b62e86ab

Denn ich fande es immer schön, in den Code von einzelnen Methoden bei Bedarf rein zu sehen.

Danke vorab.