# a_门户模板定制

我们可以用集团管理员或单位管理员登录系统,进入V-Portal配置平台,分别对下述内容进行导入导出定制。

# 门户模板ZIP包介绍

进入【整体样式库】,选择“网站式信息门户”导出,如下图:

导出的ZIP包目录结构如下图所示:

  1. portal/images:该目录存放门户模板用到的所有图片文件;
  2. portal/pagelayout/layout/layout02:该目录存放门户布局相关文件,其中layout02为门户布局代码。这个目录下会存放3个文件:layout02_b.html、layout02_b.css和layout02_b.js。layout02_b.html文件为门户布局html文件,layout02_b.css为门户布局样式文件,layout02_b.js为该门户特有的JavaScript脚本。后面会对门户布局的概念进行专门介绍,在这里记住门户布局由1个html文件、1个css文件和1个js文件组成即可。门户布局html文件,只包含html内容,但在html的dom元素上会有致远门户自定义属性,以layout02_b.html为例,内容如下:

注意:主要是红色框中的内容, 标识门户头部区class='seeyon-portal-header';标识门户内容区:class='seeyon-portal-body';标识门户元素分组:class='seeyonElementGroup',门户元素分组中可以包含多个门户元素;标识门户元素:class='seeyonElement',门户元素中的id和data-tpl两个属性必须指定,其中id的值必须保证唯一性,data-tpl的值必须跟门户元素的文件名相同,门户元素包含哪些内容,后面马上会介绍到

  1. portal/pagelayout/element:该目录存放门户元素相关文件,每个门户元素包含3个文件:1个html文件、1个js文件、1个css文件。例如幻灯片元素tpl-slideVPortal.html、tpl-slideVPortal.js、tpl-slideVPortal.css。 门户元素的这三个文件要求必须以tpl-开头,除了后缀不通外,文件名称必须相同。 门户元素html文件需要符合laytpl前端模板引擎规范。例如tpl-slideVPortal.html内容如下:

    注意:上面文件内容中 <script id="tpl-slideVPortal" type="text/html"> ,id必须跟文件名称保持一致

门户元素js文件,需要按照门户规范实现,以tpl-slideVPortal.js文件为例,内容如下图所示:

vPortalMainFrameElements.slideVPortal = {
   config: true, // 标识该门户元素是否可以在门户设计器中对元素属性进行设置:true标识可以, false标识不>可以
   getData: function() {
       // 此方法需要返回一个json格式的数据, 数据格式必须与tpl-slideVPortal.html中使用的数据结构匹>配,如果元素不需要在tpl中渲染, 可以**return** false或者不写getData。
  },
   afterInit: function(_domId) {
       // _domID为门户元素在门户中惟一dom标识
  },
   getProp: function (_dataJson){
       // 在门户设计器中可配置的属性
       // 此方法需要返回一个Json格式数据, 数据格式见《附录2:门户属性配置Json数据格式》
  },
   onPropChange: function(json, id, key, value){
       // 在门户设计器使用,在门户元素属性发生变化时,会调用此方法,但注意止方法不需要对数据进行持>久化
  },
   saveProp: function(){
     // 保存门户元素属性值, 注意此方法需要对数据进行持久化,例如保存到数据库中
  }
}

门户元素css文件,主要对门户元素的外观进行配置,需要按照CSS规范实现,且这些css样式只能在tpl-slideVPortal.html文件中用到,以tpl-slideVPortal.css文件为例,内容如下图所示:

  1. portal/pagelayout/skin:该目录存放门户模板样式CSS文件,这个文件内容遵循CSS标准。
  2. portal/sections/skin:该目录存放门户栏目外框样式CSS文件,这个文件内容遵循CSS标准。
  3. skin/dist/components:该目录存放二级页面样式CSS文件,这个文件内容遵循CSS标准。
  4. upload:该目录存放导出的门户模板中包含的图片文件。
  5. import.xml:该文件为导入内容元数据描述文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>

<portal version="1.0" vendor="www.seeyon.com" type="0">
    <theme>
        <name>门户模板名称: 网站式信息门户</name>
        <icon>门户模板图标: theme_pc_06.png</icon>
        <layout>
            ... 门户模板布局 ...
        </layout>
        <skinSet>
            <name>门户模板使用的整体皮肤名称: 曙光之晨</name>
            <icon>门户模板使用的整体皮肤图标: skin_pc_06.png</icon>
            <mainSkin>
                ... 门户模板使用的主样式风格 ...
            </mainSkin>
            <sectionSkin>
                ... 门户模板使用的栏目外框样式 ... 
            </sectionSkin>
            <componentSkin>
                ... 门户模板使用的二级页面组件样式 ...
            </componentSkin>
            <iconSkin>
                ... 门户模板使用的图标风格 ...
            </iconSkin>
            <echartStyle>
                ... 门户模板使用的图表风格 ...
            </echartStyle>
        </skinSet>
        <elements>
            ... 门户模板含有的元素集合 ...
        </elements>
        <hotspots>
            ... 门户模板热点数据 ...
        </hotspots>
    </theme>
</portal>

从上面的内容可以看出:

(1) portal根标签表示一个门户模板,这个标签下的标签表示门户模板的名称,注意门户名称不能含有特殊字符,标签表示门户模板的图标,它的值是一个图片文件名称,这个图片文件必须放到前面提到的portal/images目录下;为门户模板中CSS、JS和HTML文件中直接引用的图片资源文件路径。

(2) layout这个标签中定义门户模板使用的布局文件,这个标签包含的定义内容如下:

<layout>
     <code>layout02</code>
     <styleCode>layout02_b</styleCode>
     <icon>layout02_b.jpg</icon>
     <name>layout02</name>
   </layout>
  • 标签中的内容为门户模板布局唯一标识,这个值必须与ZIP包中的路径portal/pagelayout/layout/layout02中的layout02目录名称保持一致,注意这里layout02只是一个例子,也可以是其它英文标识。
  • 标签中的内容为门户布局特定样式标识,且也必须唯一,这个值必须与ZIP包中的路径portal/pagelayout/layout/layout02目录下的文件名称相同。
  • 标签中的内容为门户模板的示意图标,这个值是一个图片文件名称,,这个图片文件必须放到前面提到的portal/images目录下。
  • 标签中的内容为门户模板的名称,不能含有特殊字符,这里建议使用与标签中相同的值

(3):标签表示门户模板使用的整体皮肤,这个标签下的标签表示整体皮肤的名称,注意整体皮肤名称不能含有特殊字符,标签表示整体皮肤的示意图标,它的值是一个图片文件名称,这个图片文件必须放到前面提到的portal/images目录下。它由mainSkin、sectionSkin、componentSkin、iconSkin、echartStyle五部分内容组成。

  • mainSkin标签中的内容为整体皮肤的主皮肤内容,这个标签下的name标签表示主皮肤的名称,注意主皮肤名称不能含有特殊字符。这个标签下的code标签内容标识主皮肤样式文件,必须与ZIP压缩包中portal/pagelayout/skin下的CSS文件名称保持一致。(注意:系统预制的门户模板导出的ZIP包中,这个文件名称跟code可能会不一样,但如果我们想修改这个文件内容,并将这个文件导入,则这个文件名称必须跟code保持一致)
  • sectionSkin标签中的内容为整体皮肤的栏目外框样式内容,这个标签下的name标签表示栏目外框样式的名称,注意栏目外框样式名称不能含有特殊字符。这个标签下的code标签内容标识栏目外框样式文件,必须与ZIP压缩包中portal\sections\skin下的CSS文件名称保持一致。(注意:系统预制的门户模板导出的ZIP包中,这个文件名称跟code可能会不一样,但如果我们想修改这个文件内容,并将这个文件导入,则这个文件名称必须跟code保持一致),icon标签表示整体皮肤的示意图标,它的值是一个图片文件名称,这个图片文件必须放到前面提到的portal/images目录下。
  • componentSkin标签中的内容为整体皮肤的栏目外框样式内容,这个标签下的name标签表示栏目外框样式的名称,注意栏目外框样式名称不能含有特殊字符。这个标签下的code标签内容标识栏目外框样式文件,必须与ZIP压缩包中portal\sections\skin下的CSS文件名称保持一致。(注意:系统预制的门户模板导出的ZIP包中,这个文件名称跟code可能会不一样,但如果我们想修改这个文件内容,并将这个文件导入,则这个文件名称必须跟code保持一致)
  • iconSkin标签中的内容为整体皮肤的图标风格,这个标签下的name标签表示图标风格的名称,注意图标风格名称不能含有特殊字符。这个标签下的code标签内容标识图标风格:0标识线性;1标识面型,目前系统只支持这两种类型的图标风格。(如果输入其他内容,则系统图标风格将出现问题)
  • echartStyle标签中的内容为整体皮肤的图表风格,这个标签下的name标签表示图表风格的名称。这个标签下的code标签内容标识图表风格。code和name的值要求有对应关系,系统只支持下表中的图表风格(如果输入其他内容,则系统图标风格将出现问题)

(4)elements标签表示门户模板中的门户元素集合,这个标签下包含一个或多个标签。每个标签有code和name两个字标签。code标签的值必须与ZIP压缩包中portal/pagelayout/element下的存在对应的三个文件:tpl-xxxx.html、tpl-xxxx.js、tpl-xxxx.css。

(5)hotspots:标签表示门户模板中的热点数据集合,这个标签下包含一个或多个标签。每个标签有key和value两个字标签。key标签的值标识某个热点,value是热点数据,热点数据的格式为JSON,JSON数据中含有的数据跟具体热点有关,这里不做详细说明。

最后附上一个完整的import.xml文件,如下图所示:

# 可以定制化的内容
  1. 修改门户模板的布局
  2. 修改门户模板的主皮肤
  3. 修改门户模板的栏目外框样式
  4. 修改门户模板的二级页面组件样式
  5. 修改门户模板的图标风格
  6. 修改门户模板的图表风格
  7. 新增门户元素
  8. 去掉门户元素,例如去掉幻灯片元素。

上面列出的可定制化内容,1、2、3、4主要是修改css文件内容或者是热点数据中的某个热点值来实现,这个比较简单,不做详细说明;5和6是指定一个风格即可,也比较简单。对于7这种情况来说稍微复杂点,但代码开发工作也并不大,关键是遵循我们前面介绍的内容进行扩展。

# 举个例子

下面以一个具体例子来说明:比如我们要把现有【网站式信息门户】门户模板的幻灯片元素替换为一个新元素,为了降低学习门槛,我们还是以helloworld作为入门例子,假设这个元素我们叫做helloworld,元素代码为tpl-helloworld,这个门户元素的展现效果为只输出一个文本hello world!

开发步骤:

第一步:解压导出的门户ZIP包; 第二步:在目录portal/pagelayout/element中新建门户元素的三个文件:tpl-helloworld.html、tpl-helloworld.js、tpl-helloworld.css。内容分别如下所示: tpl-helloworld.html文件的内容如下:

<script id="tpl-helloworld" type="text/html">    <div class="helloworld" onclick="vPortalMainFrameElements.helloworld.showMessage();" title="{{ d.name }}" >{{ d.name }} {{ d.age }}</div></script>

tpl-helloworld.js文件的内容如下:

vPortalMainFrameElements.helloworld = {
  config: true,

   //获取数据
   getData: function() {
     return  {
      name: 'Jully',
      age: '20'
    }
  },

   //初始化,元素如果有初始化的事件请写在这里面
   init: function(_elementId) {
     return;
  },

   //设计器中获取可设置属性
   getProp : function(_dataJson){
     window.parent.changeRightTitle("hello world 设置");
     return {};
  },

  showMessage: function () {
    alert("hello!")
  }
}

tpl-helloworld.css文件的内容如下:

.helloworld {
   color:red;
   text-align:center;
}

第三步:修改门户布局html文件layout02_b.html,将helloworld元素绑定到门户模板布局上,内容如下图红框中的内容:

第四步:修改门户布局文件名称,将layout02_b.html修改为layout02_001.html,将layout02_b.js修改为layout02_001.js,将layout02_b.css修改为layout02_001.css,修改后的文件如下图所示:

第五步:修改import.xml文件中的下述helloworld相关部分的内容:

<?xml version="1.0" encoding="UTF-8"?>
<portal version="1.0" vendor="www.seeyon.com" type="0">
  <theme>
    <name>helloworld门户</name>
    <icon>helloworld.jpg</icon>
    <layout>
      <code>layout02</code>
      <styleCode>layout02_001</styleCode>
      <icon>layout02_b.jpg</icon>
      <name>layout02</name>
    </layout>
<elements>
      <element>
        <code>tpl-wideLogo</code>
        <name>宽尺寸的单位logo元素</name>
      </element>
      <element>
        <code>tpl-concurrentAccount</code>
        <name>兼职单位元素</name>
      </element>
      <element>
        <code>tpl-topRightsystemOperation</code>
        <name>顶部系统操作按钮元素</name>
      </element>
      <element>
        <code>tpl-miniNav</code>
        <name>顶部极简版导航-包含门户、空间、菜单、第三方系统、项目空间等</name>
      </element>
      <element>
        <code>tpl-helloworld</code>
        <name>helloworld</name>
      </element>
      <element>
        <code>tpl-showNavSpaceMenu</code>
        <name>导航-空间下的菜单,当鼠标hover至空间时展现</name>
      </element>
      <element>
        <code>tpl-messageBottom</code>
        <name>底部弹出的消息盒子</name>
      </element>
......

注意:helloworld.jpg为我们自己找的一张图片,作为我们这个新的门户模板的示例图标,需要放到目录portal/images下。

第六步:重新打包成ZIP包,文件名称无特殊要求。假设我们的压缩包名称为“portal_template.zip”,双击打开后,显示应该如下图所示, 所有文件都是压缩包根目录下,否则会导入时会报错:

第七步:以集团管理员或单位管理员登录系统,将ZIP导入门户模板。

至此,门户模板定制完毕,效果如下

编撰人:chuhc、admin、het