Content management system ExpressionEngine:在通道输入表单中有条件地显示自定义字段

Content management system ExpressionEngine:在通道输入表单中有条件地显示自定义字段,content-management-system,blogs,categories,expressionengine,Content Management System,Blogs,Categories,Expressionengine,我正在用ExpressionEngine建立一个博客网站。我有两种类型的条目要保留在同一频道中。当选择某个类别时,我希望显示其他字段 **EXAMPLE Channel > Article Fields: - Title - Post Body - Image - Tags Additional Fields for a category: - Price - Product Bio 这

我正在用ExpressionEngine建立一个博客网站。我有两种类型的条目要保留在同一频道中。当选择某个类别时,我希望显示其他字段

**EXAMPLE
Channel > Article
    Fields:
       - Title
       - Post Body
       - Image
       - Tags

    Additional Fields for a category:
       - Price
       - Product Bio

这可能吗?

您希望在控制面板或站点前端执行此操作吗?

要使用类别作为触发器执行此操作,您需要编写一个自定义扩展,添加javascript以执行显示和隐藏操作


您可能需要查看该插件,它允许您使用下拉菜单更改显示的字段。

您对JavaScript的理解程度如何?你可以使用分机。然后使用一点自定义javascript来构建该功能。不完美,但可能比编写自定义扩展快。大致上,您可以这样做:

  • 创建“频道字段”组和所有频道,并将该组分配给您的频道
  • 为了使其更具可用性,您希望类别选择器与字段位于同一个“发布”选项卡上:为该通道创建自定义发布布局,将“类别”字段从“类别”选项卡移动到“发布”选项卡
  • 查找要隐藏的频道字段的id号,因为它们将是发布页面中类似“hold_field_id#”的HTML id
  • 找出要单击以显示其他字段的类别的类别ID。在发布页面中,该类别将显示在类别字段中,并带有“value=ID”属性
  • 脚本时间!前往Add-ons>Extensions>CP CSS&JS设置,并在自定义Javascript字段中添加一些JS
  • 大概是这样的:

    $(文档).ready(函数(){
    //使用频道字段缓存div
    变量$TheCretfields=$(“#保持#字段#5,#保持#字段#6”);
    //藏起来
    $TheCretFields.each(函数(){
    //但前提是它们为空(没有以前保存的数据)
    //如果您使用的是文本区域或其他内容,请更改.find选择器
    if($(this.find('input').val()==''){$(this.hide()};
    });
    //单击类别ID(输入[value=“ID”]选择器)时。。。
    $(“#保持_字段_类别”)。查找('input[value=“12”]”)。单击(function(){
    //切换通道字段的可见性
    //同样,仅当它们为空时才显示/隐藏它们
    $TheCretFields.each(函数(){
    //如有必要,再次更改字段类型的.find选择器
    if($(this).find('input').val()==''){$(this.toggle()};
    });
    });  
    };
    

    您可能需要在单击处理程序中构建更多的逻辑,以确保字段仅在选中复选框时显示(除其他外),但这是基本思想。

    您还需要确保在编辑保存的条目时,如果字段包含以前保存的数据,则不会隐藏这些字段。但这是正确的路径!好主意!我为该逻辑添加了一个开始。