Seite 1 von 1

DirectURL ohne /products/

Verfasst: So 26. Jun 2011, 17:53
von xtsell
Ich habe gerade den webs shop installiert und da es im konkreten Fall um eine überschaubare Anzahl von Produkten geht, möchte ich gern die Produkt-URLs ohne zusätzliche Verzeichnisse haben. Da außerdem die wesentlichen Keywords immer in der Produktbezeichnung stehen, kann bei den Produkten auch der Verzeichnispfad entfallen.

Ziel ist somit folgende flache Struktur: http://www.example.com/mein-tolles-produkt.html

Ich habe gesucht, ob es schon eine Lösung dafür gibt, aber hier im Forum gar nichts dazu gefunden. Bei meiner Google-Suche habe ich zwar festgestellt, dass ich nicht der erste mit dieser Anforderung bin, aber eine Lösung scheint es nicht zu geben. Daher habe ich mich selbst ans Werk gemacht und relativ schnell eine Lösung gefunden. Jedenfalls hoffe ich, dass es eine ist, denn sie ist fast schon zu einfach.

In der bluegate_seo.inc.php habe ich die getProductLink() dahingehend verändert, dass der Wert für DIRECTURL_PRODUCTS_URL_NAME inkl. / entfällt. Die getCategoryPathForProduct() gibt nun NULL zurück. Damit werden die Produkt URLs wie gewünscht erzeugt.

Damit nun auch der Aufruf funktioniert, ist eine Änderung in der .htaccess erforderlich. Die Produktabfrage kommt nicht mehr als erste, sondern nach den Abfragen auf content, popup und tags:

Code: Alles auswählen

    # Rule: Product Info
    RewriteRule ^(.+)\.html$ product_info.php?bluegatemapto=product&linkurl=$1 [qsappend,L]
Ist es wirklich so einfach oder habe ich etwas übersehen? Bisher habe ich nur einige Kategorien und Produkte definiert und dafür funktioniert es problemlos. Selbst mehrsprachig würde es klappen (wird aber hier nicht benötigt).

Re: DirectURL ohne /products/

Verfasst: So 26. Jun 2011, 19:01
von Xantiva
Hallo xtsell,

ändern der Core Dateien ist immer schlecht ;) Merkt man spätestens beim nächsten Update.

Im Konstructor der Klasse BlueGateSeo (bluegate_seo.inc.php) wird geprüft, ob die Konstante DIRECTURL_PRODUCTS_URL_NAME noch nicht definiert ist. Du könntest also im Template (/source/template_defaults.php) die einfach mit einem Leerstring definieren. Dass ergibt dann noch einen kleinen Schönheitsfehler mit zwei "//", den würde ich aber dann hier in der function getProductLink wie folgt lösen:

Code: Alles auswählen

		$parts = explode('/', DIRECTURL_PRODUCTS_URL_NAME.'/'.$product_link['url_text'].'.html');
		if (!empty($parts)) {
			foreach($parts as $key=>$part) {
				$parts[$key] = urlencode($part);
			}
			// Das kommt dann noch dazu.
			if ($parts[0] == '') {
				unset($parts[0]);
			}
		}
Mit dem Wegfall des Kategoriepfades ist das nicht ganz so elegant zu lösen, da im Backend die template_defaults.php nicht geladen wird. ;) Aber eine Lösung für Dich hast Du ja schon gefunden. ;)

Ciao,
Mike

Re: DirectURL ohne /products/

Verfasst: So 26. Jun 2011, 19:22
von Xantiva

Re: DirectURL ohne /products/

Verfasst: Mo 25. Mär 2013, 16:30
von rieste
Wird

Code: Alles auswählen

 define('DIRECTURL_PRODUCTS_URL_NAME','');
in der template_defaults.php gesetzt funktioniert der Shop nicht mehr!

Die Startseite ist leer und es kommt - keine Produkte gefunden.
Die Categorie Navigation funktioniert - klickt man auf ein Produkt kommt man auf die Startseite.

Kann den Fehler wer bestätigen?

edit: 26.03 -0834

Der Fehler liegt in der .htaccess hier wird

Code: Alles auswählen

    # Rule: Product Info
    RewriteRule ^(.*)products\/(.+)\.html$ product_info.php?bluegatemapto=product&linkurl=$2 [qsappend,L]
festgelegt.
d.h. ändert man die DIRECTURL_PRODUCTS_URL genau auf den Wert in der htaccess funktioniert es.
Will man sich das Level also sparen und will die products entfernen funktioniert es nicht!!