Sitecore树列表数据源-VersionExist

Sitecore树列表数据源-VersionExist,sitecore,treelist,Sitecore,Treelist,在Sitecore树列表控件中,我只想获得列出的元素,这些元素具有该语言的版本 我搜索了一下,发现有一些参数用于包含/排除项目/模板。但我不能在版本这样的条件下给出。计数>0 有没有一种方法可以通过将参数传递给模板的datasource字段来实现 还是需要覆盖树列表控件 Thanx这似乎有效,但我没有对其进行广泛测试 首先创建一个从MasterDataView继承的类。请注意,我没有用特定语言显式获取项目,因为您只关心基于当前上下文语言的过滤。如果您想更明确地说明这一点,请参见以下答案: 新的:

在Sitecore树列表控件中,我只想获得列出的元素,这些元素具有该语言的版本

我搜索了一下,发现有一些参数用于包含/排除项目/模板。但我不能在版本这样的条件下给出。计数>0

有没有一种方法可以通过将参数传递给模板的datasource字段来实现

还是需要覆盖树列表控件


Thanx

这似乎有效,但我没有对其进行广泛测试

首先创建一个从MasterDataView继承的类。请注意,我没有用特定语言显式获取项目,因为您只关心基于当前上下文语言的过滤。如果您想更明确地说明这一点,请参见以下答案:

新的:


这似乎是有效的,但我没有广泛测试它

首先创建一个从MasterDataView继承的类。请注意,我没有用特定语言显式获取项目,因为您只关心基于当前上下文语言的过滤。如果您想更明确地说明这一点,请参见以下答案:

新的:


这似乎是有效的,但我没有广泛测试它

首先创建一个从MasterDataView继承的类。请注意,我没有用特定语言显式获取项目,因为您只关心基于当前上下文语言的过滤。如果您想更明确地说明这一点,请参见以下答案:

新的:


这似乎是有效的,但我没有广泛测试它

首先创建一个从MasterDataView继承的类。请注意,我没有用特定语言显式获取项目,因为您只关心基于当前上下文语言的过滤。如果您想更明确地说明这一点,请参见以下答案:

新的:



您不能开箱即用,因此需要编写自定义树列表。如果不存在任何版本,可以重写Add()方法并生成警报。但你为什么要这么做?如果有人删除了字段中引用的项的版本,它将保持被引用状态,并且树列表数据将变为“无效”。在查询演示文稿树状列表字段中的所有项目时,为什么不检查有效版本?要求没有版本的项目不应显示在列表中(我是指树状列表控件的左侧列表),顺便说一句,您的意思是重写Sitecore.Shell.Applications.ContentEditor.TreeList类中的外接程序方法?那么,我应该在哪个配置文件中引用我的新CustomTreeList类?@EngelbertCoder此链接将帮助您开始创建自定义字段类型。请查看@TwentyGotton的答案。当作者希望将广告项添加到列表中时,将调用
Add()
方法。这并不完全符合您的要求,因为所有项目仍然显示。为了满足您的需求,我认为您需要覆盖
TreeList
的呈现。请看一下
OnLoad()
方法,其中有一个
dataContext.Filter
属性,它接受Sitecore查询。如果您可以查询以筛选您的项目,这将是一种方法。否则,我认为您还必须覆盖
treeviewx
WebControl(用于
TreeList
OnLoad()
)。John West也有一些优秀的博客文章,解释了如何创建自定义树列表,例如:您不能开箱即用,因此需要编写自定义树列表。如果不存在任何版本,可以重写Add()方法并生成警报。但你为什么要这么做?如果有人删除了字段中引用的项的版本,它将保持被引用状态,并且树列表数据将变为“无效”。在查询演示文稿树状列表字段中的所有项目时,为什么不检查有效版本?要求没有版本的项目不应显示在列表中(我是指树状列表控件的左侧列表),顺便说一句,您的意思是重写Sitecore.Shell.Applications.ContentEditor.TreeList类中的外接程序方法?那么,我应该在哪个配置文件中引用我的新CustomTreeList类?@EngelbertCoder此链接将帮助您开始创建自定义字段类型。请查看@TwentyGotton的答案。当作者希望将广告项添加到列表中时,将调用
Add()
方法。这并不完全符合您的要求,因为所有项目仍然显示。为了满足您的需求,我认为您需要覆盖
TreeList
的呈现。请看一下
OnLoad()
方法,其中有一个
dataContext.Filter
属性,它接受Sitecore查询。如果您可以查询以筛选您的项目,这将是一种方法。否则,我认为您还必须覆盖
treeviewx
WebControl(用于
TreeList
OnLoad()
)。John West也有一些优秀的博客文章,解释了如何创建自定义树列表,例如:您不能开箱即用,因此需要编写自定义树列表。如果不存在任何版本,可以重写Add()方法并生成警报。但你为什么要这么做?如果有人删除了字段中引用的项的版本,它将保持被引用状态,并且树列表数据将变为“无效”。在查询演示文稿树状列表字段中的所有项目时,为什么不检查有效版本?要求没有版本的项目不应显示在列表中(我是指树状列表控件的左侧列表),顺便说一句,您的意思是重写Sitecore.Shell.Applications.ContentEditor.TreeList类中的外接程序方法?那么,我应该在哪个配置文件中引用我的新CustomTreeList类?@EngelbertCoder此链接将帮助您开始创建自定义字段类型。请查看@TwentyGotton的答案。这个
public class LanguageFilteringMasterDataView : MasterDataView
{
    protected override void GetChildItems(ItemCollection items, Item item)
    {
        base.GetChildItems(items, item);
        this.FilterItemsWithNoVersionInLanguage(items);
    }

    protected virtual void FilterItemsWithNoVersionInLanguage(ItemCollection items)
    {
        for (var i = items.Count - 1; i >= 0; i--)
        {
            if (items[i].Versions.Count <= 0)
            {
                items.RemoveAt(i);
            }
        }
    }
}
    <dataviews>
        <dataview name="LanguageFilteredMaster" assembly="sc70" type="sc70.Controls.LanguageFilteringMasterDataView" Parameters=""/>
    </dataviews>
public class LanguageFilteringTreelist : TreeList
{
    private const string DataViewName = "LanguageFilteredMaster";

    protected override void OnLoad(EventArgs args)
    {
        base.OnLoad(args);
        var dataContext = this.FindDataContext();
        if (dataContext != null)
        {
            dataContext.DataViewName = DataViewName;
        }
    }

    protected virtual DataContext FindDataContext()
    {
        if (this.Controls.Count <= 0)
        {
            return null;
        }

        var child = this.Controls[0];
        return child.Controls.OfType<DataContext>().FirstOrDefault();
    }
}
var contentLanguage = Sitecore.getUrlParameterValue("la");
var contentLanguage = Sitecore.getUrlParameterValue("la") || $F('scLanguage');