Silverstripe 4 Fluent Locale菜单-如何确定页面在实际语言环境中是否存在?

时间:2019-02-22 11:09:38

标签: php fluent silverstripe-4

Silverstripe 4.3 / tractorcow/silverstripe-fluent (master)

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

我是新来的,所以SS4Fluent曾研究过一些流利的方法,但无法弄清楚。任何帮助将不胜感激...

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

您可以使用修改后的FluentState上下文检查页面在给定语言环境中是否存在:

WHERE Table2.[IP Address] Is Null

如果您知道语言环境并且已经具有页面实例,则也可以使用以下方法之一:

$pageInLocale = FluentState::singleton()->withState(function (FluentState $newState) use ($pageId, $locale) {
    $newState->setLocale($locale);
    return Page::get()->byID($pageId);
});