页面快排插件开发


YES-CMS内容管理系统页面快排插件开发教程

插件预览

插件是一个js文件,存放位置在 lib/yescms-page-build/plugins 目录中

页面快排插件开发

index.js:插件内容

icon.png:插件图标,需要配合 index.js中showIcon属性来使用,showIcon为true时,显示图片

页面快排插件开发

style.css:插件样式

style.less:非必要,生成style.css用的,less写css更加便捷而已

每个插件都是一个单独的文件夹,文件夹名称和插件名称保持一致

如图所示

页面快排插件开发

插件注册

插件放入插件目录后,并不能立即生效,还需要注册插件,代码位于 js-source/quick-page-build.js

页面快排插件开发

selector:固定为 #side-nav,对应页面 Areas/Admin/QuickPages/Index.cshtml

plugins:注册的插件列表,只有这里注册了才能使用,多个插件用半角空格隔开,名字要和插件所在的文件夹名字一致

componentsGroup:插件界面展示分组列表,text为分组名称,items为分组包含的插件名称,对应的是插件js文件中YESCMS_PageBuild.PluginManager.add的第一个参数 name,如图:

init_success_callback:插件加载成功后回调函数

插件开发说明

一个完整的插件开发例子

JavaScript 全选
YESCMS_PageBuild.PluginManager.add('button',
    {
        // 插件名称,显示在插件列表中的名字
        text: '按钮(Button)',
        // 是否允许直接编辑
        contenteditable: true,
        // 插入html代码
        // 一、代码中最外层只能有一个元素
        html: `<button type="button" class="btn btn-success" >按钮</button>`,
        // 快捷配置工具,直接在设计页面配置,通常是下拉框或者checkbox
        configTools: [{
            type: 'dropdown',
            text: 'Styles',
            items: [{
                text: 'Primary',
                rel: 'btn-primary'
            }, {
                text: 'Secondary',
                rel: 'btn-secondary'
            }, {
                text: 'Success',
                rel: 'btn-success'
            }, {
                text: 'Danger',
                rel: 'btn-danger'
            }, {
                text: 'Warning',
                rel: 'btn-warning'
            }, {
                text: 'Info',
                rel: 'btn-info'
            }, {
                text: 'Light',
                rel: 'btn-light'
            }, {
                text: 'Dark',
                rel: 'btn-dark'
            }, {
                text: 'Link',
                rel: 'btn-link'
            }, {
                text: 'outline-primary',
                rel: 'btn-outline-paimary'
            }, {
                text: 'outline-secondary',
                rel: 'btn-outline-secondary'
            }, {
                text: 'outline-success',
                rel: 'btn-outline-success'
            }, {
                text: 'outline-danger',
                rel: 'btn-outline-danger'
            }, {
                text: 'outline-warning',
                rel: 'btn-outline-warning'
            }, {
                text: 'outline-info',
                rel: 'btn-outline-info'
            }, {
                text: 'outline-light',
                rel: 'btn-outline-light'
            }, {
                text: 'outline-dark',
                rel: 'btn-outline-dark'
            }]
        }, {
            type: 'dropdown',
            text: 'Size',
            items: [{
                text: 'Default',
                rel: ''
            }, {
                text: 'Large',
                rel: 'btn-lg'
            }, {
                text: 'Small',
                rel: 'btn-sm'
            }]
        }, {
            type: 'check',
            text: 'Block',
            rel:'btn-block'
        }, {
            type: 'check',
            text: 'Active',
            rel:'active'
        }, {
            type: 'check',
            text: 'Disabled',
            rel:'disabled'
        }],
        // 配置表单,编辑弹窗中的配置页表单,弹窗中有源码编辑和配置编辑,两种tab
        configForm: {
            enabled: false,
            width: '600px',
            height: '200px',
            items: [],
            // 表单加载时初始化数据
            loadData: function (elm) {
                //debugger
                $('#config-form #title').val($(elm).text())
            },
            // 表单保存时保存数据
            saveData: function (elm) {
                $(elm).text($('#config-form #title').val())
            }
        }
    }
);

YESCMS_PageBuild.PluginManager.add 参数说明

第一个参数:name=button,插件name,一般和所在文件夹名字保持一致,插件分组的时候需要指定插件的name

第二个参数:插件的配置信息

插件配置信息说明:text

插件描述,显示在列表中

页面快排插件开发

插件配置信息说明:showIcon

可选值:true / false ),默认值:false, 插件是否显示图标的形式展示,如果为true,插件文件夹中需要有名字为icon.png的图片

页面快排插件开发

图片界面显示效果,宽度固定为 200px,高度自适应

插件配置信息说明:contenteditable

可选值:true / false ),默认值:false, 表示元素是否可被用户编辑。 如果可以,浏览器会修改元素的部件以允许编辑。当值为true的时候,可直接修改元素的文本信息

页面快排插件开发

插件配置信息说明:html

插件html文本,最外层只能有一个元素,如果存在多个元素,修改页面模板的时候会出现页面错误

插件配置信息说明:configTools

快捷工具配置

如图所示,为快捷工具栏

页面快排插件开发

configTools.text

工具描述,显示文本

configTools.rel

配置的 class名称,会给相应的dom元素自动配置改class

configTools.type

工具类型,目前支持两种配置,dropdowncheck

dropdown:下拉框,数组类型,[ { text, rel }, { text, rel } ]

JavaScript 全选
{
	type: 'dropdown',
	text: 'Size',
	items: [{
		text: 'Default',
		rel: ''
	}, {
		text: 'Large',
		rel: 'btn-lg'
	}, {
		text: 'Small',
		rel: 'btn-sm'
	}]
}

页面快排插件开发

text:文本描述

rel:样式名称

handle:作用的类名,如果配置了该选项,则会作用与包含该类的子元素

check:选中

JavaScript 全选
{
	type: 'check',
	text: 'Block',
	rel:'btn-block'
}

页面快排插件开发

text:文本描述

rel:样式名称

handle:作用的类名,如果配置了该选项,则会作用与包含该类的子元素

因为 list-inline-item 需要作用域list-item,所以这里使用了handle,不然的话作用域ul,是无效的

configTools.handle

设置样式的作用域,包含该class的子元素

比如在 list 插件中,控制list显示方式的选项

JavaScript全选
{
	type: 'check',
	text: 'Inline',
	handle: 'list-item',
	rel: 'list-inline-item'
}

默认效果

页面快排插件开发

html代码

页面快排插件开发

Inline展示的效果如下

页面快排插件开发

html代码

页面快排插件开发

通过对比,我们可以发现,list-inline-item 样式是作用域子元素(.list-item) 的,而不是在ul节点,这就很容易的说明了handle参数的作用

插件配置信息说明:configForm表单

插件的设置表单

点击插件的配置按钮,弹出的配置表单,比如 image 插件中,图片src是不方便修改的,所以可以添加一个配置表单

JavaScript 全选
// 配置表单,编辑弹窗中的配置页表单,弹窗中有源码编辑和配置编辑,两种tab
configForm: {
    enabled: true,
    width: '600px',
    height: '200px',
    items: [{
        label: 'src',
        formItem: '<input type="text" id="src" placeholder="" class="form-control">'
    }],
    // 表单加载时初始化数据
    loadData: function (elm) {
        //debugger
        $('#config-form #src').val($(elm).attr("src"))
    },
    // 表单保存时保存数据
    saveData: function (elm) {
        $(elm).attr('src', $('#config-form #src').val())
    }
},

这样,点击插件右上角的配置按钮时,就会弹出配置表单

页面快排插件开发

页面快排插件开发

输入图片的src信息,点击确定,图片新的src就设置好了

页面快排插件开发

参数说明

configForm.enabled

可选值:( true / false ) ,默认为false,是否启用配置表单,如果时false,则插件不会显示配置按钮

configForm.width

可选值 500px 或者 80%  插件配置窗口的宽度,可以是精确的px值,也可以是百分比80%

configForm.height

可选值 400px 或者 60%  插件配置窗口的高度,可以是精确的px值,也可以是百分比60%

configForm.items

表单设置信息,html

JavaScript 全选
items: [{
	label: 'src',
	formItem: '<input type="text" id="src" placeholder="" class="form-control">'
}],

渲染结果

页面快排插件开发

选然后的html代码

页面快排插件开发

configForm.loadData

配置表单打开时,初始化表单数据,参数为 当前插件的 view 元素的第一个子元素,即 当前插件的html dom信息

JavaScript 全选
currentDom = $(source).children(".view").children()[0];

页面快排插件开发

我们可以从elm参数中获得想要初始化的信息,比如例子中,我们需要把img标签的src参数取出来,并显示在表单的input text标签中,所以可以这么做

JavaScript 全选
// 表单加载时初始化数据
loadData: function (elm) {
	//debugger
	$('#config-form #src').val($(elm).attr("src"))
},

configForm.saveData

保存配置表单数据

参数和loadData一样,只不过这里是要把input的值更新到dom中

JavaScript 全选
// 表单保存时保存数据
saveData: function (elm) {
	$(elm).attr('src', $('#config-form #src').val())
}

插件配置信息说明:beforeCreate

添加插件到页面中时,需要初始化的信息,比如元素ID,一个页面应该避免出现多个相同的元素ID

比如tabs插件,因为要js互动,所以需要用到id来控制元素

这里就存在一个问题,一个页面中包含多个tabs插件是非常合理的,所以这里如果都是用统一的id,那么就会出现问题,包含多个tabs的时候,点击切换页面会失效,所以我们就需要一个方案可以自动的生成一个唯一的ID,就没有这个问题了,解决方案如下

html中定义ID规则

可以看到,在tab插件中,我们把html插件中的id都存在一个规则,以 _id结尾

页面快排插件开发

可以看到在生成界面中,这些_id都被替换成了一串数字(小时分钟秒),以此来实现多个重复插件ID互不干扰的目的

页面快排插件开发

beforeCreate方法代码

这里就是通过beforeCreate方法来实现的,实现代码如下

JavaScript 全选
beforeCreate: function (elm) {
	// 找到view元素
	var view = $(elm).children(".view")

	// 生成id唯一字符串,这里考虑到不存在一秒钟拖动好几个插件,所以采用时分秒也就够了(页面唯一),
	var t = new Date();
	var id = '_' + (t.getHours() * 10000 + t.getMinutes() * 100 + t.getSeconds()) + "";

	// 替换id中的_id
	view.find("[id$=_id]").each(function () {
		var e_id = $(this).attr("id");
		e_id = e_id.substring(0, e_id.length - 3) + id;
		$(this).attr("id", e_id)
	});
	// 替换href中的_id
	view.find("[href$=_id]").each(function () {
		var e_id = $(this).attr("href");
		e_id = e_id.substring(0, e_id.length - 3) + id;
		$(this).attr("href", e_id)
	});
	// 替换aria-labelledby中的_id
	view.find("[aria-labelledby$=_id]").each(function () {
		var e_id = $(this).attr("aria-labelledby");
		e_id = e_id.substring(0, e_id.length - 3) + id;
		$(this).attr("aria-labelledby", e_id)
	});
}

 

到此,教程结束

如果遇到任何问题,请联系我,QQ:382237285

扫我添加微信好友

也可以猛戳页面右下角的在线客服以及电话

 

 

版权声明:本文为YES开发框架网发布内容,转载请附上原文出处连接
管理员
评论列表

发表评论

评论内容
昵称:
关联文章

页面开发
页面配置支持图片上传
C# MEF开发
TinyMCE开发之《设置Code标签》
YES-CMS内容管理系统扩展
代码编辑使用
YES-CMS 内容管理系统 TinyMCE编辑演示
【gitblit复制URL】 修改URL复制方式Flash被浏览器禁用解决办法
数据库 red-gate SQLToolbelt 下载地址
TinyMCE富文本编辑器 autoLink 配置,全角支持
单表查询-前端页面开发
【C#】C#中使用GDAL3(三):Windows下编译驱动
OneNote安装代码高亮-NoteHightlight(2010-2013-2016)
利用SelectPdf将网页生成PDF
插入代码页面报错
配置界面高度计算
微信H5页面开发禁用webview内嵌的h5缩放啊?
【荐】开源Winform控库:花木兰控
C#代码编码规范手册 软件开发规范 开发指南
VScode配置Python开发环境