Posts Tagged ‘显示’

ASP.Net2.0 GridView 多列排序,显示排序图标,分页

星期二, 06月 3rd, 2008

最近在使用ASP.net 2.0deGridView 控件时,发现排序与分页功能Microsoft实现de都很简单,比如排序,在点击列名de时候来触发整页dePostBack,然后排序,但是在列头上没有一个显示升序降序de图标,这会让最终用户使用时很迷惑,因为不知道是升序了还是降序了,所以今天首先解决de第一问题就是升序降序在列上显示图标,第二要解决de问题是默认GridView按列排序只能排一列de,也就是不能进行多列排序,而在实际应用中仅仅按照一列来排序是不能满足业务需求de,第三是GridView 分页问题,GridView预定义de分页页码显示,比较简单,而实际应用中,分页可能不是只显示首页,上一页,下一页,末页,或者是数字de页码那么简单,应该更需要,跳转,当前de页码,总页数等,更详尽de信息.

第一:GridView 多列排序与排序图标显示

首先我可以新建一个类库程序,主要需要引用System.Web.Dll文件
然后新建一个类,这个类继承与GridView控件,我只需要对部分方法进行重新即可.
我de演示de例子,采用了单列排序,如果启用多列排序,把控件deAllowMultiColumnSorting设置为True就是
多列排序.

1 public class WebGridView:GridView
2 {
3 属性#region 属性
4 /**//// <summary>
5 /// 是否启用或者禁止多列排序
6 /// </summary>
7 [
8 Description("是否启用多列排序功能"),
9 Category("排序"),
10 DefaultValue("false"),
11 ]
12 public bool AllowMultiColumnSorting
13 {
14 get
15 {
16 object o = ViewState["EnableMultiColumnSorting"];
17 return (o != null ? (bool)o : false);
18 }
19 set
20 {
21 AllowSorting = true;
22 ViewState["EnableMultiColumnSorting"] = value;
23 }
24 }
25 /**//// <summary>
26 /// 升序时显示图标
27 /// </summary>
28 [
29 Description("升序时显示图标"),
30 Category("排序"),
31 Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
32 DefaultValue(""),
33
34 ]
35 public string SortAscImageUrl
36 {
37 get
38 {
39 object o = ViewState["SortImageAsc"];
40 return (o != null ? o.ToString() : “”);
41 }
42 set
43 {
44 ViewState["SortImageAsc"] = value;
45 }
46 }
47 /**//// <summary>
48 /// 降序时显示图标
49 /// </summary>
50 [
51 Description("降序时显示图标"),
52 Category("排序"),
53 Editor("System.Web.UI.Design.UrlEditor", typeof(System.Drawing.Design.UITypeEditor)),
54 DefaultValue(""),
55 ]
56 public string SortDescImageUrl
57 {
58 get
59 {
60 object o = ViewState["SortImageDesc"];
61 return (o != null ? o.ToString() : “”);
62 }
63 set
64 {
65 ViewState["SortImageDesc"] = value;
66 }
67 }
68 #endregion
69 重写方法#region 重写方法
70 protected override void OnSorting(GridViewSortEventArgs e)
71 {
72 if (AllowMultiColumnSorting)
73 {
74 e.SortExpression = GetSortExpression(e);
75 }
76
77 base.OnSorting(e);
78 }
79 protected override void OnRowCreated(GridViewRowEventArgs e)
80 {
81 if (e.Row.RowType == DataControlRowType.Header)
82 {
83 if (SortExpression != String.Empty)
84 {
85 DisplaySortOrderImages(SortExpression, e.Row);
86 this.CreateRow(0, 0, DataControlRowType.EmptyDataRow, DataControlRowState.Normal);
87 }
88 }
89 base.OnRowCreated(e);
90 }
91 #endregion
92 受保护de方法#region 受保护de方法
93 /**//// <summary>
94 /// 获取排序表达式
95 /// </summary>
96 protected string GetSortExpression(GridViewSortEventArgs e)
97 {
98 string[] sortColumns = null;
99 string sortAttribute = SortExpression;
100
101 if (sortAttribute != String.Empty)
102 {
103 sortColumns = sortAttribute.Split(”,”.ToCharArray());
104 }
105 if (sortAttribute.IndexOf(e.SortExpression) > 0 || sortAttribute.StartsWith(e.SortExpression))
106 {
107 sortAttribute = ModifySortExpression(sortColumns, e.SortExpression);
108 }
109 else
110 {
111 sortAttribute = String.Concat(”,”, e.SortExpression, ” ASC “);
112 }
113 return sortAttribute.TrimStart(”,”.ToCharArray()).TrimEnd(”,”.ToCharArray());
114
115 }
116 /**//// <summary>
117 /// 修改排序顺序
118 /// </summary>
119 protected string ModifySortExpression(string[] sortColumns, string sortExpression)
120 {
121 string ascSortExpression = String.Concat(sortExpression, ” ASC “);
122 string descSortExpression = String.Concat(sortExpression, ” DESC “);
123
124 for (int i = 0; i < sortColumns.Length; i )
125 {
126
127 if (ascSortExpression.Equals(sortColumns[i]))
128 {
129 sortColumns[i] = descSortExpression;
130 }
131
132 else if (descSortExpression.Equals(sortColumns[i]))
133 {
134 Array.Clear(sortColumns, i, 1);
135 }
136 }
137
138 return String.Join(”,”, sortColumns).Replace(”,,”, “,”).TrimStart(”,”.ToCharArray());
139
140 }
141 /**//// <summary>
142 /// 获取当前de表达式对所选列进行排序
143 /// </summary>
144 protected void SearchSortExpression(string[] sortColumns, string sortColumn, out string sortOrder, out int sortOrderNo)
145 {
146 sortOrder = “”;
147 sortOrderNo = -1;
148 for (int i = 0; i < sortColumns.Length; i )
149 {
150 if (sortColumns[i].StartsWith(sortColumn))
151 {
152 sortOrderNo = i 1;
153 if (AllowMultiColumnSorting)
154 {
155 sortOrder = sortColumns[i].Substring(sortColumn.Length).Trim();
156 }
157 else
158 {
159 sortOrder = ((SortDirection == SortDirection.Ascending) ? “ASC” : “DESC”);
160 }
161 }
162 }
163 }
164 /**//// <summary>
165 /// 绘制升序降序de图片
166 /// </summary>
167 protected void DisplaySortOrderImages(string sortExpression, GridViewRow dgItem)
168 {
169 string[] sortColumns = sortExpression.Split(”,”.ToCharArray());
170
171 for (int i = 0; i < dgItem.Cells.Count; i )
172 {
173 if (dgItem.Cells[i].Controls.Count > 0 && dgItem.Cells[i].Controls[0] is LinkButton)
174 {
175 string sortOrder;
176 int sortOrderNo;
177 string column = ((LinkButton)dgItem.Cells[i].Controls[0]).CommandArgument;
178 SearchSortExpression(sortColumns, column, out sortOrder, out sortOrderNo);
179 if (sortOrderNo > 0)
180 {
181 string sortImgLoc = (sortOrder.Equals(”ASC”) ? SortAscImageUrl : SortDescImageUrl);
182
183 if (sortImgLoc != String.Empty)
184 {
185 Image imgSortDirection = new Image();
186 imgSortDirection.ImageUrl = sortImgLoc;
187 dgItem.Cells[i].Controls.Add(imgSortDirection);
188
189 }
190 else
191 {
192
193 if (AllowMultiColumnSorting)
194 {
195 Literal litSortSeq = new Literal();
196 litSortSeq.Text = sortOrderNo.ToString();
197 dgItem.Cells[i].Controls.Add(litSortSeq);
198
199 }
200 }
201 }
202 }
203 }
204
205 }
206 #endregion
207 }

第二:详尽de分页信息显示,此功能没有封装成控件形式,直接在GridView_DataBound事件中对尾页操作即可.
下面是多列排序与分页显示相关代码de演示

<script runat=”server”>
void PageDropDownList_SelectedIndexChanged(Object sender, EventArgs e)
{
GridViewRow pagerRow = CustomersGridView.BottomPagerRow;
DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl(”PageDropDownList”);
CustomersGridView.PageIndex = pageList.SelectedIndex;
}
void CustomersGridView_DataBound(Object sender, EventArgs e)
{
GridViewRow pagerRow = CustomersGridView.BottomPagerRow;
LinkButton linkBtnFirst = (LinkButton)pagerRow.Cells[0].FindControl(”linkBtnFirst”);
LinkButton linkBtnPrev = (LinkButton)pagerRow.Cells[0].FindControl(”linkBtnPrev”);
LinkButton linkBtnNext = (LinkButton)pagerRow.Cells[0].FindControl(”linkBtnNext”);
LinkButton linkBtnLast = (LinkButton)pagerRow.Cells[0].FindControl(”linkBtnLast”);
if (CustomersGridView.PageIndex == 0)
{
linkBtnFirst.Enabled = false;
linkBtnPrev.Enabled = false;
}
else if (CustomersGridView.PageIndex == CustomersGridView.PageCount-1)
{
linkBtnLast.Enabled = false;
linkBtnNext.Enabled = false;
}
else if (CustomersGridView.PageCount<=0)
{
linkBtnFirst.Enabled = false;
linkBtnPrev.Enabled = false;
linkBtnNext.Enabled = false;
linkBtnLast.Enabled = false;
}
DropDownList pageList = (DropDownList)pagerRow.Cells[0].FindControl(”PageDropDownList”);
Label pageLabel = (Label)pagerRow.Cells[0].FindControl(”CurrentPageLabel”);
if (pageList != null)
{
for (int i = 0; i < CustomersGridView.PageCount; i )
{
int pageNumber = i 1;
ListItem item = new ListItem(pageNumber.ToString() “/” CustomersGridView.PageCount.ToString(), pageNumber.ToString());
if (i == CustomersGridView.PageIndex)
{
item.Selected = true;
}
pageList.Items.Add(item);
}
}
if (pageLabel != null)
{
int currentPage = CustomersGridView.PageIndex 1;
pageLabel.Text = “当前页: ” currentPage.ToString()
” / ” CustomersGridView.PageCount.ToString();
}
}
</script>
<html>
<body>
<form id=”Form1″ runat=”server”>
<h3>
GridView PagerTemplate Example</h3>
<asp:WebGridView ID=”CustomersGridView” DataSourceID=”CustomersSqlDataSource” AutoGenerateColumns=”true”
AllowPaging=”true” OnDataBound=”CustomersGridView_DataBound” SortAscImageUrl=”~\images\arrow-up.gif” SortDescImageUrl=”~\images\arrow-down.gif” runat=”server” AllowSorting=”True” Width=”723px”>
<PagerStyle ForeColor=”Blue” BackColor=”LightBlue” />
<PagerTemplate>
<table width=”100%”>
<tr>
<td width=”70%”>
<asp:Label ID=”MessageLabel” ForeColor=”Blue” Text=”页码:” runat=”server” />
<asp:DropDownList ID=”PageDropDownList” AutoPostBack=”true” OnSelectedIndexChanged=”PageDropDownList_SelectedIndexChanged”
runat=”server” />
<asp:LinkButton CommandName=”Page” CommandArgument=”First” ID=”linkBtnFirst” runat=”server”>首页</asp:LinkButton>
<asp:LinkButton CommandName=”Page” CommandArgument=”Prev” ID=”linkBtnPrev” runat=”server”>上一页</asp:LinkButton>
<asp:LinkButton CommandName=”Page” CommandArgument=”Next” ID=”linkBtnNext” runat=”server”>下一页</asp:LinkButton>
<asp:LinkButton CommandName=”Page” CommandArgument=”Last” ID=”linkBtnLast” runat=”server”>末页</asp:LinkButton>
</td>
<td width=”70%” align=”right”>
<asp:Label ID=”CurrentPageLabel” ForeColor=”Blue” runat=”server” />
</td>
</tr>
</table>
</PagerTemplate>
</asp:WebGridView>
<asp:SqlDataSource ID=”CustomersSqlDataSource” SelectCommand=”Select [CustomerID], [CompanyName], [Address], [City], [PostalCode], [Country] From [Customers]“
ConnectionString=”<%$ ConnectionStrings:NorthWindConnectionString%>” runat=”server”>
</asp:SqlDataSource>
</form>
</body>
</html>

将JSP在内存生成的图片显示到页面

星期一, 06月 2nd, 2008

Imaging_ToWeb.jsp

<%@ page autoFlush=”false” import=”java.awt.*,java.awt.image.*,com.sun.image.codec.jpeg.*,java.util.*”%>
<%
String ImageStr = request.getParameter(”ID_Text”);
if(ImageStr==null || ImageStr.equals(”"))
{
response.setContentType(”text/html; charset=gb2312″);
%>
<HTML>
<HEAD>
<title>Http://www.lionsky.net</title>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>
</HEAD>
<body>
<form id=”Form1″ method=”post”>
<input type=”text” id=”ID_Text” name=ID_Text>
<input type=submit value=”GO”>
</form>
</body>
</HTML>

<%
}
else
{
out.clear();
response.setContentType(”image/jpeg”);
response.addHeader(”pragma”,”NO-cache”);
response.addHeader(”Cache-Control”,”no-cache”);
response.addDateHeader(”Expries”,0);
int width=300, height=100;
BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics g = image.getGraphics();
//以下填充背景颜色
g.setColor(Color.lightGray);
g.fillRect(0, 0, width, height);
String random=”random”;
//以下设置前景色
g.setColor(Color.BLACK);
g.drawString(”Http://www.knowsky.com”,10,20);
g.drawString(”Author:Lion[lion-a@sohu.com]“,10,40);
g.drawLine(10,50,290,50);
g.drawString(ImageStr,10,70);
g.dispose();
ServletOutputStream outStream = response.getOutputStream();
JPEGImageEncoder encoder =JPEGCodec.createJPEGEncoder(outStream);
encoder.encode(image);
outStream.close();
}

%>

JSP数据库操数据分页显示

星期一, 06月 2nd, 2008

<%@ page contentType=”text/html;charset=8859_1″ %>
<%
//变量声明
java.sql.Connection sqlCon; //数据库连接对象
java.sql.Statement sqlStmt; //SQL语句对象
java.sql.ResultSet sqlRst; //结果集对象
java.lang.String strCon; //数据库连接字符串
java.lang.String strSQL; //SQL语句
int intPageSize; //一页显示de记录数
int intRowCount; //记录总数
int intPageCount; //总页数
int intPage; //待显示页码
java.lang.String strPage;
int i;
//设置一页显示de记录数
intPageSize = 2;
//取得待显示页码
strPage = request.getParameter(”page”);
if(strPage==null){//表明在QueryString中没有page这一个参数,此时显示第一页数据
intPage = 1;
}
else{//将字符串转换成整型
intPage = java.lang.Integer.parseInt(strPage);
if(intPage<1) intPage = 1;
}
//装载JDBC驱动程序
java.sql.DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver());
//设置数据库连接字符串
strCon = “jdbc:oracle:thin:@linux:1521:ora4cweb”;
//连接数据库
sqlCon = java.sql.DriverManager.getConnection(strCon,”hzq”,”hzq”);
//创建一个可以滚动de只读deSQL语句对象
sqlStmt = sqlCon.createStatement(java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE,java.sql.ResultSet.CONCUR_READ_ONLY);
//准备SQL语句
strSQL = “select name,age from test”;
//执行SQL语句并获取结果集
sqlRst = sqlStmt.executeQuery(strSQL);
//获取记录总数
sqlRst.last();
intRowCount = sqlRst.getRow();
//记算总页数
intPageCount = (intRowCount intPageSize-1) / intPageSize;
//调整待显示de页码
if(intPage>intPageCount) intPage = intPageCount;
%>
<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=gb2312″>
<title>JSP数据库操作例程 - 数据分页显示 - JDBC 2.0 - Oracle</title>
</head>
<body>
<table border=”1″ cellspacing=”0″ cellpadding=”0″>
<tr>
<th>姓名</th>
<th>年龄</th>
</tr>
<%
if(intPageCount>0){
//将记录指针定位到待显示页de第一条记录上
sqlRst.absolute((intPage-1) * intPageSize 1);
//显示数据
i = 0;
while(i<intPageSize && !sqlRst.isAfterLast()){
%>
<tr>
<td><%=sqlRst.getString(1)%></td>
<td><%=sqlRst.getString(2)%></td>
</tr>
<%
sqlRst.next();
i ;
}
}
%>
</table>
第<%=intPage%>页 共<%=intPageCount%>页 <%if(intPage<intPageCount){%><a href=”jdbc20-oracle.jsp?page=<%=intPage 1%>”>下一页</a><%}%> <%if(intPage>1){%><a href=”jdbc20-oracle.jsp?page=<%=intPage-1%>”>上一页</a><%}%>
</body>
</html>
<%
//关闭结果集
sqlRst.close();
//关闭SQL语句对象
sqlStmt.close();
//关闭数据库
sqlCon.close();
%>

JSP显示中文问题的解决方案

星期一, 06月 2nd, 2008

这两天在win98下装apache1.3.9加jserv和gnujsp1.0,jdk1.2.2,jsdk2.0
发现中文无法正常显示.要么乱码,要么出错.
经网友提醒,总结了以下几条方法.
1:修改区域设置:在控制面版中选择区域设置,设为英语(美国)?nbsp;
然后重起.一切就都正常.
2:在jsp页中加入一条语句:
<%@ page contentType="text/html;charset=gb2312" %> ?
琷sp显示就正常了.
3:在编译servlet和jsp时加入相关代码选项.编译servlet使用
javac -encoding iso8859_1 myservlet.java
在jspdezone配置文件中.修改编译参数为:
compiler=builtin-javac -encoding ISO8859_1
使用这种方法后,不需要作其他de改动就可以正常显示中文了.
4:最土de办法,在servlet源程序中加入相关代码变换语句.如
try{
out.println(new ( (new String("我爱死您了")).getBytes("GBK"),"ISO8859_1"))
}
catch( UnsupportedEncodingException e)
{
…….
}
使用这种方法一定要注意捕获UnsupportedEncodingException

用PHP实现ODBC数据分页显示一例

星期一, 06月 2nd, 2008

$pagesize = 2; //一页显示记录数
$con = odbc_connect("access_test","","",SQL_CUR_USE_ODBC) or die("无法连接ODBC数据源access_test"); //连接一个ODBC数据源
$sql = "select count(*) as total from test"; //取得记录总数SQL语句
$rst = odbc_exec($con,$sql) or die("$sql查询出错"); //执行取得记录总数SQL语句
$recordcount = odbc_result($rst,1); //取得记录总数,在这里也可以用$recordcount = odbc_result($rst,"total");
odbc_free_result($rst); //释放资源
$pagecount = bcdiv($recordcount $pagesize-1,$pagesize,0); //算出总页数
if(!isset($page)) $page = 1; //如果没有指定显示页码,缺省为显示第一页
if($page<1) $page = 1; //如果页码比1小,则显示第一页
if($page>$pagecount) $page = $pagecount; //如果页码比总页数大,则显示最后一页
if($page>0){ //页码比0大,表示有数据
echo ‘>> 分页 ‘;
echo ‘<a href="’ . $PHP_SELF . ‘?page=1">首页</a> ‘;
if($page>1){
echo ‘<a href="’ . $PHP_SELF . ‘?page=’. ($page-1) . ‘">前页</a> ‘;
}
else{
echo ‘前页 ‘;
}
if($page<$pagecount){
echo ‘<a href="’ . $PHP_SELF . ‘?page=’. ($page 1) . ‘">后页</a> ‘;
}
else{
echo ‘后页 ‘;
}
echo ‘<a href="’ . $PHP_SELF . ‘?page=’ . $pagecount . ‘">尾页</a> ‘;
echo ‘页次: ‘ . $page . ‘/’ . $pagecount . ‘页 ‘;
echo $pagesize . ‘条/页 ‘;
echo ‘共’ . $recordcount . ‘条 ‘;
$sql = "select * from test"; //取得数据SQL语句
$rst = odbc_exec($con,$sql) or die("$sql查询出错"); //执行取得数据SQL语句
$fieldcount = odbc_num_fields($rst); //取得字段总数
echo ‘<table border="1" cellspacing="0" cellpadding="0">’;
echo ‘<tr>’;
for($i=1;$i<=$fieldcount;$i ){
echo ‘<th>’ . odbc_field_name($rst,$i) . ‘</th>’; //显示第$i个字段名
}
echo ‘</tr>’;
$rowi = ($page-1)*$pagesize 1;
for($i=0;$i<$pagesize;$i ){
echo ‘<tr>’;
if($rowi>$recordcount){
for($j=0;$j<$fieldcount;$j ){
echo ‘<td> </td>’;
}
}
else{
odbc_fetch_into($rst,$rowi,&$row);
for($j=0;$j<$fieldcount;$j ){
$field = $row[$j];
if($field==”) $field = ‘ ‘;
echo ‘<td>’ . $field . ‘</td>’;
}
$rowi = $rowi 1;
}
echo ‘</tr>’;
}
echo ‘</table>’;
odbc_free_result($rst); //释放资源
}
else{
echo "无数据";
}
odbc_close($con); //关闭连接并释放资源
?>

利用static实现表格的颜色隔行显示

星期一, 06月 2nd, 2008

利用static实现表格de颜色隔行显示
我用PHP从数据库查询数据,并将结果输出到浏览器上,如果结果有很多行,表格debgcolor如果全是单色de,浏览者会感觉不太舒服.那麽怎样做使表格各行de颜色不同呢?
请看下面:
<?
function getcolor()
{
static $colorvalue;//定义一个静态变量
if($colorvalue=="#ffffff")
$colorvalue="#000000";
else $colorvalue="#ffffff";
return($colorvalue);
}
print("<table border=1>n");//下面输出10行
for($i=0;$i<10;$i )
{ $bcolor=getcolor();//换背景颜色
print("<tr bgcolor=$bcolor>n");
print("<td>$i</td>n");
print("</tr>");
}
print("</table>n");
说明:
此程序中定义了一个静态变量static $colorvalue意思是在函数调用结束后,
此变量$colorvalue还保留值,没有消失.当再次调用getcolor()函数时,变量$colorvaluede值是上次函数调用结束时$colorvaluede值.

vBulletin HACK—-显示话题大小和打开新窗口于论坛索引页

星期一, 06月 2nd, 2008

vBulletin HACK
—-显示话题大小和打开新窗口于论坛索引页
作者:gogosoft
《显示话题大小》
原因:1.1.4版本中没有此功能,而部分用户会以此作为是否查看话题de参考因素.
优点:只需要增加几行相关代码就可以.
缺点:因为每次显示论坛索引页都需要对该页de话题全部计算大小,所以可能会对服务器造成若干de影响.
自评:这是一个小功能,可有可无,实用与否见仁见智.
步骤:
⒈打开 forumdisplay.php ,查找“
if ($announcement=$DB_site->query_first("SELECT announcementid,userid,startdate,title FROM announcement WHERE startdate<=$datenow AND enddate>=$datenow AND (forumid=$forumid OR forumid=-1) ORDER BY startdate DESC LIMIT 1")) {
”,在后面加入“
// Hack thread size
$size=0;
$announcements=$DB_site->query("SELECT pagetext FROM announcement WHERE startdate<=$datenow AND enddate>=$datenow AND (forumid=$forumid OR forumid=-1)");
while ($announce=$DB_site->fetch_array($announcements)) $size =strlen($announce[pagetext]);
$size=iif($size>1024,number_format($size/1024,1)."K",$size);
// End Hack thread size
”,查找“
while ($thread=$DB_site->fetch_array($threads)) {
”,在后面加入“
// Hack thread size
$size=0;
$posts=$DB_site->query("SELECT pagetext FROM post WHERE threadid=".$thread[threadid]);
while ($post=$DB_site->fetch_array($posts)) $size =strlen($post[pagetext]);
$size=iif($size>1024,number_format($size/1024,1)."K",$size);
// End Hack thread size
”,保存退出;
⒉在《控制面板》打开 forumdisplay 模板,查找“
<td align=center><smallfont color="{tableheadtextcolor}"><B>回复</B></smallfont>
</td>
<td align=center><smallfont color="{tableheadtextcolor}"><B>人气</B></smallfont>
</td>
”,在后面加入“
<td align=center><smallfont color="{tableheadtextcolor}"><B>大小</B></smallfont>
</td>
”,查找“
<TD valign="middle" width="100%" colspan="7">
”,替换为“
<TD valign="middle" width="100%" colspan="8">
”保存.打开 forumdisplaybit 模板,查找“
<td align=center bgcolor="{firstaltcolor}">
<normalfont>$replies</normalfont>
</td>
<td align=center bgcolor="{secondaltcolor}">
<normalfont>$views</normalfont>
</td>
”,在后面加入“
<td align=center bgcolor="{secondaltcolor}">
<normalfont>$size</normalfont>
</td>
”,打开 forumdisplay_announcement 模板,查找“
<td align=center bgcolor="{firstaltcolor}">
<normalfont>-</normalfont>
</td>
<td align=center bgcolor="{secondaltcolor}">
<normalfont>-</normalfont>
</td>
”,在后面加入“
<td align=center bgcolor="{secondaltcolor}">
<normalfont>$size</normalfont>
</td>
”,保存.完成!

《打开新窗口》
原因:这对于浏览一个经常更新de论坛来说,是很有用de,用户可以很简单地就打开了很多不同话题de窗口.
优点:很简单,只需要改动模板就实现了——好象也不是太属于HACK.:)
缺点:只能对话题de第一页打开新de窗口,而其它页,还是要按住Shift.
步骤:控制面板->模板->编辑,打开 forumdisplaybit ,查找“
<td bgcolor="{firstaltcolor}" width="100%"><normalfont>
$gotonew <A HREF="showthread.php?threadid=$threadid">$threadtitle</a>
”,在 $gotonew 后面或前面($gotonew 是那个“有新帖子”de图标)加入“
<A HREF="showthread.php?threadid=$threadid" target="_blank"><img src="images/newwin.gif" border="0"></a>
”,当然了,您得为这个打开新窗口de连接准备一个小图标,并上载到 images 目录下.完成!
例子:http://gogosoft.oso.com.cn/forum/forumdisplay.php?forumid=4

【本文版权归作者与奥索网共同拥有,如需转载,请注明作者及出处】

几种显示数据的方法的比较

星期一, 06月 2nd, 2008

用于显示数据库数据de时候,一般用循环体来做,常用de方法有while()和for()两种语句,下面就来讲一下他们在不同情况下各自de用法.
  我来分别介绍:
while()语句是可以显示全部数据,在不知道循环次数de情况下,尤其显得方便,而for()语句呢,可以输出显示从指定位置开始到指定位置结束de数据,在输出显示一定范围de数据时就用得上了.下面看一下编程实例:
  我先建一个数据库来备用:数据库名为:mydb 表名为:tbl.
用下面de语句:create table tal (idx int(3),url char (100),freetext char(100))
可以用phpmyadmin工具来向数库表中插入若干个数据.
编程开始:
$id=mysql_connect("localhost") or die("无法建立数据库链接");#链接数据库
$result=mysql_db_query("mydb","select * from tbl",$id);#查询结果并存入变量中
$rows=mysql_num_rows($result);#得出数据表中de总行数,也就是数据de总个数
echo"<table>";#准备以表格de形式输出
echo "</table>";#表格结束
在上面两句中插入输出语句,对应于不同de情况,输出语句分为几种情况:
若输出全部数据,先用for()来做
for($i=0;$i<$rows;$i ){
$total=mysql_fetch_array($result);
echo "<tr><td bgcolor=yellow><a href="http://$total[url]"target=_blank>$total[freetext]</a>$total[idx]</tr></td>";
}
用while()来做
while($total=mysql_fetch_array($result))
{ echo "<tr><td bgcolor=yellow><a href="http://$total[url]"target=_blank>$total[freetext]</a>$total[idx]</tr></td>";
}
当我想要分页显示de时候,也就是不能一下子把所有de数据一次性de显示完,那么可以用for()来完成这个任务.
我假设每输出10个数据,用$page来表示当前de页数$pagesize=10来表示第页de数据数量.语句如下所示:
for ($i=0;$i<$pagesize;$i )
{
$start=($page-1)*$pagesize $i;#计数起始de数据行数
if ($start<$rows)
$idx=mysql_result($result,$start,"idx");
$url=mysql_result($result,$start,"url");
$freetext=mysql_result($result,$start,"freetext");
echo "<tr><td bgcolor=yellow><a href="http://$url"target=_blank>$freetext</a>$idx</tr></td>";
上述语句用for()分别得出数据表中de各字段de值存入变量中,用echo语句显示出来.
以上程序在apache mysql php4中运行通过
【本文版权归作者与奥索网共同拥有,如需转载,请注明作者及出处】

用ODBC的分页显示

星期一, 06月 2nd, 2008

<?php

$pagesize = 3;//设置每页显示数目
//计算总记录数
$rs_num = "select count(*) as id from table";
$rs_num = odbc_exec($conn_id,$rs_num);
$rs_num = odbc_result($rs_num,"id");
//计算总页数
$pagecount = $rs_num / $pagesize;
$pagecount1 = intval($pagecount);//将总页数取整
$compare = $pagecount - $pagecount1;
switch ($compare){
case "0":
$pagecount = $pagecount1;//总页数
break;
default :
$pagecount1 ;
$pagecount = $pagecount1;//总页数
break;
};
if ($pagecount == 0)$pagecount ;

$fpages = $pages-1;
$bpages = $pages 1;

?>
<table>
<tr>
<td>
共<?php echo $pagecount ?>页
<?php if($pages != 1)echo "<a href=show.php3?pages=1>";?>首页<?php if($pages != 1)echo "</a>"; ?>
<?php if($pages != 1)echo "<a href=show.php3?pages=".$fpages.">"; ?>前页<?php if($pages != 1)echo "</a>"; ?>
<?php if($pages != $pagecount)echo "<a href=show.php3?pages=".$bpages.">"; ?>后页<?php if($pages != $pagecount)echo "</a>"; ?> <?php if($pages != $pagecount)echo "<a href=show.php3?pages=".$pagecount.">"; ?>
尾页<?php if($pages != $pagecount)echo "</a>"; ?>
</td>
</tr></table>
<?php
$firstshow = ($pages-1)*$pagesize 1;//确定每页de第一条记录
//找出第一条记录de记录号
$query_string = "SELECT * FROM table Order By id DESC";
$query_string = odbc_exec($conn_id,$query_string);
odbc_fetch_into($query_string,$firstshow,&$idarea);
$idsql = $idarea[0];
//定位查找
if ($pages == $pagecount) {
$rs = "SELECT * FROM table where id <= ‘".$idsql."’ Order By id DESC";
}else{
$rs = "SELECT Top ".$pagesize." * FROM table where id <= ‘".$idsql."’ Order By id DESC";
};
$rs = odbc_exec($conn_id,$rs);
//显示记录
while(odbc_fetch_row($rs)){

};
?>
<?php
//关闭连接
odbc_close($conn_id);
?>

【本文版权归作者与奥索网共同拥有,如需转载,请注明作者及出处】

将RTF格式的文件转成HTML并在网页中显示的代码

星期一, 06月 2nd, 2008

将RTF格式de文件转成HTML并在网页中显示de相关代码
它是这样工作de,将一个RTF文件上传,然后转成HTML显示出来,相关代码有点复杂,teaman还要好好研究,好象中文版有点问题.
<html>
<body>
<?
if(!($userfile)) {
?>
<form enctype="multipart/form-data" action="<?print($PHP_SELF);?>" method=post>
<input type=hidden name="max_file_size" value=2000>
Send this file: <input name=userfile type=file>
<input type=submit value=Upload>
</form>
</body>
</html>
<?
exit;
}
function ProcessTags($tags, $line) {
$html = "";
global $color;
global $size;
global $bullets;
// Remove spaces.
$tags = trim($tags);
// Found the beginning of the bulleted l
// ist.
if(ereg("\\\pnindent", $tags)) {
$html .= "<ul><li>";
$bullets = $line;
$tags = ereg_replace("\\\par", "", $tags);
$tags = ereg_replace("\\\(tab)", "", $tags);
}
if($line - $bullets == 0) {
$tags = ereg_replace("\\\par", "", $tags);
}
elseif($line - $bullets == 1) {
if(ereg("\\\pntext", $tags)) {
$html .= "<li>";
$tags = ereg_replace("\\\par", "", $tags);
$tags = ereg_replace("\\\(tab)", "", $tags);
$bullets ;
}
else {
$html .= "</ul>";
$bullets = 0;
}
}
// Convert Bold.
if(ereg("\\\b0", $tags)){ $html .= "</b>"; }
elseif(ereg("\\\b", $tags)) { $html .= "<b>"; }
// Convert Italic.
if(ereg("\\\i0", $tags)){ $html .= "</i>"; }
elseif(ereg("\\\i", $tags)) { $html .= "<i>"; }
// Convert Underline.
if(ereg("\\\ulnone", $tags)){ $html .= "</u>"; }
elseif(ereg("\\\ul", $tags)){ $html .= "<u>"; }
// Convert Alignments.
if(ereg("\\\pard\\\qc", $tags)) { $html .= "<div align=center>"; }
elseif(ereg("\\\pard\\\qr", $tags)) { $html .= "<div align=right>"; }
elseif(ereg("\\\pard", $tags)){ $html .= "<div align=left>"; }
// Remove \pard from the tags so it does
// n’t get confused with \par.
$tags = ereg_replace("\\\pard", "", $tags);
// Convert line breaks.
if(ereg("\\\par", $tags)){ $html .= "<br>"; }
// Use the color table to capture the fo
// nt color changes.
if(ereg("\\\cf[0-9]", $tags)) {
global $fcolor;
$numcolors = count($fcolor);
for($i = 0; $i < $numcolors; $i ) {
$test = "\\\cf" . ($i 1);
if(ereg($test, $tags)) {
$color = $fcolor[$i];
}
}
}
// Capture font size changes.
if(ereg("\\\fs[0-9][0-9]", $tags, $temp)) {
$size = ereg_replace("\\\fs", "", $temp[0]);
$size /= 2;
if($size <= 10) { $size = 1; }
elseif($size <= 12) { $size = 2; }
elseif($size <= 14) { $size = 3; }
elseif($size <= 16) { $size = 4; }
elseif($size <= 18) { $size = 5; }
elseif($size <= 20) { $size = 6; }
elseif($size <= 22) { $size = 7; }
else{ $size = 8; }
}
// If there was a font color or size cha
// nge, change the font tag now.
if(ereg("(\\\cf[0-9])||(\\\fs[0-9][0-9])", $tags)) {
$html .= "</font><font size=$size color=$color>";
}
// Replace \tab with alternating spaces
// and nonbreakingwhitespaces.
if(ereg("\\\(tab)", $tags)) { $html .= " "; }
return $html;
}
function ProcessWord($word) {
// Replace \\ with \
$word = ereg_replace("[\\]{2,}", "\\", $word);
// Replace \{ with {
$word = ereg_replace("[\\][\{]", "\{", $word);
// Replace \} with }
$word = ereg_replace("[\\][\}]", "\}", $word);
// Replace 2 spaces with one space.
$word = ereg_replace(" ", " ", $word);
return $word;
}
$color = "000000";
$size = 1;
$bullets = 0;
// Read the uploaded file into an array.
//
$rtfile = file($userfile);
$fileLength = count($rtfile);
// Loop through the rest of the array
for($i = 1; $i < $fileLength; $i ) {
/*
** If the line contains "\colortbl" then we found the color table.
** We’ll have to split it up into each individual red, green, and blue
** Convert it to hex and then put the red, green, and blue back together.
** Then store each into an array called fcolor.
*/
if(ereg("^\{\\\colortbl", $rtfile[$i])) {
// Split the line by the backslash.
$colors = explode("\\", $rtfile[$i]);
$numOfColors = count($colors);
for($k = 2; $k < $numOfColors; $k ) {
// Find out how many different colors th
// ere are.
if(ereg("[0-9] ", $colors[$k], $matches)) {
$match[] = $matches[0];
}
}
// For each color, convert it to hex.
$numOfColors = count($match);
for($k = 0; $k < $numOfColors; $k = 3) {
$red = dechex($match[$k]);
$red = $match[$k] < 16 ? "0$red" : $red;
$green = dechex($match[$k 1]);
$green = $match[$k 1] < 16 ? "0$green" : $green;
$blue = dechex($match[$k 2]);
$blue = $match[$k 2] < 16 ? "0$blue" : $blue;
$fcolor[] = "$red$green$blue";
}
$numOfColors = count($fcolor);
}
// Or else, we parse the line, pulling o
// ff words and tags.
else {
$token = "";
$start = 0;
$lineLength = strlen($rtfile[$i]);
for($k = 0; $k < $lineLength; $k ) {
if($rtfile[$i][$start] == "\\" && $rtfile[$i][$start 1] != "\\") {
// We are now dealing with a tag.
$token .= $rtfile[$i][$k];
if($rtfile[$i][$k] == " ") {
$newFile[$i] .= ProcessTags($token, $i);
$token = "";
$start = $k 1;
}
elseif($rtfile[$i][$k] == "\n") {
$newFile[$i] .= ProcessTags($token, $i);
$token = "";
}
}
elseif($rtfile[$i][$start] == "{") {
// We are now dealing with a tag.
$token .= $rtfile[$i][$k];
if($rtfile[$i][$k] == "}") {
$newFile[$i] .= ProcessTags($token, $i);
$token = "";
$start = $k 1;
}
}
else {
// We are now dealing with a word.
if($rtfile[$i][$k] == "\\" && $rtfile[$i][$k 1] != "\\" && $rtfile[$i][$k - 1] != "\\") {
$newFile[$i] .= ProcessWord($token);
$token = $rtfile[$i][$k];
$start = $k;
}
else {
$token .= $rtfile[$i][$k];
}
}
}
}
}
$limit = sizeof($newFile);
for($i = 0; $i < $limit; $i ) {
print("$newFile[$i]\n");
}
?>
</body>
</html>