Silverstripe 4 Fluent Locale Menu - Как определить, существует ли страница в реальной локали? - PullRequest
0 голосов
/ 22 февраля 2019
Silverstripe 4.3 / tractorcow/silverstripe-fluent (master)

Я хотел бы скрыть или выделить элементы навигации в LocaleMenu.ss.Поэтому я должен выяснить, есть ли живая версия реальной страницы в фактической локали.Похоже, это не встроено.

Я новичок, поэтому SS4 и Fluent, посмотрел некоторые беглые методы, но не смог понять.Любая помощь будет оценена ...

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вы можете проверить, существует ли страница в данной локали, используя измененный контекст 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
0 голосов
/ 23 февраля 2019

Поскольку в моем случае это только для страниц, я создал специальную функцию запроса, которую я вызываю в шаблоне.

  $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();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...