У меня есть следующий код для получения главного меню на моем сайте EzPublish 5.4:
$query = new LocationQuery();
$query->query = new Criterion\LogicalAnd(
array(
new Criterion\ContentTypeIdentifier( $this->getTopMenuContentTypeIdentifierList() ),
new Criterion\Visibility( Criterion\Visibility::VISIBLE ),
new Criterion\Location\Depth(
Criterion\Operator::BETWEEN,
array( $rootLocation->depth + 1, $rootLocation->depth + 3 )
),
new Criterion\Subtree( $rootLocation->pathString ),
new Criterion\LanguageCode( $configResolver->getParameter( 'languages' ) )
)
);
$query->sortClauses = array( new Query\SortClause\Location\Depth(), new Query\SortClause\Location\Priority() );
$main_menu = $searchService->findLocations( $query )->searchHits;
Это работает, я получаю все ожидаемые результаты, и теперь я передаю этот массив в свой шаблон Twig:
{% for item in menu %}
<a href="#menuitemurl">Menu item title in current language</a>
{% endfor %}
Два вопроса:
1: как получить URL для этого SearchHit, который будет отображаться в Twig? Я понятия не имею, где взять это, Google не помог
2: Как получить заголовок SearchHit на языке текущего сайта? Мой сайт многоязычный, каждый элемент доступен как на шведском, так и на английском языке, но я каким-то образом получаю только название на английском языке с указанным кодом, даже когда я на шведской версии
Вы можете загрузить соответствующие объекты контента следующим образом:
$contentList = [];
foreach ( $searchService->findLocations( $query )->searchHits as $hit )
{
$contentList[] = $this->contentService->loadContent( $hit->valueObject->contentInfo->id );
};
и передать $contentList[]
это к шаблону. Затем используйте его, чтобы получить полный URL-адрес контента.
Или визуализируйте содержимое в ваших шаблонах на основе идентификатора содержимого из ваших searchHits.
Других решений пока нет …