OrchardCore Headless建站拾遗
书接上回,OrchardCore的基本设置写了,但是有一说一,这个东西还是挺复杂的,如果需要构建一个简单的企业网站,还需要干点别的活。
本文考虑在尽量少编程的基础上,完成一个Headless网站的设置工作。本文启用了大量的Features,如果在设置过程中发现缺少对应的feature,请在配置界面中启用。
设置基本类型
OrchardCore默认只提供Menu数据类型,这个是用来新建菜单的,后面会详细说。我们需要在Content Definition中新建的Content Type。设置很简单,我新建了一个Article类型。
接下来需要给Fields中与Parts中添加必要的内容,Parts中添加Title可以用于在查询系统中显示与设置displayText,然后在Fields中新增需要添加的元素(文章主题,缩略图等)。
Parts指代组件,一般用于此项类型与CMS系统交互设置使用。而Fields则指代此项类型内部的组成。

通过以上的设置,为文章(Article)设置了一个简介,定义了分类(Taxonomy)字段,还提供了缩略图。以后发表文章,就可以通过在Content Items中新建Article进行编写。
这里我设置有点问题,正常来说应该在Fields中设置HtmlBody的,不过也没关系,这个只影响在什么地方取得数据。请注意一点,对于一些复杂的Part或者Field,可以点击右边的“修改”以设置必要的形式。这里我对HtmlBody设置了默认的编辑器。

设置目录级别
一般的公司主页类型的网站,都有多层的级别,当然可以通过Menu选项卡进行设置,不过经过我实践,这个Menu的层级设置非常别扭,且无法简单得被前端解析。这里不详细解释了,大家有兴趣可以在配置选项卡下面的GraphiQL中查询体验一下。
设置层级一度卡住了我,通过查找资料,我发现有三种形式可以表述层级结果,我个人感觉通过Taxonomy处理层级关系最简单直接。
直观感觉在层级不超过3的时候,使用Taxonomy比较舒服,更深的层级应该依然可用,但是查询可能比较麻烦。
首先需要在Feature上启用Taxonomy,可以理解这个东西是一个Tag,文档添加了这个Field之后,即可勾选已经设置好的类别了。
在Content Types中找到Taxonomy,然后新建一个Taxonomy,设置了基本信息后,下面的Term Content Type,对一级目录,请设置为Taxonomy,并继续添加二级目录名称;对二级目录,设置该项为Article,这样就能在文章的编辑中找到对应的选项,实现对文章(三级项目)的归类。
设置完毕即可通过GraphQL查询出2层级的目录,第三级别已经是文章了,不会显示在这里,而是需要另外查询。

设置自定义函数
我们的目标很简单,通过二级Taxonomy的id,查询到在这个类别下面的所有文章。但理想很丰满,现实很骨感:虽然设置了目录,也可以通过GraphQL查询到目录的层级,但OrchardCore內建的GraphQL只能依据其固定的几个参数进行的条件筛选,无法依据自定义的字段进行查询。
只能曲线救国,自己定义一个查询!
需要在Feature中启用Queries与SQL Queries。当然OrchardCore还支持Lucene全文索引,有兴趣的同学可以自行探索。
首先在Search选项卡的All queries中,新增一个查询,然后选择SQL查询。然后设置查询的函数名称,schema的设置还是需要看官方说明,如果是返回一篇文章的话,那么schema内容填写如下,并且一定要勾选Return Documents这个选项。
{
"type": "ContentItem/Article"
}
底端的Query填入:
select DocumentId
from TaxonomyIndex
where ContentType='Article' and TermContentItemId = @termid:'4v5ww2mv7ys01smccm0qxwepx4'
其中,DocumentId会被GraphQL自动转换成文档,@termid是需要传入的参数,后面接着的是默认的值。SQL的语句结果可以通过Run SQL Query中进行尝试,结合官方的文档,建议自己尝试的时候直接使用select * from...,这样有助于了解每个字段的结构。
设置完毕后,在GraphiQL中就可以看到新建的函数了。

前端调用查询
整体流程如下:
- 查询Taxonomy,获得层级关系。
- 当用户实际点击某一个分类的时候,使用查询获得每个分类的具体下属文章。
可以通过多种形式调用自建的查询:
WebAPI
可以使用GET与POST访问api/queries/{name},参数走body,详情看官方文档
GraphQL
当然也可以直接使用GraphQL,定义好的查询将作为在GraphQL中的顶级元素,参数必须要是json形式,由于放在双引号内,请注意变换成单引号。具体如何调用GraphQL,请看我之前发的文章。

SQL语句
这个套路就比较那个啥了,需要具有Admin的权限,POST访问Admin/Queries/Sql/Query接口,请求body里面直接是SQL查询。这个属于非正常方法。
DecodedQuery:select+DocumentId
from+TaxonomyIndex
where+ContentType='Article'+and+TermContentItemId+=+@termid:'4v5ww2mv7ys01smccm0qxwepx4'
Parameters:{
++"termid":+"4v5ww2mv7ys01smccm0qxwepx4"
}
使用WEBAPI替代GraphQL进行查询
官方文档中,一直在强调使用GraphQL进行各种查询,但是很多同学并不一定喜欢这个东西,其实,使用WebAPI进行简单的查询,OrchardCore还是有內建支持的,不过隐藏的比较深,需要去看看源码(在OrchardCore.Contents/Controllers文件夹下),已知的有以下几个类提供WebAPI接口:
- AdminController
提供几个管理界面使用的API,从代码来看,应该是给管理界面内部使用的。
- ApiController
这个接口提供了POST、DELETE、GET几个接口,最重要的是GET接口可以通过ContentItemId直接取得对应的文档对象,如果知道文章的具体ID,那么可以直接通过这个接口访问获得对应的文章。
- ItemController
应该是给内部预览之类使用的,方法比较少。
如果喜欢使用WEBAPI的形式,大家也可以在这个文件夹里面编写自己的逻辑。
结语
本文可能写的比较晦涩,主要根据个人的实践总结而成。OrchardCore官方提供的资料比较分散,缺少成体系的介绍,建议大家一边实践一边查阅官方文档和issues。
参考资料
- https://github.com/OrchardCMS/OrchardCore/issues/4494
- https://docs.orchardcore.net/en/latest/docs/reference/modules/Queries/#graphql
OrchardCore Headless建站拾遗的更多相关文章
- OrchardCore Headless建站
说到CMS系统,可能大家都能想起WordPress和Drupal之类的框架,作为.NET爱好者,一般也是知道一些基于.NET的CMS框架的,典型的比如DNN.Umbraco之类的.我很早之前听过Orc ...
- WordPress建站和搭独立博客
之前有帮外面的公司建站的经历 不去管html css js 服务器脚本等 对于菜鸟新手而言, 一个WAMP + WordPress(博客程序)就够了 都弄好了再部署到云端服务器上 其实整个过程只是安装 ...
- WordPress建站 新手入门
WordPress建站 新手入门教程系列 1. WordPress入门 之 什么是WordPress? 2. WordPress入门 之 搭建WordPress站点需要什么条件? 3. WordPre ...
- [web建站] 优课急送《零基础快速学习建站》视频+课件【价值399元】
[课程介绍]你想快速建一个网站出来吗?你想从什么都不懂到一两天出一个漂漂亮亮的站吗?你想完成领导交给你的任务找人建站吗?你想自己建站来创业吗?你想学会建站之后,利用给别人建站来赚钱吗?你想建一个跟某个 ...
- 浅析 Magento网站建站空间的选择
对 Magento稍有了解的人都知道,作为一个功能异常强大的网络商城程序,Magento的运行对主机空间的要求是非常高的:很多 Magento建站公司都会推荐 VPS 甚至独立服务器来运行 Magen ...
- 建站随手记:about server stack
建站需要,随手记: Server Stack: ----------- 标准的mezzanine的Stack设置 前端:Nginx wsgi:gunicorn cms tool: mezzanine ...
- vps云服务器建站后绑定域名的方法?
有很多的新手站长们,都不知道vps建站后该如何绑定自己的域名,这里就Windows系统的VPS主机利用iis绑定网站域名的方法,简要介绍一下. 通常情况下,我们在使用IIS建站的时候,都会有一步提示, ...
- 国庆送干货——前端建站实用UI工具vajoyJS
差不多是从七月开始有空就写一写,写到现在也算是可以拿出来展示了,vajoyJS是一款可以提供多项建站常用UI功能的插件库,让你轻松创建简易幻灯片.模态窗口和单屏滚页等效果.vajoyJS依赖于 jQu ...
- Nodejs学习笔记(三)——一张图看懂Nodejs建站
前言:一条线,竖着放,如果做不到精进至深,那就旋转90°,至少也图个幅度宽广. 通俗解释上面的胡言乱语:还没学会爬,就学起走了?! 继上篇<Nodejs学习笔记(二)——Eclipse中运行调试 ...
随机推荐
- 关于MVC WebAPI 中加入任务调度功能的问题 (MVC WebAPI 任务调度)
在MVC WebAPI中加入任务调度功能.即在MVC WebAPI启动时,启用任务调度程序. 但是这里有一个问题点,就是部署好IIS站点后,发现任务调度并没有启用.原因为何? 原因是部署好IIS站点后 ...
- [八省联考2018]制胡窜 (SAM+大讨论)
正着做着实不太好做,正难则反,考虑反着做. 把i,j看成在切割字符串,我们统计有多少对(i,j)会切割所有与\(s_{l,r}\)相同的串.对于在后缀自动机上表示\(s_{l,r}\)的节点x,x的p ...
- SpringCloud项目中接入Nacos作为注册中心
具体demo https://blog.csdn.net/qq_33619378/article/details/95212754 <?xml version="1.0 ...
- @RequestMapping 注解?
该注解是用来映射一个URL到一个类或一个特定的方处理法上.
- 初识mybatis(为什么是mybatis?)
对原生态的 jdbc 中的问题总结 1.数据库连接,使用就创建,不使用立即释放,对数据库进行频繁连接开启和关闭,造成数据库资源浪费,影响数据库性能. 设想:使用数据库连接池管理数据库连接 2.将sql ...
- 学习zabbix(五)
前言 zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix组件主要分两个: zabbix-server和zabbix-agent.支持的监控协议有I ...
- 学习heartbeat-04 原理及部署
1. Heartbeat介绍 1.1 Heartbeat作用 通过它可以将资源(IP及程序服务等资源)从一台故障计算机快速转移到另一台运转正常的机器继续提供服务,在实际生产应用场景中,heartbea ...
- elasticsearch 5.6.7在线安装ik分词,亲测有效
官网的在线安装命令 ./bin/elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/rele ...
- JQuery基础修炼-样式篇
jQuery对象转化成DOM对象 jQuery库本质上还是JavaScript代码,它只是对JavaScript语言进行包装处理,为了是提供更好更方便快捷的DOM处理与开发常见中经常使用的功能.我们可 ...
- IE中input标签密码框与文本框宽度不一样问题
前言 在项目登录界面中有账户和密码的输入框,在Chrome中显示是正常的(本人使用的是Chrome浏览器,平时不用IE).等部署到客户的服务器上,访问时发现一个问题,在IE浏览器中文本框与密码框的宽度 ...