Aktuelle Seite auf Sub- & Sprachshop Variante prüfen?

Hallo zusammen,

existiert eine Methode, die die aktuelle Seite auf existierende Sub- & Sprachshop-Varianten prüft und diesbezüglich auch gleich ein Ergebnis zurück gibt?

Z.B. beim Aufruf von:
httts://www.example.com/article-name-123

erhält man:

array(
  subshopID = '2',
  url = 'https://www.example.de/artikel-name-123'
);

Gibt es hierfür etwas Out of the box, oder hat jemand einen Ansatz, wie man das am besten umsetzen könnte?

 

Vielen Dank für deine Hilfe und beste Grüße
Michael

Du meinst sowas wie href lang Tags/Verknüpfungen?

Hallo arnebecker,

ganz genau :wink:

Hast du bereits eine Lösung gefunden oder umgesetzt?

 

Beste Grüße
Michael

Also wenn es “nur” um die hreflang-Tags geht schau dir mal dieses Plugin an: http://store.shopware.com/bibu01549/sprachverlinkung.html?number=BIBU01549

Ich wollte es auch erst selbst machen und hab mir auch zuerst Gedanken über die Artikel gemacht. Aber der Spass geht ja noch weiter: Kategorien, Contenseiten, Blogeinträge usw. Kann das Plugin alles schon und ist auch wie ich finde wirklich günstig.

Die beiden Plugins im Store helfen dir nicht?

Nutzen z.B. diesen sehr unschönen Code für Artikel. Haben das aber auch noch für alle möglichen anderen Seitentypen. Out-of-the Box gibts das bei Shopware nicht.

	public function onPostDispatchFrontendDetail(Enlight_Event_EventArgs $args) {
		// prüfe in allen Subshops ob es Verknüpfungen gibt
		$request = $args->getSubject()->Request();
		$response = $args->getSubject()->Response();

		if(!$request->isDispatched() || $response->isException() || $request->getModuleName() != 'frontend') {
			return;
		}

		$controller = $args->getSubject();
		$view = $controller->View();

		// ermittle alle Kategorieverknüpfungen
		$article = $view->sArticle;
		$articleId = $article['articleID'];

		if(!isset($articleId) || empty($articleId)) {
			return;
		}

		$paths = $tags = [];

		$sql = "SELECT c.path
				FROM s_articles_categories AS ac
				INNER JOIN s_categories AS c
				ON ac.categoryID = c.id
				WHERE ac.articleID = ?";
		$results = Shopware()->Db()->fetchAll($sql, array($articleId));

		foreach($results as $r){
			$paths = array_merge($paths, array_filter(explode("|",$r["path"])));
		}
		$paths = array_unique($paths);

		$view->addTemplateDir($this->Path() . 'Views/');
		$view->extendsTemplate('frontend/plugins/pmw_href_lang_tags/index.tpl');

		// Ermittle alle Roots
		$sql = "SELECT l.locale, s.*
				FROM s_core_shops AS s
				INNER JOIN s_core_locales AS l
				ON s.locale_id = l.id
				WHERE s.active = '1'";
		$results = Shopware()->Db()->fetchAll($sql);
		foreach($results as $r){
			if (in_array($r["category_id"],$paths)){
				if (!empty($article["attr2"])){
					$tags[] = [
						"locale" => $r["locale"],
						"url" => sprintf("http%s://%s/%s", ($r["secure"] && $r["always_secure"]) ? "s" : "", ($r["secure"] && !empty($r["secure_host"])) ? $r["secure_host"] : $r["host"], $article["attr2"])
					];
				}
				else {
					$sql = "SELECT path FROM s_core_rewrite_urls WHERE org_path = :org_path AND main = '1' AND subshopID = :shopId";
					$params = [":org_path" => "sViewport=detail&sArticle=".$articleId, ":shopId" => $r["id"] ];
					$query = Shopware()->Db()->executeQuery($sql, $params);
					$row = $query->fetch();
					$tags[] = [
						"locale" => $r["locale"],
						"url" => sprintf("http%s://%s/%s", ($r["secure"] && $r["always_secure"]) ? "s" : "", ($r["secure"] && !empty($r["secure_host"])) ? $r["secure_host"] : $r["host"], $row["path"])
					];
				}
			}
		}

		// x-default
		if (count($tags)){
			$tags[] = [
				"locale" => "x-default",
				"url" => $tags[0]["url"]
			];
		}

		$view->assign('tags', $tags);
	}

 

1 Like

Hallo arnebecker,

vielen Dank für deine Plugin-Tipps! und deinen Code

Vielleicht hast du Recht und man sollte besser in diesem Fall auf ein günstiges und funktionierendes Plugin zurückgreifen. Ich werde mal das Sprachverlinkungs-Plugin testen und hier Bericht erstatten.

 

Beste Grüße
Michael