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

16 ответов

32 просмотра

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

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

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

Портфолио: Зовут меня Александр, мне 36 лет. Город Пушкино. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github....
Magic
10
Ребят, привет. У кого-то есть опыт заказа мерча в сторе? Есть успешные кейсы? Чёт у меня турецкую карту не принимает
Vladimir F.
7
Всем привет. Есть кто разбирается в платежках? Что б принимать из других стран и выплачивать рф снг
Musa
6
Портфолио: Зовут меня Александр, мне 41 год. Город Киров. Общий рабочий стаж: ~14 лет Уровень квалификации: Senior Full-stack developer Где прочесть мой код? https://github.co...
Magic
11
Приветствую всех, есть вопросик. Передали проект на OctoberCms, без инсталяшки в полуразвернутом виде, нужно было залить бекап бд, после залития бд, оказалось, что части строк...
Лео
14
где собака, админ группы? нычкуется и боится проявить волю, в толерантность еще не наигрался? @yelizariev
Ognezar
61
Есть магистры regex в чате? Задача: нужно написать regex который мэтчит полные (без сокращений по типу ::1/128) ipv6 адреса кроме 2001:0df7:cef7:29f7:52f7:adf7:2cf7:4ff7, при ...
Илья
5
Подскажите, пожалуйста, где в backende, или не в нем можно дату поправить? Логирует действия не в том часовом поясе
Лео
7
всем привет. я правильно понимаю, что в телеграфе 4, если сессию указать у сообщения с коллбеком (кликнул на кнопку и установил сессию), то она не сохраняется?
Тимур
1
А как получить доступ к отправленному сообщению в ChosenInlineResult? Раньше кажется можно было, щас убрали?
net
2
Карта сайта