Silverstripe 4 Fluent Locale Menu - Как определить, существует ли страница в реальной локали?
Silverstripe 4.3 / tractorcow/silverstripe-fluent (master)
Я хотел бы скрыть или выделить элементы навигации в LocaleMenu.ss
, Поэтому я должен выяснить, есть ли живая версия реальной страницы в фактической локали. Кажется, это не встроено.
Я новичок так SS4
а также Fluent
, взглянул на некоторые беглые методы, но не мог понять это. Любая помощь будет оценена...
2 ответа
Вы можете проверить, существует ли страница в данной локали, используя измененный контекст FluentState:
$pageInLocale = FluentState::singleton()->withState(function (FluentState $newState) use ($pageId, $locale) {
$newState->setLocale($locale);
return Page::get()->byID($pageId);
});
Если вы знаете локаль и уже имеете экземпляр страницы, вы также можете использовать один из следующих методов:
$page->existsInLocale($locale); // exists in either draft or live stage
$page->isDraftedInLocale($locale); // exists in draft stage
$page->isPublishedInLocale($locale); // exists in live stage
Поскольку в моем случае это касается только страниц, я создал специальную функцию запроса, которую я вызываю в шаблоне.
$sqlQuery = new SQLSelect();
$sqlQuery->setFrom('SiteTree_Localised_Live');
$sqlQuery->addSelect('COUNT("SiteTree_Localised_Live"."ID")');
$sqlQuery->addWhere(["RecordID" => $pageId, "Locale" => $locale]);
$sqlQuery->setGroupBy("ID"); // SS throwing error with MySQL 5.7 if no Group By
$count = $sqlQuery->execute()->value();