CE 4: Neuen statischen SEO-Link definieren

Ich habe eine Variante der “Contact”-Klasse entwickelt, die “Callback”-Informationen enthält (Fon-Nr., gewünchtes Rückrufdatum und -zeit).

Die funktioniert auch prächtig…

Jetzt suche ich noch den Weg, wie man für die neue Klasse eine statische SEO-Url definieren kann, so dass die statt als “index.php?cl=callback” als “callback” verlinkt wird.

Gibt es dafür eine Admin-Funktion?

Oder wie löst man so etwas?

In “[B]oxseoencoder.php[/B]” habe ich zwar eine

public function encodeStaticUrls( $aStaticUrl, $iShopId, $iLang )

gefunden, die so etwas offenbar machen würde, aber keine Stelle im Shop, an der diese Funktion verwendet wird…

Hallo avenger,

dir kann ganz einfach geholfen werden.
Geh in den Admin -> Stammdaten -> Grundeinstellungen -> SEO
ganz unten "Statische URLs anlegen"
Dort einfach dein “index.php?cl=callback” eintragen und die gewünschte SEO-URL darunter…

… und fertig ist die SEO - URL

Grüße
Mathias

Jo, ist ja wirklich einfach…

Da ich mir aber später diese händische Arbeit bei Kundeninstallationen sparen möchte, habe ich den entsprechenden OXID-Code debugged, und die SQL-Befehle ermittelt, mit der diese SEO-URLs in die DB geschrieben werden.

So kann ich mir die entsprechenden SQL-Befehle aufbereiten, und per PHPMyAdmin in die DB schreiben, und muss nicht im Admin-Bereich eingreifen…

“[B]oxbaseshop[/B]” ist der betroffene Shop.
"[B]index.php?cl=callback[/B]" ist die Standard URL
"[B]callback/[/B]" ist die gewünschte SEO URL

Mit folgendem SQL-Befehl kann man dann die neue SEO-URL erzeugen:

SET SESSION sql_mode='';
insert into oxseo
(oxobjectid, oxident, oxshopid, oxlang, oxstdurl, oxseourl, oxtype) 
values 
#Deutsch
(md5(lower('oxbaseshopindex.php?cl=callback')), md5(lower('callback/')), 'oxbaseshop', 0,'index.php?cl=callback','callback/','static'),
#English
(md5(lower('oxbaseshopindex.php?cl=callback')), md5(lower('callback/')), 'oxbaseshop', 1,'index.php?cl=callback','callback/','static');

super :slight_smile:

danke für den SQL Code

Hi,

ich will zwar keine “Leichen” ausgraben, aber meine Frage passt genau auf das Thema.

Ich will einen neuen statischen Seo Link erstellen und habe mir dafür eine Funktion geschrieben.
In der Funktion prüfe ich zuerst ab ob der Link exisitiert mittels:


$seoUrl = oxRegistry::get("oxSeoEncoder")->getStaticUrl($sdtUrl);

ist $seoUrl leer existiert der Link nicht und ich erstelle ihn mittels der Funktion:
oxRegistry::get(“oxSeoEncoder”)->encodeStaticUrls oder mittels dem sql befehl von avenger. Beides Wege Funktionieren und er schreibt die statische Seo Url in die DB. (Habe ich nachgeschaut die Einträge sind in der DB vorhanden)

Wenn ich jedoch danach sofort wieder

$seoUrl = oxRegistry::get("oxSeoEncoder")->getStaticUrl($sdtUrl);

aufrufe in meiner Funktion bekomme ich keine SeoUrl zurück.

Erst wenn ich meine Funktion(die die Seo Url abprüft und ggf. erstellt) erneut aufrufe bekomme ich eine Seo Url mittels ‘getStaticUrl’ zurück.

Wisst ihr vielleicht wo mein Fehler liegt? Oder kann es sein das ich den Seo Url Cache aktualisieren muss? Ich stehe gerade ziemlich auf dem schlauch.

Ich krame zwar einen alten Thread wieder raus aber ich glaube ich habe das Problem gefunden: oxseoencoder.php Funktion getStaticUrl


    public function getStaticUrl($sStdUrl, $iLang = null, $iShopId = null)
    {
        if (!isset($iShopId)) {
            $iShopId = $this->getConfig()->getShopId();
        }
        if (!isset($iLang)) {
            $iLang = oxRegistry::getLang()->getEditLanguage();
        }

        if (isset($this->_aStaticUrlCache[$sStdUrl][$iLang][$iShopId])) {
            return $this->_aStaticUrlCache[$sStdUrl][$iLang][$iShopId];
        }

        $sFullUrl = '';
        if (($sSeoUrl = $this->_getStaticUri($sStdUrl, $iShopId, $iLang))) {
            $sFullUrl = $this->_getFullUrl($sSeoUrl, $iLang, strpos($sStdUrl, "https:") === 0);
        }


        $this->_aStaticUrlCache[$sStdUrl][$iLang][$iShopId] = $sFullUrl;

        return $sFullUrl;
    }

Diese Funktion habe ich benutzt um zu schauen ob eine static seo url bereits existiert und returned werden kann bevor ich Sie anlege.
In der Funktion wird geschaut ob im Cache die URL existiert. Ist dies nicht der Fall wird sie sich über _getFullUrl gehohlt und anschließend in den Cache gelegt.
Da die Variable $sFullUrl aber leer sein wird wenn der Static Link noch nicht exisitiert legt er einen leeren Wert in den Cache.
Diesen Leeren Wert returned er natürlich beim zweiten Aufruf da isset nicht Fehlschlägt.

Ist das ein “Fehler” und wäre es nicht geschickter

$this->_aStaticUrlCache[$sStdUrl][$iLang][$iShopId] = $sFullUrl;

in die obere Klammer mit reinzunehmen so das der Link erst in den Cache geschrieben wird wenn er auch wirklich exisitiert?

P.s.: Soweit ich das gesehen habe ist getStaticUrl die einzige Funktion die die Variable _aStaticUrlCache bearbeitet. Zumnindest habe ich per Suche in den php Dateien keine weitere Stelle gefunden wo die Variable bearbeitet wird.