为了提高ColdFusion版的人气!特送分!

li_new 2003-06-03 04:35:12
ColdFusion版成立到现在人气真的好差,为了提高,特送分!
规则为:只要你发一篇有关ColdFusion的技术文章我就送你20分(灌水的不要,我也可以将你的贴子变为精华或FAQ,增加你的可用分或信誉分)。
其实说句实话:ColdFusion在国内用的人不是很多,但我觉得学习他真的很好,你可以了解到很多Web方面的思想,对于你学习J2EE、ASP.NET、PHP...都有很大的帮助。你也可以比较ColdFusion与其他的解决方案的不同点(多学习他是怎么样简单的、利用什么样的技术、模式是问题简单),多学习一些原理性的东西。不要永远的停留在语言的层次上。
其实我一直觉得对于开发一些企业内部的中、小型管理系统,你完全可以使用ColdFusion,简单、快速。对于软件企业来说,在短的时间内开发出产品你的成本肯定比较的低,再说在企业内部使用盗版的ColdFusion谁会知道(当然我鼓励大家买正版,但真的好贵:-))。
还有,如果你发了贴子,可以到本贴里报道一下,我给分。如果超过5人的话我重新开贴送分。
...全文
98 43 打赏 收藏 转发到动态 举报
写回复
用AI写文章
43 条回复
切换为时间正序
请发表友善的回复…
发表回复
Orc_dyg611 2010-06-01
  • 打赏
  • 举报
回复
coldfusion中的分页
pagelist.cfm
<cfparam name="URL.Page" default="1">
<cfset RecordCount=#Rs.RecordCount#>
<cfif Page NEQ "">
<cfset Page=Val(URL.Page)>
<cfelse>
<cfset Page=1>
</cfif>

<cfif Page LT 1>
<cfset Page=1>
</cfif>

<cfif (RecordCount Mod PageSize) EQ 0 >
<cfset PageCount=(RecordCount\PageSize)>
<cfelse>
<cfset PageCount=(RecordCount\PageSize+1)>
</cfif>

<cfif PageCount EQ 0>
<cfset PageCount=1>
</cfif>

<cfif Page GT PageCount>
<cfset Page=PageCount>
</cfif>

<cfset CurrentPage=Page>
<cfset StartRow=Page*PageSize-PageSize+1>

<cfset Retval="<table width='100%' border='0' cellspacing='0' cellpadding='0'>">
<cfset Retval=Retval&"<tr>">
<cfset Retval=Retval&"<td height='20' align='left'>">

<!--- 每次可翻的最大页数 --->
<cfset PageMerCout=10>
<!--- 取得记录的最大页码段 --->
<cfif (PageCount Mod PageMerCout) EQ 0>
<cfset MaxPageFiled=PageCount\PageMerCout>
<cfelse>
<cfset MaxPageFiled=PageCount\PageMerCout+1>
</cfif>
<!--- 判断当前页所在的页码段 --->
<cfif (CurrentPage Mod PageMerCout) EQ 0>
<cfset CurrPageFiled=CurrentPage\PageMerCout>
<cfelse>
<cfset CurrPageFiled=CurrentPage\PageMerCout+1>
</cfif>
<!--- 取得当前页码段的最大页码和最小页码 --->
<cfset MinPageNo=(CurrPageFiled-1)*PageMerCout+1>
<cfset MaxPageNo=CurrPageFiled*PageMerCout>

<!--- 首页 --->
<cfif CurrentPage GT 1>
<cfset Retval=Retval&"<a href='" & LinkFile & "Page=1'>首页</a>">
</cfif>
<!--- 前十页 --->
<cfif CurrPageFiled GT 1>
<cfset Retval=Retval&" <a href='" & LinkFile & "Page="&MinPageNo-PageMerCout&"'>前10页</a>">
</cfif>
<!--- 上页 --->
<cfif Page gt 1>
<cfset Retval=Retval&" <a href='" & LinkFile & "Page="&Page-1&"'>上一页</a>">
</cfif>

<!--- 输出当前页码段 --->
<cfloop from="#MinPageNo#" to="#MaxPageNo#" index="J">
<cfif J LTE PageCount>
<cfif J EQ CurrentPage>
<cfset Retval=Retval&" <font color='red'><b>"& J & "</b></font>">
<cfelse>
<cfset Retval=Retval&" <a href='" & LinkFile & "Page=" & J & "'>[" & J & "]</a>">
</cfif>
</cfif>
</cfloop>

<!--- 下页 --->
<cfif Page LT PageCount>
<cfset Retval=Retval&" <a href='" & LinkFile & "Page="& Page + 1 &"'>下一页</a>">
</cfif>
<!--- 后十页 --->
<cfif CurrPageFiled LT MaxPageFiled>
<cfset Retval=Retval&" <a href='" & LinkFile & "Page="& MaxPageNo + 1 &"'>后10页</a>">
</cfif>
<!--- 末页 --->
<cfif CurrentPage LT PageCount>
<cfset Retval=Retval&" <a href='" & LinkFile & "Page=" & PageCount & "'>末页</a>">
</cfif>
<cfif RecordCount GT 0>
<cfset Retval=Retval&"  <b>"&PageSize&"</b>条/页"&" <b><font color=red>"¤tPage&"</font></b>页/<b>"&Val(PageCount)&"</b>页 共<b>"&RecordCount&"</b>条记录">
</cfif>
<cfset Retval=Retval&"</td></tr></table>">

在需要分页的页面里把pagelist.cfm包含进来.

<cfset LinkFile=GetFileFromPath(GetTemplatePath())&"?">
<cfquery name="Rs" datasource="#datasource#">
select 字段 from 数据表
</cfquery>
<cfinclude template="pagelist.cfm">

<cfoutput query="Rs" startrow="#StartRow#" maxrows="#PageSize#">
从数据库取的值
</cfoutput>

变量 Retval 得到分页码

cfwddx 2003-06-27
  • 打赏
  • 举报
回复
我感觉CF的最大缺点就是它的功能不是很强,有些功能的实现必须借助于其他工具
=========================================================================
谁说的!CF是目前为止开发网络应用程序功能最强,最全的工具包!特别是现在的CFMX!
jjj007 2003-06-21
  • 打赏
  • 举报
回复
好,我帮你发文章,这个我最有时间了。
昨天刚刚装了cf,看了些语法,觉得有些东西还是比较方便的。
你可要给分哦!:)
cclq 2003-06-19
  • 打赏
  • 举报
回复
在学习啊!谢谢斑竹!
cclq 2003-06-19
  • 打赏
  • 举报
回复
有心人!
支持一把!
dropship 2003-06-19
  • 打赏
  • 举报
回复
come
lowmer007 2003-06-19
  • 打赏
  • 举报
回复
用CFM做动态实现分类 ——摘自Coldfusion中文用户组论坛

<HTML>
<HEAD>
<TITLE>²ãµÝʽѡÔñ</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">

<cfquery name="Q_country" datasource='#dsn#'>
select * from ct_country order by country_id
</cfquery>
<cfquery name="Q_province" datasource='#dsn#'>
select * from ct_prov
</cfquery>
<cfquery name="Q_city" datasource='#dsn#'>
select * from ct_city
</cfquery>

<SCRIPT LANGUAGE="JavaScript">
<!-- Begin
var arrItems1 = new Array();
var arrItemsCode1 = new Array();
var arrItemsGrp1 = new Array();
var arrItems2 = new Array();
var arrItemsCode2 = new Array();
var arrItemsGrp2 = new Array();

<cfoutput query="Q_province">
arrItems1[#currentRow#] = "#DESCRIPTION#";
arrItemsCode1[#currentRow#] = "#PROV_ID#";
arrItemsGrp1[#currentRow#] = "#COUNTRY_ID#";
</cfoutput>

<cfoutput query="Q_city" maxrows="7">
arrItems2[#currentRow#] = "#DESCRIPTION#";
arrItemsCode2[#currentRow#] = "#CITY_ID#";
arrItemsGrp2[#currentRow#] = "#PROV_ID#";
</cfoutput>

function selectChange(control, controlToPopulate, ItemArray, ItemCode, GroupArray)
{
var myEle ;
var x ;
// Empty the second drop down list of any choices
for (var q=controlToPopulate.options.length;q>=0;q--) controlToPopulate.options

<< =null;
if (control.name == "firstChoice") {
// Empty the third drop down list of any choices
for (var q=myChoices.thirdChoice.options.length;q>=0;q--) myChoices.thirdChoice.options

<< = null;
}
// Loop through the array of individual items.
// Add the items that have the same child id to dropdown list.
for ( x = 1 ; x <= ItemArray.length ; x++ )
{
if ( GroupArray[x] == control.value )
{
myEle = document.createElement("option") ;
myEle.value = ItemCode[x] ;
myEle.text = x + ItemCode[x] + ItemArray[x] ;
controlToPopulate.add(myEle) ;
}
}
}
// End -->
</script>
</HEAD>

<BODY BGCOLOR=#ffffff vlink=#0000ff>
<div align="center">²ãµÝʽѡÔñÏÂÀ­²Ëµ¥</div>
<center>
<table width="100%" cellpadding=0 cellspacing=0 border=0>
<tr>
<td width="99%" align=center> <basefont size=3> <FONT SIZE="+2" FACE="Helvetica,Arial">
</font><BR>
<BR>
<form name=myChoices>
<table align="center">
<tr>
<td>
<SELECT id=firstChoice name=firstChoice onchange="selectChange(this, myChoices.secondChoice, arrItems1, arrItemsCode1, arrItemsGrp1);">
<option value=0 SELECTED>[ÇëÑ¡Ôñ]</option>
<cfoutput query="Q_country">
<option value=#country_id#>#DESCRIPTION#</option>
</cfoutput>
</SELECT>
</TD><TD>
<SELECT id=secondChoice name=secondChoice onchange="selectChange(this, myChoices.thirdChoice, arrItems2, arrItemsCode2, arrItemsGrp2);">
</SELECT>
<SELECT id=thirdChoice name=thirdChoice>
</SELECT>
</TD>
</TR>
</TABLE>
</form>
</table>
</center>
</body>
</html>


laststruggle 2003-06-17
  • 打赏
  • 举报
回复
gg
zgczsf 2003-06-15
  • 打赏
  • 举报
回复
CF走到后面遇到了一些问题,又走回了<CFScript>的老路
同意小龙女说的,对于数据库的连接很方便
zgczsf 2003-06-15
  • 打赏
  • 举报
回复
支持,在国内CF使用不是很频繁,在日本用的还是比较多
flashsj 2003-06-14
  • 打赏
  • 举报
回复
up
Tadpole0510 2003-06-14
  • 打赏
  • 举报
回复
我顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶顶
xiaone 2003-06-12
  • 打赏
  • 举报
回复
学习中,光宣传也没有用,主要是在国内要有市场;
现在有形势是市场需要什么软件,我们就做什么软件;
ColdFusion可能在国内还没有多少人了解它,所以还需要一定的时间。
Tadpole0510 2003-06-12
  • 打赏
  • 举报
回复
需要大家共同宣传
wukunrong 2003-06-11
  • 打赏
  • 举报
回复
对啊,大家多多交流,多多指教,让更多的人也用这个 QQ78992895
ceocio 2003-06-10
  • 打赏
  • 举报
回复
支持
主要是现在用的还不是很普及,很多主机都不支持,如果能得到微软的支持就好了
jq2002 2003-06-10
  • 打赏
  • 举报
回复
支持
l_kk 2003-06-10
  • 打赏
  • 举报
回复
在csdn没有coldfusion专栏时,我上的是这个网站,很好的。里面有很多技术文章!
http://www.cfwindow.com/cn/main.cfm
Tadpole0510 2003-06-06
  • 打赏
  • 举报
回复
还有:
但这里人气的确挺差,应该到各处网站宣传宣传


接着来:
ColdFusion来做FLASH(二)

作者:wait


  昨天介绍了<CFGRAPH>标记的用法,就象你所看到的,这用途非常广泛,财务报表,股票,各种统计,甚至经典首页那个FLASH投票系统都可以用这来做,因为原理都一样,在数据库中动态的调取数据,然后生成FLASH或JPG。不过经典首页上的那个投票系统局限性太大,他必须是按照当初设计的格式来显示,而<CFGRAPH>可以动态的生成各种样式的图表,因为可以接受来自客户端的数据,例如我做一个表单,里面可以选择图表样式,纵深度,初始值,背景色,边框颜色...要查询的数据,然后动态的传递给<CFGRAPH>,然后显示出来,这扩展性是不是更好?
现在我们来看看<CFGRAPHDATA>标记,昨天我说到,这个标记使用率不到1%,但是做出来总会有用处的。下面我来看看一个在实际应用中可能碰到的问题:一家股份公司原来是由3个董事出资成立,他们3个每个人拥有公司的股份不一样,这也经常变化,因为他们自身有时在这公司抽钱出去做他们自己的事,或者转让股权。经过我们请来的会计师评估,这公司总资产是4000万。现在我也想参与进去控股,我现在必须先要算一下。如果我出2100万,会控制这公司多少的股份,是否达到了能控制这公司的51%的股份。<CFGRAPHDATA>功能就是这样的,我提供一个数字进去,和其他动态的数据进行比较。然后按比例显示出来。现在我们回来昨天那个数据库上来,我们把那个数据库看做一个BBS的数据库,天天有人发表文章,所以各版块的文章数量占文章总数的比例实时变化,我现在要加一个数字进行对比,例如我要把我另外一个网站的个人专栏19篇文章全部转移到这个数据库里面,所以让我们还是先来瞧瞧占多少比例再说。

<CFGRAPHDATA>
VALUE="19"
ITEM="WAIT"
</CFGRAPHDATA>

很简单Value是用来和其他比较的数字,ITEM用来显示的项目
<CFGARPDATA>还有两个参数,但不是必须的,一个COLOR,颜色。URL,链接地址,这等下我们会在后面说到的。这些属性也是<CFGRAPH>的属性。

<CFGRAPHDATA>必须放在<CFGRAPH>中,开始处或结束处,现在我们修改一下昨天做的那个饼图。

<CFGRAPH
TYPE="Pie"
QUERY="wait"
VALUECOLUMN="Count"
ITEMCOLUMN="sortname"
FILEFORMAT="Flash"
TITLE="The Pie"
borderwidth="0"
depth="10">

<CFGRAPHDATA
value="19"
item="wait">
</cfgraphdata>

</CFGRAPH>

我们在加在尾部。

显示的格式如下


比昨天多了一个WAIT项,而且我那19篇文章如果放在这,就占了很高的比例了。当然,你也可以用其他的方式显示出来。例如我用曲线图,并加了一些修饰

<cfgraph
type="Line"
QUERY="wait"
valueColumn="count"
ItemColumn="sortname"
FileFormat="flash"
TITLE="The Line"
Scaleto="20"
depth="0"
GRIDLINES="4"
scalefrom="0"
>

<CFGRAPHDATA
value="19"
item="wait">
</cfgraphdata>
</cfgraph>
显示如下:




但是用来显示比例好象不怎么合适,曲线图更适合于一个数值的变化。我们应该根据实际需要而确定用什么显示出来。
我在曲线图<CFGRAPH>里面在昨天的基础上加了两个参数:
GRIDLINES:背景网格数量,不包括最上面和底部那两根原始线条。
scalefrom:网格旁边显示的初始值。我这是为0

<cfgraphdata>就介绍到这里。休息一下,等会我们真正挑战动态FLASH图形链接,看看<CFGRAPH>是怎么动态s链接URL的。


Tadpole0510 2003-06-06
  • 打赏
  • 举报
回复
在看看



ColdFusion来做FLASH(三)


作者:wait


  ColdFusion的<CFGRAPH>还允许我们链接到其他的地址,当然,也可以传递数值给接受网页。现在,要说的就是这。
现在我们看看我在第一节说到的查询数据库代码。

<CFQUERY NAME="wait" DATASOURCE="cflash">
SELECT sortname, COUNT(*) AS Count
FROM sort,file
WHERE file.sort = sort.sortID
GROUP BY sortname
ORDER BY sortname
</CFQUERY>

这数据库总共就查了一个数值--SORTNAME和一个SQL合计函数。现在我希望,你们看到一个图表,而想进一步看看里面的具体文章。但是,我们这里是按类别区分的,只可能点击进去看到一个类别的所有文章,而不是某一篇文章。这容易,只要能链接,没什么能阻拦我们前进脚步的。

现在我们把第一节那源代码修改一下,添加几个参数。原来的代码如下:
<CFGRAPH
TYPE="Pie"
QUERY="wait"
VALUECOLUMN="Count"
ITEMCOLUMN="sortname"
FILEFORMAT="Flash"
TITLE="The Pie"
borderwidth="0"
depth="10">
</CFGRAPH>
现在我们开始改造。值得注意的,这次我们用柱形图我那数据库FILE表中的文章类型是连接SORT表中的SORTID,而不是SORTNAME,而我们这里只能传递SORTNAME,但是我们先不管那么多,传递过去让那边用COLDFUSION处理转换。
<CFGRAPH
TYPE="bar"
QUERY="WAIT"
VALUECOLUMN="wait_count"
ITEMCOLUMN="sortName"
FileFormat="flash"
DEPTH="15"
SCALETO="20"
SCALEFROM="0"
Barspacing="10"
Gridlines="4"
URL="show.cfm?sortName="
URLCOLUMN="Sortname">
</CFGRAPH>

如果你看了第2节,你会发现就加了3个参数,一个是URL,URLCOLUMN。另外一个是Barspacing URL是用来连接网页地址的,我们目的是链接到一个网页,显示那个类别的首页。URLCOLUMN是用来传递网页地址后面数值的。看了上面,你大概有个了解吧?当然,如果你连接到一个HTML页而后面没有参数了。URLCOLUMN也可以省了。另外上面参数Barspacing="10",我这里是用柱形显示的,不想每根柱子都紧紧的挨在一起。所以用了Barspacing来间隔每根柱子的间距,单位是象素。
修改保存以后运行运行如下:


可以想象一下,上面这段代码是链接到 show.cfm?sortname=#sortname#,show.cfm是我们用来显示类别的首页和显示一篇文章详细情况的CFML脚本文件。
现在开始我们来摆平show.cfm
先头我说了,我传送的是sortname而不是sortid,当用户点一个类型的柱子时候,就传递了一个sortname,例如是XML,这里就要显示所有XML文章列表,点一个文章标题,就查看这篇文章的详细情况。
首先来转换,把sortname转换成SORTID,然后再查询文章

《显示类别代码1》
<cfquery name="check" datasource="CFLASH">
SELECT sortID,sortName FROM SORT
WHERE SortName='#URL.SortName#'
</cfquery>

<CFQUERY NAME="ShowSort" datasource="CFLASH">
select ID,title from file
where file.sort=#check.sortID#
ORDER BY ID DESC
</CFQUERY>

只要你懂点SQL语句,就很容易理解上面的,第一个查询,是提取表里sortname相同与URL传递sortname的所有字段,SORT表里总共只有2个字段第二个查询,提取表FILE里面所有类型等于第一个查询里面SORTID字段的所有文章ID,TITLE,即ID和文章标题。

下面就容易很多了,显示这个类型所有的文章标题列表,稍为修饰了一下。
《显示类别代码2》
<ul>
<cfoutput query="showsort">
<LI>
<a href="show.cfm?ID=#ID#" target="_blank">#title#</a><br>
</LI>
</cfoutput>
</ul>
<br><br><br><a href="3.cfm">返回图表</a>

文章标题的链接还是链接到show.cfm网页,也就是自己本身的网页。我们需要加个判断。
1.如果URL上传递过来的sortname,我们查询所有文章等于sortname。
2.如果URL传递过来的是ID,我们就查询文章ID等于URL上ID的文章。
3、4.如果两个参数都传递了,或者什么都不传递,我们可以做另外的事,给提示,或者设置默认值。
但是我只说前面两种。第一种我们前面介绍了,显示所有本类型文章列表。现在我们说说第2种。先提示一下,如果判断URL传递的值是否存在可以用CF的IsDefined()函数而不是用象<CFIF URL.SORTNAM>这样的表达式,写过程序的朋友都知道,NULL和“不存在”完全是两码事。

显示文章的详细数据还要显示这篇文章是属于哪个类型。所以查询加了一些语句。
《显示文章代码1》
<CFQUERY NAME="showdetail" datasource="CFLASH">
select file.title,file.detail,sort.sortID,sort.sortname from file,sort
where ID=#URL.ID# AND file.sort=sort.sortID
</CFQUERY>

《显示文章代码2》

<cfoutput query="showdetail">
<b>文章主题</b>:#title#<br>
<b>文章类型</b>:#sortname#<br>
<b>详细内容</b>:
<blockquote>
#detail#
</blockquote><p>

</cfoutput>
<a href="javascript:window.close()">关闭窗口</a>|<a href="3.cfm">返回图表</a>

看懂了吗?如果不懂我也没办法,只有建议你去看看COLDFUSION编程这方面的教程。(注意现在是广告时间)对了,前个月我路过李家村,发现有卖书的,专卖COLDFUSION书,其中有一本叫《轻松掌握COLDFUSION》,入门非常不错,价格公道,童叟无欺,,你可瞧准了,是电子工业出版社出版的哟。www.china-pub.com




接上面

重新组织一下思路,
1.如果URL传递有SORTNAME
执行《显示类别代码1》
然后执行《显示类别代码2》

2.如果URL传递有ID
执行《显示文章代码1》
然后执行《显示文章代码2》

组合以后源文件如下:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!---
title:让ColdFusion来做FLASH<3>
author:wait(parole@163.net)
description:与CFGGRAPH交互
date:November,11 2002
--->

<CFif Isdefined("URL.SortName")>
<cfquery name="check" datasource="CFLASH">
SELECT sortID,sortName FROM SORT
WHERE SortName='#URL.SortName#'
</cfquery>

<CFQUERY NAME="ShowSort" datasource="CFLASH">
select ID,title from file
where file.sort=#check.sortID#
ORDER BY ID DESC
</CFQUERY>


<ul>
<cfoutput query="showsort">
<LI>
<a href="show.cfm?ID=#ID#" target="_blank">#title#</a><br>
</LI>
</cfoutput>
</ul>
<br><br><br><a href="3.cfm">返回图表</a>
</CFIF>

<CFIF IsDefined("URL.ID")>
<CFQUERY NAME="showdetail" datasource="CFLASH">
select file.title,file.detail,sort.sortID,sort.sortname from file,sort
where ID=#URL.ID# AND file.sort=sort.sortID
</CFQUERY>

<cfoutput query="showdetail">
<b>文章主题</b>:#title#<br>
<b>文章类型</b>:#sortname#<br>
<b>详细内容</b>:
<blockquote>
#detail#
</blockquote><p>

</cfoutput>
<a href="javascript:window.close()">关闭窗口</a>|<a href="3.cfm">返回图表</a>
</CFIF>


你完全可以不写,直接下载本教程里面的源文件。想不到我这么懒的人还这么勤快。
现在测试一下,在IE打开3.cfm文件,就是先介绍的带有URL图表文件,
我现在点开一个类别例如我点FLASH。那么SORNAME=FLASH就会传递给SHWO.cfm网页,显示会象下面这样显示


随便点一个文章标题,会在新窗口中弹出所点的那篇文章详细情况。




结束语:这只是COLDFUSION和FLASH结合的一部分,但是不支持中文,如果改用COLFUSION配合JAVA那就能实现K形图,数据实时变化了。但是我们这里讨论的是CF和FLASH的结合。另外COLDFUSION利用FLASH COMPONENT KIT还有更多的效果,那时候我们就可以做真正动态的FLASH站点了。不过哪有下载我也没找到。谁有可以给我发一份。我先在这里说声谢谢。本教程网上没有演示,因为虚拟主机太贵,如果哪位有空间的朋友愿意代劳在网上演示一下我会感激不尽的。也欢迎喜欢ColdFusion的朋友和我交流。Parole@163.net


有篇用COLDFUSION 做的购物车比这先写一个月,但是后来发现网上的没人喜欢COLDFUSION,所以一直搁浅。
主要介绍了用COLDFUSION制作购物车,另外侧重应用了WDDX生成XML文件做为存储介质。大家看看可以先去看看程序演示 http://cfml.vicp.net/ 朋友的个人电脑,有时候也许还没睡醒没开机可能无法访问或者在玩CS被蹂躏中...可怜的孩子。

全部教程和源代码下载地址:http://coldfusion.3322.net/CFGRAPH.ZIP


加载更多回复(23)

879

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 ColdFusion
社区管理员
  • ColdFusion社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧