Ребят, а как получить slug страницы для разных языков мультисайта?

16 ответов

61 просмотр

https://docs.octobercms.com/3.x/cms/components/sitepicker.html#translating-url-parameters

Михаил Фрускейт
+

MihailBishkek (2093.36) увеличил карму kuatmus (345.77) 💙💛

Constantine-Anikin Автор вопроса
Kuat Mustafin
https://docs.octobercms.com/3.x/cms/components/sit...

Спасибо, читал доку :) не до конца я пока разобрался как для мульти сайта в коде генерить урлы на страницы для разных локалей

Constantine Anikin
Спасибо, читал доку :) не до конца я пока разобрал...

Там вроде группы сайтов вроде добавили, через них думаю

Ой вей, если через пару часиков маякнешь, я скину кусок кода

не с ноутом просто, но я это делал как раз для sitemap )

Constantine-Anikin Автор вопроса
Igor
Ой вей, если через пару часиков маякнешь, я скину ...

Как раз поспать хочу немного, у меня 3 ночи :)

Constantine-Anikin Автор вопроса
Igor
не с ноутом просто, но я это делал как раз для sit...

Я вот тоже карту сайта переписываю под свежий октябрь, и затупил на моменте локализации урлов

Constantine Anikin
Я вот тоже карту сайта переписываю под свежий октя...

public function makeLocalUrl(string $code = 'et'): string { $locale = Site::listEnabled()->where('code', $code)->first() ?? Site::getActive(); $prefix = $locale->is_prefixed == 1 ? $locale->route_prefix : ''; $pageName = 'store/product'; // If your model slug is translatable use $params = ['slug' => $this->lang($locale->code)->slug]; //$params = ['slug' => 'gold-bracelet']; $theme = Theme::getActiveThemeCode(); $cmsPage = Page::loadCached($theme, $pageName); $cmsPage->rewriteTranslatablePageUrl($locale); $router = new \October\Rain\Router\Router; // $localeUrl = $router->urlFromPattern($cmsPage->url, $params); // If you need the locale prefix use $localeUrl = $router->urlFromPattern(sprintf("/%s%s", $prefix, $cmsPage->url), $params); return url($localeUrl); }

Constantine-Anikin Автор вопроса
Constantine Anikin
+ Пасибчик 👍

anik1ng (2600.17) увеличил карму ichishkala (1594.77) 💙💛

Constantine Anikin
+ Пасибчик 👍

надеюсь то, что ищешь

Constantine-Anikin Автор вопроса
Igor
надеюсь то, что ищешь

Да я примерно так же написал, накопал тоже в исходниках. Воткнулся на статик пейджах в каком-то моменте, отосплюсь буду разбираться уже дальше. Но конечно поможет код твой

Constantine-Anikin Автор вопроса
Igor
public function makeLocalUrl(string $code = 'et'):...

Я короче ни с помощью твоего кода, ни с помощью исходников так и не разобрался как адекватно получить перевод адресов для StaticPages. И не понял как именно CMS подменяет там url. Психанул и сам написал, вытаскивая адреса из viewBag: $tree = StaticPage::buildMenuTree($theme); $sites = Site::listEnabled(); $iterator = function ($items) use (&$iterator, &$tree, $sites, $theme) { $branch = []; foreach ($items as $itemName) { if (!array_key_exists($itemName, $tree)) { continue; } $itemInfo = $tree[$itemName]; foreach ($sites as $site) { $pageUrl = self::getPageUrl($theme, $itemName, $itemInfo, $site->locale); $branchItem = [ 'url' => $pageUrl, 'mtime' => $itemInfo['mtime'], ]; $branchItem['alternate_locale_urls'] = self::getAlternateUrls($theme, $itemName, $itemInfo, $sites); if ($itemInfo['items']) { $branchItem['items'] = $iterator($itemInfo['items']); } $branch[] = $branchItem; } } return $branch; }; $result = $iterator($tree['--root-pages--']); protected static function getPageUrl($theme, $itemName, $itemInfo, $locale) { $staticPage = StaticPage::loadCached($theme, $itemName); return \Cms::url(Translator::instance()->getPathInLocale(array_get($staticPage->viewBag, "localeUrl.{$locale}", $itemInfo['url']), $locale)); } protected static function getAlternateUrls($theme, $itemName, $itemInfo, $sites) { $alternateUrls = []; foreach ($sites as $site) { $pageUrl = self::getPageUrl($theme, $itemName, $itemInfo, $site->locale); $alternateUrls[$site->locale] = $pageUrl; } return $alternateUrls; } За код не пинайте, я ещё в процессе 🙂 Но вдруг кому пригодится для карты сайта выдергивать правильные url вместе с 'alternate_locale_urls'

Constantine Anikin
Я короче ни с помощью твоего кода, ни с помощью ис...

Можно сделать так: \Site::setActiveSiteId($id); или так: \Site::setActiveSite($site); И дальше получать URL стандартными методами. Посмотри здесь modules/system/classes/SiteManager.php

Похожие вопросы

Обсуждают сегодня

Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Привет!) Кто как юзает переменные в строках?) Чисто ради интереса Вот так: echo "У меня {$bananasAmount} бананов"; Или вот так: echo "У меня ${bananasAmount} бананов";
Виталий
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
разработчик ботов скидывает портфолио, боты которые он уже создал. А вот как узнать что это именно он их создал?
Gosudar
4
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта