存档

‘PHP相关’ 分类的存档

用dompdf和pChart生成PDF报表

2011年5月16日 2 条评论

今天搞定了Proposal Tool v2.0的PDF报表生成模块。简单总结一下我所使用的解决方案。

需求

需求是要根据用户选择的历史数据,动态的生成一系列的折线图、饼图、柱状图,然后将这些图表整合到一个PDF文件中。PDF中的文本也是动态的和可修改的。

工具

开发语言使用PHP;图表生成工具使用了强大的pChart库;生成PDF的库选择了dompdf。

pChart将直接生成图片文件,很方便的就可以作多种用途。(pChart和jqPlot的比较,可参考我之前的文章:《图表生成工具pChart和jqPlot》)

dompdf简单易用,可直接将HTML转换成PDF。API十分简洁。不过dompdf有一些限制,它不支持position:relative/absolute, 不支持嵌套表格,不支持float等等(其他限制参考dompdf官方网站)。所以布局比较复杂的页面用它来处理会比较吃力。

解决思路

分3步解决

  1. 使用pChart将数据转换成图表,并存储为图片文件,保存在临时存储区中
  2. 使用PHP的模板引擎定制HTML,并在其中引用上一步中生成的图片文件
  3. 使用dompdf将上一步中的HTML转换为PDF文件,删除临时存储区中的图片文件

效果图

PDF Report Generated by pChart and dompdf

PDF Report Generated by pChart and dompdf

图表生成工具pChart和jqPlot

2011年5月10日 6 条评论

之前开发喜乐喜乐网的后台统计功能的时候,一直在用jqPlot,效果很不错,我挺喜欢的。最近手头的一个项目要求将生成的图表嵌入到PDF中,jqPlot就无能为力了。于是我不得不转而寻找其他的解决方案,这才发现了pChart。感觉只有一个,那就是相见恨晚啊。

下面简单对比一下这两个图表生成工具。

成像风格

先上两个图看看效果

pChart Showcase

pChart Showcase

jqPlot Showcase

jqPlot Showcase

在图像风格上,pChart更加倾向于秀气,线条比较纤细;而jqPlot则显得比较大气,线条结实稳重。pChart内置了边缘防锯齿的功能,阴影、透明等feature一应俱全,成像风格很漂亮,我个人比较偏爱之。

适用场景

当然,图像的风格只是外在的表象,这二者最重要的区别在于,一个是在服务器端渲染图像,另外一个则是在浏览器端。

因此,pChart要占用服务器的CPU资源,当然,也要占用硬盘空间,如果你要把图表通过web页面展示的话,还要占用带宽资源。因此,pChart并不适合于用在仅需通过web页面显示图表的情境下,在这方面,jqPlot要更有优势一些,因为它是完全通过Javascript在浏览器端作图像渲染,不需要占用服务器端的CPU和硬盘,带宽的消耗也偏小,因为仅需传输文本数据而不是图片。

反过来,当你的图片不仅仅是要在浏览器上显示,还要作其他用处,比如我现在面临的情境,需要把图表嵌入到PDF文件中,那么pChart就将是不二之选了。pChart还内置了缓存机制pCache,用以节约CPU资源。一定程度上减少了CPU的消耗。

API易用程度

由于图表中需要控制的元素特别的多,因此API不可避免的会比较复杂一点,总体上来看,由于jqPlot中可以使用json,API上相对会比较简洁一些。而pChart则略逊一筹。

pChart

  1. /* Create and populate the pData object */
  2.  $MyData = new pData()
  3.  $MyData->addPoints(array(-4,VOID,VOID,12,8,3),"Probe 1");
  4.  $MyData->addPoints(array(3,12,15,8,5,-5),"Probe 2");
  5.  $MyData->addPoints(array(2,7,5,18,19,22),"Probe 3");
  6.  $MyData->setSerieTicks("Probe 2",4);
  7.  $MyData->setSerieWeight("Probe 3",2);
  8.  $MyData->setAxisName(0,"Temperatures");
  9.  $MyData->addPoints(array("Jan","Feb","Mar","Apr","May","Jun"),"Labels");
  10.  $MyData->setSerieDescription("Labels","Months");
  11.  $MyData->setAbscissa("Labels");
  12.  
  13.  /* Create the pChart object */
  14.  $myPicture = new pImage(700,230,$MyData);
  15.  
  16.  /* Turn of Antialiasing */
  17.  $myPicture->Antialias = FALSE;
  18.  
  19.  /* Add a border to the picture */
  20.  $myPicture->drawRectangle(0,0,699,229,array("R"=>0,"G"=>0,"B"=>0));
  21.  
  22.  /* Write the chart title */ 
  23.  $myPicture->setFontProperties(array("FontName"=>"../fonts/Forgotte.ttf","FontSize"=>11));
  24.  $myPicture->drawText(150,35,"Average temperature",array("FontSize"=>20,"Align"=>TEXT_ALIGN_BOTTOMMIDDLE));
  25.  
  26.  /* Set the default font */
  27.  $myPicture->setFontProperties(array("FontName"=>"../fonts/pf_arma_five.ttf","FontSize"=>6));
  28.  
  29.  /* Define the chart area */
  30.  $myPicture->setGraphArea(60,40,650,200);
  31.  
  32.  /* Draw the scale */
  33.  $scaleSettings = array("XMargin"=>10,"YMargin"=>10,"Floating"=>TRUE,"GridR"=>200,"GridG"=>200,"GridB"=>200,"DrawSubTicks"=>TRUE,"CycleBackground"=>TRUE);
  34.  $myPicture->drawScale($scaleSettings);
  35.  
  36.  /* Turn on Antialiasing */
  37.  $myPicture->Antialias = TRUE;
  38.  
  39.  /* Draw the line chart */
  40.  $myPicture->drawLineChart();
  41.  
  42.  /* Write the chart legend */
  43.  $myPicture->drawLegend(540,20,array("Style"=>LEGEND_NOBORDER,"Mode"=>LEGEND_HORIZONTAL));
  44.  
  45.  /* Render the picture (choose the best way) */
  46.  $myPicture->autoOutput("pictures/example.drawLineChart.simple.png");

jqPlot

  1. plot1 = $.jqplot('plot-area-daily'[s3, s1, s2],
  2. {
  3.         title : '总订单数、付款订单数按日统计 - 2011-04-10 ~ 2011-05-10',
  4.         legend:{show:true, renderer:$.jqplot.EnhancedLegendRenderer, location:'nw'},
  5.         series : [ 
  6.                 { label : '总订单数' },
  7.                 { label : '付款订单数' },
  8.                 { label : '未付款订单数' } 
  9.         ]
  10.         axes : { 
  11.                 xaxis : { 
  12.                         renderer : $.jqplot.DateAxisRenderer,
  13.                         tickOptions : { formatString: '%Y-%m-%d %a' }
  14.                         }
  15.                 yaxis : { min : 0, tickOptions : { formatString: '%d' } } 
  16.         }
  17.         cursor:{zoom:true, showTooltop:false}
  18. });

总结

pChartjqPlot
成像风格秀气,鲜亮大气,稍显暗淡
技术特点服务器端,基于PHP浏览器端,基于Javascript
优势生成图片文件,可用于多种用途在浏览器端渲染,节约服务器资源
适用场合图表有多种用途时图表仅需在浏览器中显示时

WordPress中文化教程

2007年7月3日 没有评论

前些日子发了一个Wordrpess中文包,但没有对如何发安装和配置进行详细的说明。有几个网友给我发信询问关于如何安装的问题,本篇文章详细描述的安装过程,希望对朋友们有帮助。

第一步:下载WordPress中文包

第二步:把下载得到的zh_CN.mo文件拷贝到wordpress安装目录下的 wp-includes/languages/ 目录中。如果这个目录不存在则创建之。

第三步:修改配置文件 wp-config.php,此文件位于wordpress安装根目录中。将以下这一行:
[php]define (‘WPLANG’, ”);[/php]
改为:
[php]define(‘WPLANG’, ‘zh_CN’);[/php]
注意不要把文件的后缀 .mo 带上。

以上三步过后,你的wordpress就已经中文化了,怎么样?是不是很简单?

如果您在配置的过程中遇到什么问题,可以给我留言或者发信。另外,如果发现本文有错误之处,请及时告诉我,我会及时改正。

WordPress主题编写教程五B:内容

2007年3月15日 2 条评论

在本节课中,我们来研究一下真正重要的问题:你如何让你的博客的内容显示出来?然后,你得添加更多的层来把内容和我们昨天已经调用过的文章标题分隔开来。
注意:昨天的课程十分十分重要,如果你没有完全理解我昨天叙述的内容,你得再重新看一遍,然后可以向我提问,以便弄清楚它。)

第一步:
在文章标题的代码下面输入:.

保存并刷新你的浏览器,你应该能够看到在标题下面有一些文字。

刚才发生了什么?为什么会这样呢?
你使用PHP函数the_content()调用了文章的内容。现在你的文章内容只是一行文本,一直延伸到屏幕的右边,这是因为你还没有定义它的显示样式。还记得style.css文件吗?在以后的课程中我们将使用它来控制所有东西的显示方式。

昨天我让你们多发几篇文章来看看多篇文章是什么样子,如果你还没有发,那么现在就发吧。发完之后回到首页,多篇文章应该是这个样子的:

继续。。。

回到浏览器,点击查看-原代码。会弹出一个代码窗口。如果你用的是IE,那么弹出的会是一个记事本窗口。

我用的是FireFox,下面是在FireFox中的样子:

注意到页面源代码与你的index.php文件的不同了吗?所有你的图片、文字和其他东西,一切你在源代码中看到的都是由the_content()函数调用的。很有用,不是吗?如果没有博客程序,尤其是WordPress的模板系统,你就得自己编写所有的代码。

还有,注意一下我用圈圈起来的p标签,他们并没有在你的index.php文件中出现,但却出现在你的源代码窗口中。

那么这些P标签是为什么又是怎么加上去的呢?
为什么:在输入你的内容的时候,每个空行代表一个段落,你需要一种方式来把这种段落的划分显示出来。每个段落处于一对P标签中。这样就在段落之间产生了你所看到的空白。
怎样加上去:这很简单,WordPress自动为你生成了P标签。

第二步:
用一个具有class=”entry”的层来包含the_content(),像这样:
[html]

[/html]
这时的代码应该是:

保存并刷新浏览器,如果你查看源代码,你会发现你的每个文章内容条目都被一个class=”entry”的层包围着。

为什么这么做呢?
第一个原因,这样做可以让你把文章标题和文章内容区别开。第二个原因,是为了让你可以订制你的style.css文件。如果你愿意的话,你可以在不改变其他任何东西的情况下修改文章内容的样式。

id与class有什么区别:
到现在为止,你一直使用id来给层命名,还记得id=”header”吧。那么id与class有什么不同呢?id是唯一的,而class不是。如果你看看你的源代码就会发现,只有一个层id=”header”,只有一个层id=”content”,但有多个层class=”entry”。

那么header和content可不可以也用class呢?当然可以。

记住一点,你不能多次使用一个id。比如你不能在一个页面上写入两个id=”header”的层。如果你想反复使用同一个样式,那么就用class。

第三步:
把文章标题和文章内容用一个class=”post”的层包围起来。[html]

[/html]
(你可以给id和class用任何名字,你甚至可以用你喜欢的食物来命名他们,但是post和entry既简短有容易记,不是吗?)
现在的代码是这样:

下面是组织过后的版本:

我使用制表符来产生缩进。为什么要这么做呢?那是因为你的代码不像我的截图,没有红色和绿色的高亮显示,你需要一种方式来跟踪你的代码,使用缩进以后,你就可以很容易的分辨出哪个</div>与哪个<div>相对应。

保存并刷新你的浏览器来查看源代码的改变。

为什么要用另一个层来包围文章标题和文章内容呢?
你添加了class=”entry”层 来区分文章标题和文章内容,而你添加class=”post”的层则是为了把文章与文章区分开来。

这些就是今天的内容了。可能有点难懂,所以如果你不懂得话一定要问我。明天我们讨论一下日期、分类和评论。

如果你在我的教程中发现了错误,请一定尽快告诉我,以便我进行修改。还有,现在我们的进度如何?我是否需要讲的再详细一些呢?这个教程是不是太长了呢?请告诉我。

点击这里来从头阅读WordPress主题编写教程

分类: PHP相关, Web开发 标签:

WordPress主题编写教程五:主循环

2007年3月14日 没有评论

主循环,调用了你的博客的内容条目。它是最为重要的PHP代码段。现在你应该已经知道在本节之前应该对我的系列教程做什么了吧,现在开始。先去做那件该做的事,然后我们来总结一下我们现在学过了什么东西。

到现在为止,你已经学到:

原则、结构和WordPress主题的分级制度
你的每一个页面是由什么组成的
如何安装你的主题
如何调用你的博客标题并把它转化成一个链接
如何调用你的博客的描述并把页头与其实内容分隔开来
现在我们开始第五课:
现在你应该已经开启了Xampp Control,打开了主题文件夹,将浏览器定位到 http://localhost/wordpress, 并已经在记事本中打开了index.php文件。该文件中应该有这样的内容:

记住,要想学会,请自己输入代码,而不要拷贝。

第一步:
在页头区域下面添加一个DIV(看不见的盒子)。将其ID设为”content”,像这样:

[html]

[/html]

这个层(DIV)是用来干什么的呢?它是用来把你的内容与接下来的内容(像侧边栏、页脚)分隔开来的。

第二步:

在content层中加入以下代码。按照你看到的原样输入这些代码,如果出现错误,请重新输入。

[php]

[/php]

从现在起,对你来说,每一个代码段是做什么的与它具体是怎么工作的相比,前者更好理解。刚才你输入的就是WordPress中的主循环。在我作进一步解释之前,你的代码应该已经是这样了:

你应该已经注意到,我把内容层中的代码都进行了缩进,而且常常输入空行。这是为了方便组织代码。现在单单手动输入代码已经不够了。你还得组织它们,使得你在一段时间后还知道每样东西在哪,有哪些代码与它相关。对于代码的缩进,最好用制表符而不是空格。

刚才发生了什么?

if(have_posts()) – 检查你是否有post
while(have_posts()) – 如果有post,只要还有,就执行the_post()
the_post() – 调用要显示的post
endwhile – 遵循原则#1,这个是用来关闭while()的
endif – 关闭if()
注意:不是每一个代码段都需要两个部分来开始和结束。有一些可以自关闭,这就解释了 have_posts() 和 the_post(); 函数(前者无分号,后者有分号)。因为the_post(); 在if()和while()的外面,它就需要用它自己的分号来结束它自己。(这里作者所说的“关闭”和“自关闭”应该是XHTML标签中的术语,译者认为并不适用于对PHP代码的解释。)

第三步:

在前面的课程中,你学会了如何用 bloginfo(‘name’) 来调用你的博客的标题。现在,你将学习如何在主循环中调用文章标题。

在the_post();?> 后面、 前面输入:

保存并刷新浏览器。你会发在你的博客的描述后面紧跟的是 Hello World。默认情况下,你的博客只有一篇文章。对于我来说,我的测试博客有多篇文章,所以我这里会显示多个文章标题。由于我的文章标题是相同的,而且在教程的本部分并没有将它们组织起来,它们看起来就像是一长串的 Hello World。

第四步:

把你的文章标题转换成链接。还记得怎么把博客标题转换成链接的吗?这里是一样的。在 两端加上<a href=”#”>和</a>。

保存并刷新。现在你的文章标题是链接形式了,但它们没有链接到任何地方。为了让每一个标题指向它所对应的文章,你需要用 the_permalink() 替换 #。

[php]<a href="”>[/php]

the_permalink() 是一个PHP函数,用来调用每篇文章的地址。保存并刷新浏览器。如果你只有一个 Hello World 标题,把鼠标停在上面,你会发现状态栏中的地址已经不是 http://localhost/wordpress/#了。

如果你有不只一个标题链接,你会发现每一个标题链接到不同的页面。但我们的标题链接还在同一行里。为了把它们分开,在你的链接代码的两端加上

[php]

<a href="”>

[/php]

还记得我们在博客标题中用到的h1标签吗?那是你的页面的标题。h2用于子标题。现在你的文章标题都是子标题,每一个都占用独立的一行。保存并刷新浏览器以观察改变。

本节课到此结束。你应该已经掌握:

……

注意:如果你还没有掌握上述内容,发几个测试文章来测试一下你的主题。定位到: http://localhost/wordpress/wp-login.php。登陆,点击 Write 标签,请确定你正在看 Write Post标签,写一个post, 然后重复这一动作。你可以像我一样给他们起同一个名字 Hello World,或者你也可以给它们起不同的名字。

分类: PHP相关, Web开发 标签: ,

WordPress主题编写教程四B:继续页头(header)模板

2007年3月8日 没有评论

原文地址:http://www.wpdesigner.com/2007/02/24/wp-theme-lesson-4b-header-template-continues/

这是本系列的第四节。我本不该再提,但我还是再提最后一下:请确定您已经阅读了本系列之前的几篇文章,否则你可能不明白本节的内容。今天我们快速的结束页头模板的内容,然后介绍一下BOX模型。

第一步:

开启Xampp Control
打开名字为Tutorial的主题文件夹
打开浏览器,定位到 http://localhost/wordpres
打开主题文件夹中的index.php文件
第二步:
现在,在index.php文件中有这样一行:
[php]<a href="”>[/php]

在此行两端添加

。这里h1意思是一号标题。共有六级标题:h1, h2, h3, h4, h5, h6。默认情况下,h1是最大的,h6是最小的。

现在你的index.php文件中是这样的:
[php]

<a href="”>

[/php]
保存并在浏览器中刷新以查看效果。

第三步:

调用你的博客的描述信息。在标题链接的代码下面输入:。现在代码成为:
[php]

<a href="”>

[/php]

保存并刷新浏览器,你会看到你的博客的描述信息出现在标题链接的下方。你可以在后台更改你的描述信息。

– 结束PHP代码段

第四步:这一步教你一个新的标签,DIV。

用<div>和</div>包围所有的代码:

[php]

<a href="”>

[/php]

保存并刷新浏览器。你应该发现没有发生变化。

DIV可以比做一个看不见的盒子。它把你的博客标题链接和博客描述与其它内容分隔开来。如果你不给它规定样式的话,它就只起到分隔内容的作用。在接下来的课程里,你会学习用style.css文件来定义你的看不见的盒子的样式。你可以给它边界(border),补白(padding),边距(margin),背景色(background color),背景图片(background image),等等。

第五步:

给DIV标签添加一个id=”header”的属性。像这样:
[html]

[/html]

保存并刷新浏览器。

这并不会改变你的页面。我们给DIV标签一个ID,因为将来会有很多的DIV或者说看不见的盒子。你需要用一种方法来区分它们。

分类: PHP相关, Web开发 标签: ,

WordPress主题编写教程四:页头(header)模板

2007年3月7日 1 条评论

原文地址: http://www.wpdesigner.com/2007/02/23/wp-theme-lesson-4-header-template/

如果你没有从头看我的WordPress主题编写教程系列,请从头看起。如果看过,那祝你好运。昨天我教给你如何开启Xampp Control,安装你的主题并简单介绍了一下PHP。今天,我们继续学习点PHP,并学习如何调用你的网站和博客的标题。

记住,自己把代码敲进你的电脑里,而不要只是把我给你的代码拷贝进去。这一点是为了让你把你学过的东西记住。

第一步:
开启Xampp Control。然后,打开你的主题文件夹。你将看到你昨天已经建立的两个文件:index.php和style.css。

你的index.php和style.css文件应该与index.txt和style.txt相匹配。

第二步:
开启一个新的浏览器窗口。定位到 http://localhost/wordpress。你应该看到一个空白页面,因为你昨天刚刚安装了你的空白主题。

用记事本打开你主题文件夹中的index.php文件(右击index.php,选择“属性”,点击“更改”,找到记事本或者你所使用的文本编辑器,选择它并点击OK,更改完成后,双击index.php)。

现在,你已经打开了你的:主题文件夹、浏览器和index.php文件(用记事本)。

第三步:

在你的index.php文件的[code][/code]和[code][/code]标签之间输入:[code][/code],现在保存它。

回到浏览器,刷新一下页面。你会看到你的博客的标题。我的博客的标题是:Demo Theme Development。

刚才发生了什么?
你在你的index.php文件的正文中加入了一行PHP代码。这一行调用你的博客的信息,通过bloginfo()函数。特别的,它调用了你的博客的名字。就是你在选项页面设定的博客标题。

[code][/code]

每次你在index.php文件中添加或者修改内容后,你都要在浏览器中刷新以查看效果。

第四步:

要把你的博客标题转换成链接形式,需要加入一个XHTML标签。回到你的index.php文件。

在同一行加入[code][/code]和[code][/code],这一行变为:[code][/code]

回到浏览器,刷新,你会发现你的标题变成链接形式了。

现在,它成了一个链接。但它是一个不指向任何地方的链接。因为它是你的博客的标题,因此你可能想要把它指向你的首页。要达到这个目的,在href=后面的引号中输入:。保存,现在这一行变成了:
[code]<a href="">[/code]

在浏览器中刷新。现在如果你把鼠标停在链接上,你会看到状态栏中显示:http://localhost/wordpress

如果你点击该链接,就会转到你的博客的首页。现在你看到的会是同一个页面,但链接到“#”与“http://localhost/wordpress”是有很大不同的。你会在接下来的课程里学到关于链接的更多知识。

刚才发生了什么?
你把你的博客的标题转换成了一个链接,并把它链接到了你的博客的首页。

bloginfo(‘url’) - 调用你的博客的信息,这里是首页地址。
[code][/code] – 是一个用来开始一个链接的XHTML标签。
[code]
[/code] - 是结束链接的标签。如果没有它,你的页面就不知道哪里是链接的结束而把你的页面的后面所有内容都当成是一个大的链接。还记得原则#1吗?关闭所有标签。
href=”" – 是超文本值的缩写,在引号之间的内容就是该值。

用语言来描述的话,下面的代码:

[php]<a href="”>[/php]

意思是:我要开始一个链接,链接的值是我的博客的URL;我使用PHP函数bloginfo(‘url’)来调用我该URL/地址。链接的名称是我的博客的标题;我使用PHP函数bloginfo(‘name’)来调用我的博客的标题。关闭我的链接。

今天给大家简单介绍了一下XHTML,本节课就到这。Don’t burn yourself out.

点此链接从头开始学习WordPress主题编写教程

分类: PHP相关, Web开发 标签: ,

WordPress主题编写教程三:开始编写Index.php

2007年3月6日 1 条评论

原文地址: http://www.wpdesigner.com/2007/02/22/wp-theme-lesson-3-starting-indexphp/

开始编写Index.php是本教程的第三课。如果你没有看过第一课第二课,我建议你看一下。否则你可能对这节课的内容感到不知所云。

现在可以开始做你的WordPress主题了。在本节中,你可能不得不编写一些WordPress代码(原文是:In this lesson, you’ll get your hands dirty with some WordPress codes.)。在这部分中,你真的需要在本地安装WordPress,之所以不用在线的是因为离线的更方便。

第一步:开启Xampp
切换到你的xampp文件夹。一般在“我的电脑—xampp”或者“C:xampp”。

双击xampp-control.exe。弹出一个窗口。点击Apache和Mysql服务的“开始”按钮。见下图。

现在服务启到了。你可以最小化那个窗口了。

第二步:建立你的主题的文件夹。

切换到你的WordPress文件夹。应该是xampp/htdocs/wordpress/wp-content/themes。新建一个文件夹。命名为tutorial。

第三步:新建inde.php和style.css文件。
打开记事本或者其它文本编辑器。记事本在“开始—程序—附件—记事本”(这里好像有点多余,但原文如此)。

把这个文件:index.txt中的所有文本拷贝并粘贴到你的记事本窗口中。

把记事本中的内容保存为tutorial文件夹中的index.php文件。

开启另一个记事本窗口。保持其内容为空。把它保存为style.css,在同一个文件夹。然后关闭style.css文件。

这样你就有了两个文件:index.php和style.css。


点击上图以查看大图。我会告诉你划圈的部分有什么作用。

Doctype - 表示你编写主题所使用的代码种类。Doctype在这里不太重要。这在这里提及只是想让你不必去过多的关注它。

<html>是web页面开始的地方。

<head>是web页面头部开始的地方。每个web页面都有头部(head)和正文(body)。</head>是头部结束的地方。

<?php bloginfo(‘stylesheet_url’);?>是一个php函数,它返回style.css的路径,从而使得我的主题可以链接到它并用它来控制页面的显示样式。所有包涵在<?php?>之间的代码都是php代码,它与其它的代码不同。在php中,<?php是开始标签,而 ?> 是结束标签。

这样我们有:

  • <?php 开始php代码段
  • bloginfo(‘stylesheet_url’) 返回style.css的路径
  • ; 结束上面的函数调用。分号是php中的语句结束符号
  • ?> 结束php代码段

继续。。。

<body> 这是正文开始的地方。正文部分是我们在web页面上看到的所有东西。阅读这篇教程就意味着你在看着这个web页面的正文部分。</body>是正文结束的地方。

</html>是web页面结束的地方。在这之后就没有东西了。

第四步:复制这个文件:style.css中的所有内容并把它粘贴到你的 style.css 文件中。保存并关闭它。

第五步:设置你的主题。
开启一个浏览器。

定位到:http://localhost/wordpress/wp-login.php. 登陆你的WordPress。(你之所以能访问这个页面是因为你在第一步中开启了Xampp Control。否则,你的浏览器会出现一个“未找到”错误)。

在管理界面中,点击Presentation并点击名为 Tutorial 的主题来激活它。

注意,你的主题还没有一个缩略图。这个方框是空的。一但激活,WordPress会告诉你。

现在开启一个新窗口或者标签(如果你使用标签浏览的话)并定位到 http://localhost/wordpress。你会得到一个空白页面。我指的是完全的空白,什么都没有。如果不是,那么你所在的页面不对。

你的主题已经设置成功了。这就是本节课的内容。接下来,我们将开始做页头(header)模板。

别忘了关掉你的Xampp Control。点击系统托盘中的图标,点击Apache和Mysql服务的Stop按钮。然后点击Exit。

有问题吗?用下面的评论表单发表提问吧。

分类: PHP相关, Web开发 标签: ,

WordPress主题编写教程二:模板文件与模板

2007年3月5日 2 条评论

原文地址: http://www.wpdesigner.com/2007/02/21/wp-theme-lesson-2-template-files-and-templates/

模板文件与模板是本系列的第二课。如果你没有阅读第一课,请现在就停下来去读一下。否则你可能不懂第二课中的术语。
我们已经知道了基本的法则和术语,这节我来教你熟悉一下模板文件,模板和每个页面的结构。
需要记住的一件事是你的博客的每一个页面都是由多个模板文件组成的。这里是首页的一个例子。

在上面的例子中,你的首页是由四个模板文件组成的:header,index,sidebar和footer。
Header(页头)模板文件:

你的博客的标题和描述放在这个文件中。通常这些信息在整个博客站点内是不变的。
Index(首页)模板文件:
这个文件包涵了你的文章标题、内容(每个条目的文本和图片),以及Meta数据(每篇文章的信息,如:作者、发布时间、所属分类和评论数目)。

Sidebar(侧边栏)模板文件:
这个文件控制你的页面链接、分类链接、存档链接、友情链接以及其它东西。(侧边栏不一定在右侧。这个例子我使用的只是一个典型的两栏布局。)

Footer(页脚)模板文件:

与页头文件一样,页脚文件的内容一般也是不变的。你可以在这个文件中放置任何内容,但一般是放置版权信息。
现在我来解释一下为什么index.php在上例的图中用红色表示。Index.php是红色表示这个区域是会发生变化的,其具体的内容由你所在的页面决定。
如果你在浏览一个独立文章页,那么此页应该包涵这四个模板文件:header,single,sidebar和footer。

分类: PHP相关, Web开发 标签: ,

WordPress主题编写教程一:简介

2007年3月4日 2 条评论

译者:今天开始发表我翻译的Small PotatoWordPress Theme Tutorial Series。本文作者仍在继续写作此教程,而且有可能在完成所有文章后进行相应的修订,我会在作者作出修订后对此译文进行相应的修订。下面开始正文。

第一课:简介
原文地址:http://www.wpdesigner.com/2007/02/21/wp-theme-lesson-1-intro/

简介是我关于WordPress主题教程系列的第一课。我不会一下子把所有的东西都教给你。那样只会把你给弄糊涂。我将展示给你的不是一份参考手册。我将一步一步的教你。如果你需要一份涵盖WordPress主题的所有内容的参考手册,那么请阅读WordPress.org’s documentations, Design and Layout.

本节课的内容有:

  • 基本法则
  • 术语解释
  • 等级制度

基本法则

法则 #1: 按顺序关闭所有标签。
正确的方法:<ul><li></li></ul>
错误的方法:<ul><li></ul></li>

在错误的方法中,ul标签的关闭顺序有误。

每个标签都由尖括号包涵,“/”是标记该标签为开始标签还是结束标签的符号。<>代表开始,</>代表结束。在例子中,我使用了ul(无序列表)和li(列表元素)标签。注意li的开始标签和结束标签是如何放置在ul的开始标签和结束标签中的。这被称为嵌套。

法则 #2:每个主题最少有两个文件:style.css和index.php。你在index.php中决定整个主题的结构,而在style.css中决定主题的表现。

下面是完整的文件列表(暂时不要为这么多文件担心):

  • style.css
  • index.php
  • home.php
  • single.php
  • page.php
  • archive.php
  • category.php
  • search.php
  • 404.php
  • comments.php
  • comments-popup.php
  • arthor.php
  • date.php

术语解释

  • 模板:一系列的代码。你可以在多个地方使用它们而不用每次都重写这些代码。
  • 模板文件:包涵有一系列代码(模板)的文件。每一个页面都由很多模板文件组成。比如:index.php文件,style.css文件,sidebar.php文件等等。
  • 主题或者说WordPress主题:你使用的所有文件,包括文本、图片、代码等。注意:WordPress主题与WordPress模板是不同的两个概念,但有些人把它们当成一回事。
  • Post:你现在正在阅读的就是一篇Post。更确切的说,它是你博客的一个条目。就像日记的一页那样。
  • 页面:一种不通过分类来进行组织的特殊的Post。它和你的其它Post是分开的。注意:在WordPress中page和Page是两个完全不同的东西。首字母“P”是否大写造成了巨大的不同。

等级制度:

下面的图清晰的展示出,当你的某个主题文件丢失时,WordPress系统会以什么做为替代。我只列出了六个文件,而不是全部的十三个,因为这些是你应该最注意的最主要的文件。在本教程的接下来的文章里,你会学习到其它文件的内容。

我用图表中页面出现的位置表示了它的重要性。越靠上、靠左的,就越重要,越靠下、靠右的,就越不重要。

页面的等级或者重要性存在于模板文件之间,因为如果控制存档显示方式的archive.php页面丢失了,那么WordPress就会用index.php来控制存档页面的显示。

如果你有任何问题,随便问。不过请你在评论中提问,不要用Email。这样其它的有相同疑问的人就不用再重复提交他们的问题了。

分类: PHP相关, Web开发 标签: , ,

Page optimized by WP Minify WordPress Plugin