Kentico фильтрует дубликаты в поиске - PullRequest
0 голосов
/ 08 июля 2020

У меня есть следующий сценарий для возврата результатов поиска связанных страниц. Мне нужно отфильтровать дубликаты страниц псевдонимов, а также отсортировать результаты по алфавиту. В настоящее время он возвращает и главную страницу, и страницу псевдонима, но не сортирует их.

<script runat="server">
    bool hasDegree;
    bool hasCertificate;
    bool hasLetter;
    protected override void OnInit(EventArgs e)
    {
        base.OnInit(e);
        hasDegree = ValidationHelper.GetBoolean(CMS.DocumentEngine.DocumentHelper
           .GetDocuments("FCC.Credential").Path(Eval<string>("NodeAliasPath"), CMS.DocumentEngine.PathTypeEnum.Children)
           .Published().Where("CredentialType = 'D'").Count > 0, false);
           
        hasCertificate = ValidationHelper.GetBoolean(CMS.DocumentEngine.DocumentHelper
           .GetDocuments("FCC.Credential").Path(Eval<string>("NodeAliasPath"), CMS.DocumentEngine.PathTypeEnum.Children)
           .Published().Where("CredentialType = 'C'").Count > 0, false);
           
        hasLetter = ValidationHelper.GetBoolean(CMS.DocumentEngine.DocumentHelper
           .GetDocuments("FCC.Credential").Path(Eval<string>("NodeAliasPath"), CMS.DocumentEngine.PathTypeEnum.Children)
           .Published().Where("CredentialType = 'L'").Count > 0, false);         
    }

    protected string imageFilePath(string cssClass, string baseImageName)
    {
        string fileResolution = (cssClass == "desktop") ? "320x200" : "180x180";

        if (baseImageName.Trim().ToLower().EndsWith(".mp4"))
        {
            string baseName = baseImageName.Trim();
            baseName = baseName.Substring(0, baseName.Length - 4);
            return "/FCC/media/ProgramsOfStudy/Video/" + baseName + "_" + fileResolution  + ".jpg";
        }

        return "/FCC/media/ProgramsOfStudy/" + fileResolution + "_" + baseImageName;
    }
</script>

Также это можно найти в шаблоне страницы под названием: RepeaterWithCustomQuery

WITH FOLDER_QUERY AS
(
    SELECT NODEID, NODEPARENTID FROM VIEW_CMS_TREE_JOINED
    WHERE CLASSNAME = 'FCC.CREDENTIALFOLDER'
),
CREDENTIAL_QUERY AS
(
    SELECT CREDENTIALTYPE, NODEPARENTID FROM FCC_CREDENTIAL
    JOIN VIEW_CMS_TREE_JOINED
        ON [CREDENTIALID] = DOCUMENTFOREIGNKEYVALUE
    WHERE CLASSNAME = 'FCC.CREDENTIAL'
    -- IsPublished 
    AND ([DocumentCanBePublished] = 1 AND ([DocumentPublishFrom] IS NULL OR [DocumentPublishFrom] <= GETDATE()) AND ([DocumentPublishTo] IS NULL OR [DocumentPublishTo] >= GETDATE()))
),
CP_QUERY AS
(
  SELECT CREDENTIALTYPE, FOLDER_QUERY.NODEPARENTID
  FROM FOLDER_QUERY 
  JOIN CREDENTIAL_QUERY 
    ON FOLDER_QUERY.NODEID = CREDENTIAL_QUERY.NODEPARENTID
),
PROGRAM_QUERY AS
(
    SELECT
    (SELECT COUNT(*) FROM CP_QUERY WHERE CP_QUERY.NODEPARENTID = NODEID AND CP_QUERY.CREDENTIALTYPE = 'C') as Certificate,
    (SELECT COUNT(*) FROM CP_QUERY WHERE CP_QUERY.NODEPARENTID = NODEID AND CP_QUERY.CREDENTIALTYPE = 'L') as Letter,
    (SELECT COUNT(*) FROM CP_QUERY WHERE CP_QUERY.NODEPARENTID = NODEID AND (CP_QUERY.CREDENTIALTYPE = 'C' OR CP_QUERY.CREDENTIALTYPE = 'L')) as CertAndLetter,
    (SELECT COUNT(*) FROM CP_QUERY WHERE CP_QUERY.NODEPARENTID = NODEID AND CP_QUERY.CREDENTIALTYPE = 'D') as Degree,
    0 as CEWD,
    NodeParentID,
    DocumentName,
    ClassName,
    BaseImageName,
    ImageAltText,
    NodeAliasPath,
    DocumentUrlPath,
    DocumentCulture,
    Description
    FROM [FCC_PROGRAM] JOIN VIEW_CMS_TREE_JOINED
        ON [PROGRAMID] = DOCUMENTFOREIGNKEYVALUE
    WHERE CLASSNAME = 'FCC.PROGRAM'
        -- IsPublished 
    AND ([DocumentCanBePublished] = 1 AND ([DocumentPublishFrom] IS NULL OR [DocumentPublishFrom] <= GETDATE()) AND ([DocumentPublishTo] IS NULL OR [DocumentPublishTo] >= GETDATE()))
),
CEWD_QUERY AS
(
    SELECT
        0 AS Certificate,
        0 AS Letter,
        0 AS CertAndLetter,
        0 AS Degree,
        1 AS CEWD,
        NodeParentID,
        DocumentName,
        ClassName,
        BaseImageName,
        ImageAltText,
        NodeAliasPath,
        DocumentUrlPath,
        DocumentCulture,
        Description
    FROM [FCC_CEWDPROGRAM] JOIN VIEW_CMS_TREE_JOINED
        ON [CEWDPROGRAMID] = DOCUMENTFOREIGNKEYVALUE
    WHERE CLASSNAME = 'FCC.CEWDPROGRAM'
        -- IsPublished 
    AND ([DocumentCanBePublished] = 1 AND ([DocumentPublishFrom] IS NULL OR [DocumentPublishFrom] <= GETDATE()) AND ([DocumentPublishTo] IS NULL OR [DocumentPublishTo] >= GETDATE()))
),
COMBINED_QUERY as
(
    SELECT * FROM PROGRAM_QUERY
    UNION 
    SELECT * FROM CEWD_QUERY
)

SELECT * FROM COMBINED_QUERY
WHERE ##WHERE##

1 Ответ

0 голосов
/ 08 июля 2020

В DocumentQuery добавьте .FilterDuplicates(), и он должен удалить эти повторяющиеся записи за вас. Имейте в виду, что он НЕ вернет связанные документы, только основной документ.

*** ОБНОВЛЕНИЕ *** На основе обновленного вопроса запрос, с помощью которого вы обновили свой вопрос, выглядит как запрос, созданный Kentico. Я не уверен, почему он был создан, но я бы установил для этого репитера значение false, добавил новый репитер на страницу и установил свойства по вашему усмотрению. Затем обновите условия WHERE по мере необходимости.

...