Как выбрать офсетные документы в Kentico? - PullRequest
0 голосов
/ 17 июня 2019

Я пытаюсь перечислить несколько дочерних страниц на основе самой последней даты, однако для некоторых разделов я хочу, чтобы первые 3 документа, а некоторые области - остальные статьи из одной и той же папки.

Мой текущий SQLоператоры выглядят следующим образом:

DocumentId NOT IN ( IF EXISTS 
  ( SELECT DocumentId 
      FROM CMS_DocumentCategory 
      WHERE CategoryId 
      IN ({%CurrentDocument.Categories.IDs#%}) 
        and DocumentID <> {% CurrentDocument.DocumentId #%} ) 
BEGIN SELECT TOP 3 DocumentId
      FROM CMS_DocumentCategory 
      WHERE CategoryId 
      IN {%CurrentDocument.Categories.IDs#%} 
        and DocumentID <> {% CurrentDocument.DocumentId #%}
      ORDER BY Date DESC
END ELSE SELECT 0 AS [value] END )

Однако даже после удаления всего блока кода веб-часть по-прежнему отображает только первые 4 или любой другой выбор, который я поместил в поле Top N Documents.

Я ожидаю, что результатом будут статьи 4-6 для примеров, но я получаю страницы 1-3

1 Ответ

0 голосов
/ 18 июня 2019

Не уверен, правильно ли я понимаю логику, но вот мои 2 цента, вы можете использовать sql TOP двумя способами:

SELECT  TOP 100 PERCENT  DocumentId  FROM CMS_DocumentCategory 

или

SELECT  TOP 3  DocumentId  FROM CMS_DocumentCategory

Итак, я бы создал 2 свойства для вашего типа страницы: Первый - TopDocuments , который может быть TOP 100 PERCENT или TOP 3, а другой DocumentsOrderBy , который может быть пустым или, например, ORDER BY DocumentCreatedWhen DESC или любой другой порядок

поэтому ваш последний запрос должен быть

DocumentId IN (  
SELECT  {%TopDocuments%}  DocumentId  FROM CMS_Document join CMS_DocumentCategory ON CMS_Document.DocumentID =  CMS_DocumentCategory.CategoryID
     WHERE CategoryId  IN {%CurrentDocument.Categories.IDs#%} and DocumentID <> {% CurrentDocument.DocumentId #%}
{%DocumentsOrderBy%}
)
...