Orchardcms 自定义窗体样式

Orchardcms 自定义窗体样式,orchardcms,Orchardcms,刚到果园。我试图设计一个自定义表单,但没有成功。我也一直在使用shape modeler。 我创建了一个新的ContentType并添加了字段f1、f2、f3。。。我创建了一个自定义表单。现在我想把不同的div封装在某些字段上,比如 <div class="g1"> f1 f2 </div> <div class="g2"> f4 f6 </div> f1 f2 f4 f6 顺便说一句,我尝试过这种构造,但没有成功: dyna

刚到果园。我试图设计一个自定义表单,但没有成功。我也一直在使用shape modeler。 我创建了一个新的ContentType并添加了字段f1、f2、f3。。。我创建了一个自定义表单。现在我想把不同的div封装在某些字段上,比如

<div class="g1">
f1
f2
</div>
<div class="g2">
f4
f6
</div>

f1
f2
f4
f6
顺便说一句,我尝试过这种构造,但没有成功:

        dynamic content = @Model.Content;
    <div class="g1">
        if(@content.ContentTypeName.f1 || @content.ContentTypeName.f2)
        { @Dispaly(...)
        }
    </div>
dynamic content=@Model.content;
如果(@content.ContentTypeName.f1 | |@content.ContentTypeName.f2)
{@Dispaly(…)
}
这可以在content.edit.cshtml视图中完成吗? 如果是,请提供一个例子。 谢谢


另外,是否有任何方法可以在运行时反映Model.Content的属性?

通常在Orchard中,您会覆盖部分和字段的模板,而不是整个内容项的模板。形状跟踪可以帮助您确定每个字段可以使用哪些模板替换,甚至可以生成带有默认代码的文件供您修改


此外,Model.Content(如果有的话)将是一个区域,而不是内容项。根据所处的模板,您可能可以使用Model.ContentItem来代替。

通常在Orchard中,您会覆盖部分和字段的模板,而不是整个内容项的模板。形状跟踪可以帮助您确定每个字段可以使用哪些模板替换,甚至可以生成带有默认代码的文件供您修改


此外,Model.Content(如果有的话)将是一个区域,而不是内容项。根据您所处的模板,您可能可以使用Model.ContentItem来代替。

最终提出了一个解决方案,虽然很难看,但它可以工作: 在与内容相关联的我的备选方案中:

@{
    dynamic content = Model.Content;
 }

<div class="g1">
@{
     foreach (var item in content)
     {
         if (item.Model.GetType().Name == "BooleanField")
         {
             if (f.Name == "f1" || f.Name == "f2")
             {
                 @Display(item);
             }
          }
      }
 }
</div>
<div class="g2">        
@{
     foreach (var item in content)
     {
         if (item.Model.GetType().Name == "BooleanField")
         {
             if (f.Name == "f4" || f.Name == "f6")
             {
                 @Display(item);
             }
         }
     }
 }
</div>
@{
动态内容=Model.content;
}
@{
foreach(内容中的var项)
{
if(item.Model.GetType().Name==“BooleanField”)
{
如果(f.Name==“f1”| | f.Name==“f2”)
{
@显示(项目);
}
}
}
}
@{
foreach(内容中的var项)
{
if(item.Model.GetType().Name==“BooleanField”)
{
如果(f.Name==“f4”| f.Name==“f6”)
{
@显示(项目);
}
}
}
}

终于想出了一个解决方案,虽然很难看,但它是有效的: 在与内容相关联的我的备选方案中:

@{
    dynamic content = Model.Content;
 }

<div class="g1">
@{
     foreach (var item in content)
     {
         if (item.Model.GetType().Name == "BooleanField")
         {
             if (f.Name == "f1" || f.Name == "f2")
             {
                 @Display(item);
             }
          }
      }
 }
</div>
<div class="g2">        
@{
     foreach (var item in content)
     {
         if (item.Model.GetType().Name == "BooleanField")
         {
             if (f.Name == "f4" || f.Name == "f6")
             {
                 @Display(item);
             }
         }
     }
 }
</div>
@{
动态内容=Model.content;
}
@{
foreach(内容中的var项)
{
if(item.Model.GetType().Name==“BooleanField”)
{
如果(f.Name==“f1”| | f.Name==“f2”)
{
@显示(项目);
}
}
}
}
@{
foreach(内容中的var项)
{
if(item.Model.GetType().Name==“BooleanField”)
{
如果(f.Name==“f4”| f.Name==“f6”)
{
@显示(项目);
}
}
}
}

我所做的是在内容中创建本地区域,然后使用placement.info重新排列字段

Placement.info:

<Match ContentType="MyForm">
    <Place Fields_Input_Edit-FirstField="MyFirstZone:1"/>
    <Place Fields_Input_Edit-SecondField="MySecondZone:1"/>
</Match>

Content.Edit-MyForm.cshtml:

<div class="edit-item">
    <div class="edit-item-primary">
        @if (Model.Content != null) 
        {
            <div class="edit-item-content">
                <div class="first-zone">
                    @Display(Model.MyFirstZone)
                </div>
                <div class="second-zone">
                    @Display(Model.MySecondZone)
                </div>
            </div>
        }
    </div>
    ....
</div>

@如果(Model.Content!=null)
{
@显示(Model.MyFirstZone)
@显示(Model.MySecondZone)
}
....

我所做的是在内容中创建本地区域,然后使用placement.info重新排列字段

Placement.info:

<Match ContentType="MyForm">
    <Place Fields_Input_Edit-FirstField="MyFirstZone:1"/>
    <Place Fields_Input_Edit-SecondField="MySecondZone:1"/>
</Match>

Content.Edit-MyForm.cshtml:

<div class="edit-item">
    <div class="edit-item-primary">
        @if (Model.Content != null) 
        {
            <div class="edit-item-content">
                <div class="first-zone">
                    @Display(Model.MyFirstZone)
                </div>
                <div class="second-zone">
                    @Display(Model.MySecondZone)
                </div>
            </div>
        }
    </div>
    ....
</div>

@如果(Model.Content!=null)
{
@显示(Model.MyFirstZone)
@显示(Model.MySecondZone)
}
....

Hi Bertrand-看来我们在这个问题上兜圈子了。。。问题-能否通过.cshtml将div包装在特定字段周围?如果是,请提供一个例子。谢谢,这听起来有点粗鲁。我看这里没有圆圈。覆盖特定字段的模板,您可以为其提供所需的任何标记,包括用div围绕它。@tonyb206示例可能没有必要。只需单击“形状跟踪工具”中的按钮即可添加替代项。你可以在文档中读到更多关于替代品的信息。对不起,Bertrand,他没有试图表现得粗鲁,只是感到沮丧-已经在这一周里搞砸了。。。我意识到一个人可以在每个领域级别创建一个备选方案。但这是我感兴趣的内容编辑级别之上的级别:这是我唯一可以完成“特定”div包装的地方,如我上面的原始问题所示——谢谢,但你说过你想在某些字段周围包装一个div。那么,为什么不能为该字段创建一个备用模板并将该div放在其中呢?果园中也有包装器的概念,但这里甚至不需要。哦,我明白了,你想在一个div中包装几个字段?你的问题不清楚。那么你丑陋的黑客可能是最容易得到这个结果的方法。嗨,伯特兰-看来我们在这个问题上兜圈子了。。。问题-能否通过.cshtml将div包装在特定字段周围?如果是,请提供一个例子。谢谢,这听起来有点粗鲁。我看这里没有圆圈。覆盖特定字段的模板,您可以为其提供所需的任何标记,包括用div围绕它。@tonyb206示例可能没有必要。只需单击“形状跟踪工具”中的按钮即可添加替代项。你可以在文档中读到更多关于替代品的信息。对不起,Bertrand,他没有试图表现得粗鲁,只是感到沮丧-已经在这一周里搞砸了。。。我意识到一个人可以在每个领域级别创建一个备选方案。但这是我感兴趣的内容编辑级别之上的级别:这是我唯一可以容纳的地方