Silverstripe 4 Fluent Locale Menu - 如何确定页面是否存在于实际区域设置中?

问题描述 投票:0回答:2
Silverstripe 4.3 / tractorcow/silverstripe-fluent (master)

我想在LocaleMenu.ss中隐藏或突出显示导航条目。因此,我必须弄清楚实际的语言环境中是否有实际页面的实时版本。这似乎没有内置。

我是新来的所以SS4Fluent,看了一些流利的方法,但无法弄明白。任何帮助,将不胜感激...

php fluent silverstripe-4
2个回答
0
投票

因为在我的情况下它仅用于Pages,所以我创建了一个我在模板中调用的自定义查询功能。

  $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();

0
投票

您可以使用修改后的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
© www.soinside.com 2019 - 2024. All rights reserved.