https://docs.octobercms.com/3.x/cms/components/sitepicker.html#translating-url-parameters
MihailBishkek (2093.36) увеличил карму kuatmus (345.77) 💙💛
Спасибо, читал доку :) не до конца я пока разобрался как для мульти сайта в коде генерить урлы на страницы для разных локалей
Там вроде группы сайтов вроде добавили, через них думаю
Ой вей, если через пару часиков маякнешь, я скину кусок кода
не с ноутом просто, но я это делал как раз для sitemap )
Как раз поспать хочу немного, у меня 3 ночи :)
Я вот тоже карту сайта переписываю под свежий октябрь, и затупил на моменте локализации урлов
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); }
anik1ng (2600.17) увеличил карму ichishkala (1594.77) 💙💛
надеюсь то, что ищешь
Да я примерно так же написал, накопал тоже в исходниках. Воткнулся на статик пейджах в каком-то моменте, отосплюсь буду разбираться уже дальше. Но конечно поможет код твой
Я короче ни с помощью твоего кода, ни с помощью исходников так и не разобрался как адекватно получить перевод адресов для 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'
Можно сделать так: \Site::setActiveSiteId($id); или так: \Site::setActiveSite($site); И дальше получать URL стандартными методами. Посмотри здесь modules/system/classes/SiteManager.php
Обсуждают сегодня