Seourl über Artikelnummer

Hallo Forum,

ist es möglich einen Link über die Artikelnummer zu generieren?
Ich kann ja über die oxid den Artikel wie folgt aufrufen:

<a href="[{ oxgetseourl oxid="10ad15ce5d547cfbf8a4b6f92a520aa4" type="oxarticle" }]">test</a>

Besser les- und kontrollierbar wäre ein Aufruf wie:

<a href="[{ oxgetseourl oxartnum="MeineArtikelNr" type="oxarticle" }]">test</a>

Das gleiche Problem bei den Kategorien.

Ich habe jetzt schon einige Stunden gesucht aber nichts gefunden.
Kann mir jemand helfen?

Danke

Jürgen

Hallo Jürgen,

hilft Dir das weiter :http://forum.oxid-esales.com/showthread.php?t=17385

Viele Grüße
Oliver

Hallo Oliver,

nicht ganz.
Ich möchte ja die seourl nicht ändern (wie in diesem thread beschrieben), sondern anhand der Artikelnummer auslesen.
Die seourl wird aus der Tabelle oxseo ausgelesen, dort ist aber nur die oxid und die seourl gespeichert.
Es müsste über eine DB-Abfrage die Verknüpfung mit der Artikeltabelle und der Seotabelle hergestellt und die seourl dann ausgelesen werden.

Ich könnte mir vorstellen, dass das schon einmal jemand gebaut hat!?

Gruß

Jürgen

Hallo Jürgen,

okay, das hatte ich falsch verstanden… Aber genau wegen solchen Sachen habe ich bei uns die OXID durch die Artikelnummer ersetzt, auch bei den Kategorien. Grade wenn man offline die Struktur entwirft hilft das.

Ich würde jetzt beide Tabellen in ein Tabellenkalkulationsprogramm Deiner Wahl laden und nach OXID sortieren lassen.

Mit freundlichen Grüßen
Oliver

Hallo Oliver,

hier mein Ansatz für ein Modul:

    public function getseourlbyartnum( $sArticleNo )
    {
        $myConfig = $this->getConfig();

        // Performance
        if ( !$myConfig->getConfigParam( 'bl_perfLoadAccessoires' ) ) {
            return;
        }

        $sArticleNo = oxDb::getDb()->quote($sArticleNo);

        $oBaseObject   = $this->getBaseObject();
        $sArticleTable = $oBaseObject->getViewName( 'oxarticles' );
        $sSeoTable     = $oBaseObject->getViewName( 'oxseo' );

        $sSelect  = "select $sSeoTable.oxseourl from $sSeoTable left join $sArticleTable on $sSeoTable.oxobjectid=$sArticleTable.oxid ";
        $sSelect .= "where $sArticleTable.oxartnum = '&sArticleNo' and " .$oBaseObject->getSqlActiveSnippet();

        /** $this->selectString( $sSelect ); */
return $sSelect;
    }

Kann da jemand helfen? :wink:

ist nicht der ‘umgekehrte’ Weg einfacher?
Also in der Tabelle oxseo einen Datensatz eintragen mit OXSEOURL -> artikelnummer.html und im OXSTDURL ->index.php?cl=details&anid=OXID (von artikelnummer)
Diese Links funktionieren dann ohne irgendein zusätzliches Modul oder Änderung am Code …

Hallo Patchwork,

Danke für die Antwort.
Ich habe ein Problem mir irgend eine beliebige oxid zu merken :frowning: bzw. die später in einem cms Text Korrektur zu lesen.
Als Shopbetreiber, finde ich, arbeitet man mit seinen Artikelnummern einfacher als mit einer zufälligen oxid.
Wenn ich einmal ein Modul oder eine Funktion mit der Artikelnummer habe, brauche ich auch nicht bei neuen Artikeln in der DB an der oxid basteln wie hier in verschiedenen Threads beschrieben.
Damit hätte jeder unter dem Strich mehr Zeit für anderes und google würden die Seolinks in den CMS Texten auch noch gefallen.:slight_smile:

Was mein Ihr?

… und einfach die Artikelnummer im Suchfeld eingeben?

Hallo Patchwork,
was hilft das?
Ich brauche die SEOURL im CMS-Text.

Ist es vielleicht das, was Du suchst?

http://forum.oxid-esales.com/showthread.php?t=10076


[{$oCategory->getLink()}]  

Sollte beispielsweise den Link liefern.

Hallo novalgin,

Danke!!!
Genau das war es.

Danke von dieser Stelle auch an aggrosoft für die Funktion.
Die Seourl für den Artikel bekomme ich jetzt so wie folgt:


[{agload artnum="DIEARTIKELNUMMERHIER" type="oxarticle" assign="oArticle"}]
[{$oArticle->getMainLink()}]

Noch eine Frage zum Unterschied.
Die Seourl kann man mit [{$oArticle->getMainLink()}]
und mit [{$oArticle->getLink()}]
abrufen.
Was ist der Unterschied?

Siehe selbst:)


public function getLink( $iLang = null, $blMain = false  )
     {
         if ( !oxRegistry::getUtils()->seoIsActive() ) {
             return $this->getStdLink( $iLang );
         }
 
         if ( $iLang === null ) {
             $iLang = $this->getLanguage();
         }
 
         $iLinkType = $this->getLinkType();
         if ( !isset( $this->_aSeoUrls[$iLang][$iLinkType] ) ) {
             $this->_aSeoUrls[$iLang][$iLinkType] = $this->getBaseSeoLink( $iLang, $blMain );
         }
 
         $sUrl = $this->_aSeoUrls[$iLang][$iLinkType];
         if ( isset($this->_aSeoAddParams[$iLang])) {
             $sUrl .= ( ( strpos( $sUrl.$this->_aSeoAddParams[$iLang], '?' ) === false ) ? '?' : '&' ).$this->_aSeoAddParams[$iLang];
         }
 
         return $sUrl;
     }
 
     public function getMainLink( $iLang = null )
     {
         return $this->getLink( $iLang, true );
     }

Das hilft Dir in Zukunft mit Sicherheit sehr:
http://docu.oxid-esales.com/CE/sourcecodedocumentation/