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
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.
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);
}
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.