如果页面模块具有 2sxc dnn 模块的 "Inner-Content-Blok",如何启用 "Quick-Insert"
HowTo Enable "Quick-Insert" if page module has "Inner-Content-Blok" for 2sxc dnn module
- 我使用内部内容创建页脚模块。
- 但是由于这个模块是页脚模块并且显示在所有页面上,所以我遇到了自动 "Quick-Insert" 隐藏页面模块的问题。
是否可以配置或有一些解决方法可以让 "Quick-Insert" 和 "Inner-Content-Block" 在同一页面上?
或者是否可以为我的模块禁用 "Inner-Content-Block" 并以其他方式添加 "sub modules"?
2sxc V8.04.08 / dnn V8.00.03
作为解决方法,我用这种方法解决了这个问题:
1。
创建 App.Setting 布尔值 (HideInnerContentAdd)
2。
创建 web api 以切换此值
using DotNetNuke.Security;
using DotNetNuke.Web.Api;
using System.Web.Http;
using ToSic.SexyContent.WebApi;
using System;
using System.Linq;
using System.Collections.Generic;
using ToSic.SexyContent;
using System.Dynamic;
public class nnFootBoxController : SxcApiController
{
// ########################################################################################
[HttpGet]
[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)]
[ValidateAntiForgeryToken]
public dynamic ToogleInnerContentMenu()
{
var tObj = AsDynamic(App.Settings);
if (tObj==null) return false;
var state = false;
if (tObj.HideInnerContentAdd!=null) state = (bool)(tObj.HideInnerContentAdd);
state = !state;
var newValues = new Dictionary<string, object>();
newValues.Add("HideInnerContentAdd", state);
App.Data.Update(tObj.EntityId, newValues);
return state;
}
// ########################################################################################
}
3。
将代码添加到要在所有页面上显示以更改状态的模块的页脚。
@if(Permissions.UserMayEditContent){
<link rel="stylesheet" type="text/css" href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" data-enableoptimizations="true" />
<script type="text/javascript" src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js" data-enableoptimizations="true"></script>
<script type="text/javascript" src="/DesktopModules/ToSIC_SexyContent/Js/2sxc.api.min.js" data-enableoptimizations="true"></script>
<script type="text/javascript" src="@App.Path/js/toggle-innercontentshow.js" data-enableoptimizations="true"></script>
<div>
<input class="nn-toggle-innercontentshow" type="checkbox" @innerContentMenuChecked() data-toggle="toggle" data-on="On" data-off="Off" onchange="nnFooterBox_cbToggle(this,@Dnn.Module.ModuleID)">
</div>
}
@functions{
public dynamic lib { get { return CreateInstance("../_Shared.cshtml"); } }
public string innerContentMenuChecked(){
return isInnerContentMenuVisible() ? "checked" : "";
}
public string innerContentMenuClass(){
return isInnerContentMenuVisible() ? "sc-content-block-list" : "";
}
public bool isInnerContentMenuVisible(){
var tState = ((DynamicEntity)(App.Settings)).HideInnerContentAdd;
if (tState=="True") return false;
return true;
}
}
4。
更改渲染内部内容的代码...
<!-- start modules -->
<div class="@innerContentMenuClass()" @Edit.ContextAttributes(Content, field: "Modules")>
@foreach(var cb in Content.Modules) {
@cb.Render();
}
</div>
<!-- end modules -->
使用@innerContentMenuClass() 启用或禁用快速添加内部内容块...
5。
我知道这不是很好的代码,但对我有用......
如果有人有更好的代码请帮助我...
- 我使用内部内容创建页脚模块。
- 但是由于这个模块是页脚模块并且显示在所有页面上,所以我遇到了自动 "Quick-Insert" 隐藏页面模块的问题。
是否可以配置或有一些解决方法可以让 "Quick-Insert" 和 "Inner-Content-Block" 在同一页面上?
或者是否可以为我的模块禁用 "Inner-Content-Block" 并以其他方式添加 "sub modules"?
2sxc V8.04.08 / dnn V8.00.03
作为解决方法,我用这种方法解决了这个问题:
1。 创建 App.Setting 布尔值 (HideInnerContentAdd)
2。 创建 web api 以切换此值
using DotNetNuke.Security;
using DotNetNuke.Web.Api;
using System.Web.Http;
using ToSic.SexyContent.WebApi;
using System;
using System.Linq;
using System.Collections.Generic;
using ToSic.SexyContent;
using System.Dynamic;
public class nnFootBoxController : SxcApiController
{
// ########################################################################################
[HttpGet]
[DnnModuleAuthorize(AccessLevel = SecurityAccessLevel.Edit)]
[ValidateAntiForgeryToken]
public dynamic ToogleInnerContentMenu()
{
var tObj = AsDynamic(App.Settings);
if (tObj==null) return false;
var state = false;
if (tObj.HideInnerContentAdd!=null) state = (bool)(tObj.HideInnerContentAdd);
state = !state;
var newValues = new Dictionary<string, object>();
newValues.Add("HideInnerContentAdd", state);
App.Data.Update(tObj.EntityId, newValues);
return state;
}
// ########################################################################################
}
3。 将代码添加到要在所有页面上显示以更改状态的模块的页脚。
@if(Permissions.UserMayEditContent){
<link rel="stylesheet" type="text/css" href="https://gitcdn.github.io/bootstrap-toggle/2.2.2/css/bootstrap-toggle.min.css" data-enableoptimizations="true" />
<script type="text/javascript" src="https://gitcdn.github.io/bootstrap-toggle/2.2.2/js/bootstrap-toggle.min.js" data-enableoptimizations="true"></script>
<script type="text/javascript" src="/DesktopModules/ToSIC_SexyContent/Js/2sxc.api.min.js" data-enableoptimizations="true"></script>
<script type="text/javascript" src="@App.Path/js/toggle-innercontentshow.js" data-enableoptimizations="true"></script>
<div>
<input class="nn-toggle-innercontentshow" type="checkbox" @innerContentMenuChecked() data-toggle="toggle" data-on="On" data-off="Off" onchange="nnFooterBox_cbToggle(this,@Dnn.Module.ModuleID)">
</div>
}
@functions{
public dynamic lib { get { return CreateInstance("../_Shared.cshtml"); } }
public string innerContentMenuChecked(){
return isInnerContentMenuVisible() ? "checked" : "";
}
public string innerContentMenuClass(){
return isInnerContentMenuVisible() ? "sc-content-block-list" : "";
}
public bool isInnerContentMenuVisible(){
var tState = ((DynamicEntity)(App.Settings)).HideInnerContentAdd;
if (tState=="True") return false;
return true;
}
}
4。 更改渲染内部内容的代码...
<!-- start modules -->
<div class="@innerContentMenuClass()" @Edit.ContextAttributes(Content, field: "Modules")>
@foreach(var cb in Content.Modules) {
@cb.Render();
}
</div>
<!-- end modules -->
使用@innerContentMenuClass() 启用或禁用快速添加内部内容块...
5。 我知道这不是很好的代码,但对我有用...... 如果有人有更好的代码请帮助我...