存档

‘php’ 分类的存档

构建嵌入式Linux + web+sqlite +php5.0 平台

2014年1月16日
构建嵌入式Linux + web+sqlite +php5.0 平台已关闭评论

Web和数据库技术在嵌入式技术中得到越来越广泛的应用,本专题我们来研究如何构建一个嵌入式Linux +web +php+sqlite 平台。

一、 工作软件平台配置

桌面Linux版本: Ubuntu10.04 – LTS

交叉编译器版本: arm-linux-gcc 4.4.3

设置好系统移植编译相关的环境变量,后面编译时用的到,设置方法如下:

#gedit /root/.bashrc  , 在.bashrc 增加如下内容:

export CC=arm-linux-gcc

export AR=arm-linux-ar

export LD=arm-linux-ld

export RANLIB=arm-linux-ranlib

export STRIP=arm-linux-strip

export CC_FOR_BUILD=gcc

保存关闭,gedit ,重新打开命令行终端。

二、移植PHP5

1. 移植zlib库和libxml2库

由于php5需要zlib库和libxml2库的支持,我们首先交叉编译编译zlib库和libxml2库。

1.1    移植zlib库

  • 解压软件包 zlib-1.2.3.tar.bz2 到 zlib-1.2.3目录;

  • 进入到zlib-1.2.3目录,执行 ./configure –shared –prefix=/home/zlibarm 配置 zlib 库;

  • 执行make命令编译 zlib库

  • 执行make install 安装编译好的库

make install 执行完成后, 在/home/zlibarm目录下可以看到我们编译好的 zlib库和相关头文件;

1.2    移植libxml2库

  • 解压软件包libxml2-2.7.8.tar.gz 到libxml2-2.7.8目录

  • 进入到libxml2-2.7.8目录,执行 ./configure –-prefix=/home/libxmlarm –host=arm-linux 配置libxml2库;

  • 执行make命令编译 libxml2库

  • 执行make install 安装编译好的库

make install 执行完成后, 在/home/libxmlarm目录下可以看到我们编译好的 libxml库和相关头文件;

2. 移植PHP5.0软件包

要让我们的WEB服务器支持PHP语言,我们需要移植PHP软件包,PHP软件包我们选择php-5.2.17.tar.gz, PHP移植步骤如下:

  • 解压软件包php-5.2.17.tar.gz到目录php-5.2.17

  • 编写PHP配置脚本文件 elphpcfg.sh, 配置脚本文件内容如下:

—————————————————————————

#! /bin/sh

./configure –prefix=/mnt/disk/eappweb/phparm

–host=arm-linux

–with-sqlite=shared

–with-pdo-sqlite=shared

–with-libxml-dir=/home/libxmlarm

–with-zlib-dir=/home/zlibarm

–disable-all

–enable-pdo=shared

–enable-embed=shared

–with-config-file-path=/mnt/disk/eappweb –with-config-file-scan-dir=/mnt/disk/eappweb

————————————————————————–

  • 编辑完PHP配置脚本文件elphpcfg.sh ,把elphpcfg.sh复制到php-5.2.17目录;

  • 进入php-5.2.17目录,执行 ./elphpcfg.sh配置PHP软件包;

  • 执行make命令编译 PHP5软件包

  • 执行make install 安装编译好的PHP5软件包

make install 执行完成后,在/mnt/disk/eappweb/phparm 目录下可以看到我们交叉编译好的PHP5 库文件及相关可执行文件;

注意: 编译过程中如果出现某些库文件找不到的错误信息,则把刚才编译好的一些库文件复制到编译器库文件所在路径。

三、 移植嵌入式数据库sqlite

Sqlite是嵌入式linux系统中常用的数据库,我们选择的sqlite软件包版本为sqlite-autoconf-3070701[1].tar.gz,Sqlite移植步骤如下:

  • 解压软件包sqlite-autoconf-3070701[1].tar.gz到目录sqlite-autoconf-3070701

  • 进入到sqlite-autoconf-3070701目录,执行./configure –host=arm-linux –prefix=/home/sqlitearm  –disable-tcl 配置sqlite数据库;

  • 执行make命令编译 sqlite软件包

  • 执行make install 安装编译好的sqlite软件包

make install 执行完成后,在/home/sqlitearm 目录下可以看到我们交叉编译好的sqlite 库文件及相关可执行文件;

四 、 移植web服务器appweb

Appweb是在嵌入式linux系统中常用的开源web服务器软件,我们选用的appweb 服务器软件版本为appweb-src-2.4.2-2.zip, appweb 移植步骤如下:

  • 解压软件包appweb-src-2.4.2-2.zip到目录appweb-src-2.4.2;

  • 创建appweb 配置脚本文件 appwebcfg.sh, 配置脚本文件内容如下:

——————————————————————————

#! /bin/sh

./configure –prefix=/home/appwebarm –host=arm-linux –build=i686-pc-linux –disable-shared –disable-shared-libc –enable-static –port=80 –disable-multi-thread –type=RELEASE –disable-test –disable-samples –with-php5=builtin –with-php5-libs=php5 –with-php5-dir=/home/zgdz/php-5.2.17 –with-php5-libpath=/home/zgdz/php-5.2.17/libs –with-php5-iflags="-I/home/zgdz/php-5.2.17  -I/home/zgdz/php-5.2.17/main -I/home/zgdz/php-5.2.17/Zend  -I/home/zgdz/php-5.2.17/TSRM"

——————————————————————————

  • 保存appweb配置脚本文件appwebcfg.sh,并复制到appweb-src-2.4.2目录下;

  • 进入appweb-src-2.4.2目录,执./appwebcfg.sh 配置appweb服务器;

  • 执行make 编译appweb软件包;

  • 执行make install 安装编译好的 appweb软件包;

Make install执行完成后,在/home/appwebarm 目录下可以看到我们交叉编译好的appweb应用软件及相关配置文档。

这样构建嵌入式web服务器 + PHP5 + Sqlite所需用的库文件和软件包都交叉编译完成了,接下来我们开始在嵌入式ARM11开发板 飞凌OK6410上部署嵌入式web服务器 + PHP5 + Sqlite平台。

五、部署嵌入式web PHP5.0 数据库平台

目标平台为飞凌OK6410开发板,在飞凌OK6410开发板上部署嵌入式Linux + appweb + PHP5.0 + sqlite数据库平台步骤如下:

  • 建立 /mnt/disk/eappweb 目录

  • 将appweb、PHP、sqlite相关库文件和配置文件复制到/mnt/disk/eappweb目录下,如下图所示:

构建嵌入式Linux + web+sqlite +php5.0 平台 - lihom_1987@126 - 王老板的博客

其中appweb.conf 是appweb的配置文件,根据实际情况进行配置,这里我们用默认配置即可。Php.ini为 PHP配置文件,修改php.ini文件,设置如下配置参数:

————————————————————————–

short_open_tag = On,

extension_dir = "/mnt/disk/eappweb/"

extension=pdo.so

extension=pdo_sqlite.so

extension=sqlite.so

enable_dl = On

—————————————————————————

  •    设置环境变量LD_LIBRARY_PATH= /mnt/disk/eappweb

  •    运行appweb服务器,执行appweb服务器命令如下:
    ./appweb –f appweb.conf –r /mnt/disk/eappweb

    这样开发板上就运行了appweb服务器。将电脑和开发板用网线连接起来,打开电脑浏览器输入:http://192.168.2.232/test.php 就可以看到PHP测试网页,说明PHP功能测试成功。

六、验证数据 sqlite支持功能

1. 测试数据库加载功能:

编写PHP脚本文件,phptest2.php,内容如下所示:

——————————————————————————-

<?php

if (extension_loaded(‘sqlite’)) {

echo ‘ok’;

}else{

if(!dl(‘sqlite’))

{

echo ‘sorry’;

}

else

{

    echo ‘ok’;

}

}

?>

—————————————————————————–

在浏览器地址栏输入:http://192.168.2.232/phptest2.php,显示OK,说明sqlite库加载成功。

2. 测试sqlite数据库操作功能:

编写脚本文件phptest.php, 内容如下:

————————————————————————–

<?php

$dbname="1.db";

if (!file_exists($dbname))

{

$fp = fopen($dbname, "w+") or die("创建数据库失败!");

fclose($fp);

$db = sqlite_open($dbname) or die("打开数据库失败");

sqlite_query($db, "CREATE TABLE liuyan (id integer primary key,name varchar(10),content text )") or die("建表失败!");;

}

$db = sqlite_open($dbname) or die("打开数据库失败");

if($_POST[‘postdata’])

{

$name=$_POST[‘name’];

$content=$_POST[‘content’];

sqlite_query($db, "INSERT INTO liuyan VALUES (NULL,’".$name."’,’".$content."’)") or die("插入数据失败");

}

$result = sqlite_query($db, ‘select name,content from liuyan’);

while($data=sqlite_fetch_array($result))

$list[]=$data;

?>

<div>

<?php

if(is_array($list))

foreach($list as $key=>$listdata)

echo $listdata[‘name’]. "说:".$listdata[‘content’]."<br />";

?>

</div>

<form action="" method="post">

姓名:<input name="name" type="text" id="name" size="27" /><br />

俺说: <textarea name="content" cols="25" rows="4" id="content"></textarea><br />

<input name="postdata" type="submit" id="postdata" value="提交" />

</form>

——————————————————————————

在浏览器地址栏输入:http://192.168.2.232/phptest.php,显示一个简单的留言板功能。留言后,在开发板的/mnt/disk/eappweb/web目录下可以看到生成的1.db数据库文件。

到这里,我们的嵌入式Linux + web+sqlite +php5.0 平台就构建并且验证完成了。

希望这篇文章对大家移植嵌入式WEB服务器有所帮助。

IT技术, php , , ,

preg_match的使用方法

2009年8月25日
preg_match的使用方法已关闭评论

preg_match

(PHP 4, PHP 5)

preg_matchPerform a regular expression match

Description

int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags [, int $offset ]]] )

Searches subject for a match to the regular expression given in pattern .

Parameters

pattern

The pattern to search for, as a string.

subject

The input string.

matches

If matches is provided, then it is filled with the results of search. $matches[0] will contain the text that matched the full pattern, $matches[1] will have the text that matched the first captured parenthesized subpattern, and so on.

flags

flags can be the following flag:

PREG_OFFSET_CAPTURE
If this flag is passed, for every occurring match the appendant string offset will also be returned. Note that this changes the return value in an array where every element is an array consisting of the matched string at index 0 and its string offset into subject at index 1.

offset

Normally, the search starts from the beginning of the subject string. The optional parameter offset can be used to specify the alternate place from which to start the search (in bytes).

Note: Using offset is not equivalent to passing substr($subject, $offset) to preg_match() in place of the subject string, because pattern can contain assertions such as ^, $ or (?<=x). Compare:

<?php
$subject
= "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
print_r($matches);
?>

The above example will output:

Array
(
)

while this example

<?php
$subject
= "abcdef";
$pattern = '/^def/';
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);
?>

will produce

Array
(
    [0] => Array
        (
            [0] => def
            [1] => 0
        )

)

 

Return Values

preg_match() returns the number of times pattern matches. That will be either 0 times (no match) or 1 time because preg_match() will stop searching after the first match. preg_match_all() on the contrary will continue until it reaches the end of subject . preg_match() returns FALSE if an error occurred.

Changelog

Version Description
4.3.3 The offset parameter was added
4.3.0 The PREG_OFFSET_CAPTURE flag was added
4.3.0 The flags parameter was added

Examples

Example #1 Find the string of text "php"

<?php
// The "i" after the pattern delimiter indicates a case-insensitive search
if (preg_match("/php/i", "PHP is the web scripting language of choice.")) {
echo
"A match was found.";
} else {
echo
"A match was not found.";
}
?>

Example #2 Find the word "web"

<?php
/* The \b in the pattern indicates a word boundary, so only the distinct
* word "web" is matched, and not a word partial like "webbing" or "cobweb" */
if (preg_match("/\bweb\b/i", "PHP is the web scripting language of choice.")) {
echo
"A match was found.";
} else {
echo
"A match was not found.";
}

if (preg_match("/\bweb\b/i", "PHP is the website scripting language of choice.")) {
echo
"A match was found.";
} else {
echo
"A match was not found.";
}
?>

Example #3 Getting the domain name out of a URL

<?php
// get host name from URL
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.php.net/index.html", $matches);
$host = $matches[1];

// get last two segments of host name
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo
"domain name is: {$matches[0]}\n";
?>

The above example will output:

domain name is: php.net

Example #4 Using named subpattern

<?php

$str = 'foobar: 2008';

preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);

print_r($matches);

?>

The above example will output:

Array
(
    [0] => foobar: 2008
    [name] => foobar
    [1] => foobar
    [digit] => 2008
    [2] => 2008
)

Notes

Tip

Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() or strstr() instead as they will be faster.

See Also

 

IT技术, php ,

PHP中的mb_convert_encoding与iconv函数介绍

2009年8月15日
PHP中的mb_convert_encoding与iconv函数介绍已关闭评论

mb_convert_encoding这个函数是用来转换编码的。原来一直对程序编码这一概念不理解,不过现在好像有点开窍了。

不过英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。

mb_convert_encoding的用法见官方:

http://cn.php.net/manual/zh/function.mb-convert-encoding.php

做一个GBK To UTF-8

< ?php

header("content-Type: text/html; charset=Utf-8");

echo mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK");

?>

再来个GB2312 To Big5

< ?php

header("content-Type: text/html; charset=big5");

echo mb_convert_encoding("你是我的朋友", "big5", "GB2312");

?>

不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库。

PHP中的另外一个函数iconv也是用来转换字符串编码的,与上函数功能相似。

下面还有一些详细的例子:

iconv — Convert string to requested character encoding

(PHP 4 >= 4.0.5, PHP 5)

mb_convert_encoding — Convert character encoding

(PHP 4 >= 4.0.6, PHP 5)

用法:

string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )

需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉

mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;

string iconv ( string in_charset, string out_charset, string str )

注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。

Returns the converted string or FALSE on failure.

使用:

发现iconv在转换字符”—”到gb2312时会出错,如果没有ignore参数,所有该字符后面的字符串都无法被保存。不管怎么样,这个”—”都无法转换成功,无法输出。 另外mb_convert_encoding没有这个bug.

一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数.

from_encoding is specified by character code name before conversion. it can be array or string – comma separated enumerated list. If it is not specified, the internal encoding will be used.

/* Auto detect encoding from JIS, eucjp-win, sjis-win, then convert str to UCS-2LE */

$str = mb_convert_encoding($str, “UCS-2LE”, “JIS, eucjp-win, sjis-win”);

/* “auto” is expanded to “ASCII,JIS,UTF-8,EUC-JP,SJIS” */

$str = mb_convert_encoding($str, “EUC-JP”, “auto”);

例子:

$content = iconv(”GBK”, “UTF-8″, $content);

$content = mb_convert_encoding($content, “UTF-8″, “GBK”);

IT技术, php , , ,

php中如何使用explode()

2009年8月15日
php中如何使用explode()已关闭评论

 

explode

(PHP 3, PHP 4, PHP 5)

explode — 使用一个字符串分割另一个字符串

描述

array explode ( string separator, string string [, int limit] )

此函数返回由字符串组成的数组,每个元素都是 string 的一个子串,它们被字符串 separator 作为边界点分割出来。如果设置了 limit 参数,则返回的数组包含最多 limit 个元素,而最后那个元素将包含 string 的剩余部分。

如果 separator 为空字符串(""),explode() 将返回 FALSE。如果 separator 所包含的值在 string 中找不到,那么 explode() 将返回包含 string 单个元素的数组。

如果 limit 参数是负数,则返回除了最后的 limit 个元素外的所有元素。此特性是 PHP 5.1.0 中新增的。

由于历史原因,虽然 implode() 可以接收两种参数顺序,但是 explode() 不行。你必须保证 separator 参数在 string 参数之前才行。

注: 参数 limit 是在 PHP 4.0.1 中加入的。

例子 1. explode() 示例

<?php
// 示例 1
$pizza  = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo
$pieces[0]; // piece1
echo $pieces[1]; // piece2

// 示例 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list(
$user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo
$user; // foo
echo $pass; // *

?>

例子 2. limit 参数示例

<?php
$str
= 'one|two|three|four';

// 正数的 limit
print_r(explode('|', $str, 2));

// 负数的 limit
print_r(explode('|', $str, -1));
?>

以上示例将输出:

Array
(
    [0] => one
    [1] => two|three|four
)
Array
(
    [0] => one
    [1] => two
    [2] => three
)

注: 该函数可安全用于二进制对象。

 

php ,

php如何使用implode()

2009年8月15日
php如何使用implode()已关闭评论

 

定义和用法

implode() 函数把数组元素组合为一个字符串。

语法

implode(separator,array)
参数 描述
separator 可选。规定数组元素之间放置的内容。默认是 ""(空字符串)。
array 必需。要结合为字符串的数组。

说明

虽然 separator 参数是可选的。但是为了向后兼容,推荐您使用使用两个参数。

提示和注释

注释:implode() 可以接收两种参数顺序。但是由于历史原因,explode() 是不行的。你必须保证 separator 参数在 string 参数之前才行。

例子

<?php
$arr = array('How','to','use','implode()');
echo implode(" ",$arr);
?>

输出:

How to use implode()

IT技术, php ,

wordpress博客wp_list_categories标签用法详解

2009年8月5日
wordpress博客wp_list_categories标签用法详解已关闭评论

wp_list_categories 标签的用法。 作用: ·不是连接到某个分类的 ·排列分类 ·不显示上一次更新(上次更新后,在当前类内) ·可以无序排列 ·可以显示日志数量 ·可以只显示制定某个分类 ·可以指定分类说明or标题 ·可设置无Feed或Feed使用图标 ·没有任何exlude类,并包括所有类别? (’include’ => is not shown above) ·缩进?等级?排列样式 ·分类标题名单? ·没有限制的sql施加? (’number’ => 0 is not shown above) 不管这些了,先举几个例子你就明白了: 1.包含或排除某分类: 意思就是把分类ID为3,5,9,16的分类按名称顺序来排序:

1
<?php wp_list_categories('orderby=name&include=3,5,9,16'); ?>

复制代码 按名称排列,并显示每个分类的日志总数,并不显示ID为10的分类:

1
<?php wp_list_categories('orderby=name&show_count=1&exclude=10'); ?>

复制代码 2.显示或隐藏列表标题: 过滤ID为4和7的分类,并且列表标题设置为“哈哈”:

1
<?php wp_list_categories('exclude=4,7&title_li=哈哈'); ?>

复制代码 列表中只显示ID为5、9、23的分类,并把列表标题改为

;Poetry

(下面的格式是为了把“要显示的数据”和“标签参数区分开来”)

1
 <?php wp_list_categories('include=5,9,23&title_li=<h2>' . __('Poetry') . '</h2>' ); ?>

复制代码 3.那啥 这个参数的意思是:按ID排序,关闭分类说明(就是鼠标移动到连接上就不显示你在后台填的分类说明了,只显示“察看XX分类下的所有文章”),并且只显示ID为8的分类下的子分类,如果没有,则参数无效,会按默认来显示。

1
<?php wp_list_categories('orderby=id&show_count=1&use_desc_for_title=0&child_of=8'); ?>

复制代码 4.外观是分类后面显示个(RSS),作用就不用我说了吧?

1
<?php wp_list_categories('orderby=name&show_count=1&feed=RSS'); ?>

复制代码 5.这个比较酷,相信大家都喜欢: 分类名称后面显示一个自己制定的小图标,作用是RSS。

1
<?php wp_list_categories('orderby=name&show_count=1&feed_image=/images/rss.gif'); ?>

复制代码 6.花式列表: 改变当前正在浏览的分类名字的样式。’style=list’的作用是给输出的html代码 中加一个class=”current- cat”, 然后你在CSS里添一个.current-cat {color:red;}那么我浏览分类AAA时,列表中的“AAA”3个字就是红色的,浏览BBB,“BBB”就是红色的。

1
<?php wp_list_categories('style=list' ); ?>

复制代码 下面把所有参数和值汇总一下: show_option_all 值:任意填。 如果你写

1
<?php wp_list_categories('show_option_all=那啥'); ?>

,那么在列表第一个分类就显示“那啥”两字,不过连接是连接到blog首页的,正好可以利用此参数加个“首页”。 orderby 值:ID、name(默认值)、count。 作用是按这3个值来排序。 order 值:ASC(默认值)、DESC。 ASC为升序,DESC为降序。 show_last_updated 值:0(默认值)、1。 0无作用,1为最近更新的分类显示在前面。 style 值:list(默认值)、none。 例6中已经举例了。none无作用。 show_count 值:0、1(默认值) 1在每个分类后面显示日志数量,0不显示。 hide_empty 值:0、1(默认值) 1是隐藏没有发表日志的分类,0是显示所有。 use_desc_for_title 值:0、1(默认值) 0为关闭说明,1为显示说明。上面有例子。 child_of 值:数字 显示指定ID(也就是所填的这个数字)下的子分类。 feed 值:任意 假如你填“啊!”,那么在你每个分类后面都会出现“(啊!)”,连接地址是RSS地址。 feed_image 值:任意。虽然任意,但是是个图片的地址才对。 用来在分类后面显示个RSS Feed图标,上面有例子。 exclude 值:任意。但是要填分类名称或者分类ID才有效。 用来过滤(或者说隐藏)某个分类在列表中的出现。 include 值:任意。但是要填分类名称或者分类ID才有效。 作用是只显示所填的这个分类名或ID。 hierarchical 值:0、1(默认值) 说是按分类文章数目排列的,但测试无效果。 title_li 值:任意 用来改变列表标题的。 number 值:整数 设置一个显示上限。

IT技术, php ,

Zend Studio 5.2 注册码 5.5也可以用

2009年8月5日
Zend Studio 5.2 注册码 5.5也可以用已关闭评论

Username: Team FCN!
key:0359d06510103500

for Zend Studio 5.2 or 5.5

注意空格和感叹号

很强大的php开发工具

php ,

学习无比强大的query_posts()

2009年7月31日
学习无比强大的query_posts()已关闭评论

wordpress的query_posts()之强大,让人叹为观止!学习学习!

将query_posts()放在LOOP之前限定你所需要的条件,wp_query会产生一个新的使用你的参数的SQL查询,而忽视通过URL接收到的其它的参数,如果想不忽略,可以在调用中使用$query_string。

query_posts($query_string . "&order=ASC")

设置文章显示的顺序,但是不干扰其余的查询字符串,参数前须有“&”符号

其他还有N多用途~~

  • 主页不显示某一分类下的日志
<?php
   if (is_home()) {
      query_posts("cat=-3");
   }
?>
  • 获得特定的日志
<?php
query_posts('p=5');
?>
  • 获得特定的页面
<?php
query_posts('page_id=7');      //只返回网页7
?>
<?php
query_posts('pagename=about'); //只返回关于网页
?>
<?php
query_posts('pagename=parent/child'); // 返回母网页的子网页
?>
  • 创建所有文章列表,并且提供分页功能
<?php
query_posts($query_string.'posts_per_page=-1');
while(have_posts()) { the_post();
put your loop here ;
}
?>

==========================================

类别 参数

显示属于某个类别的文章

  • cat
  • category_name

根据ID显示一个类别

只显示来自一个类别ID的文章

query_posts('cat=4');

根据名称显示一个类别

只显示属于某个类别名的文章

query_posts('category_name=Staff Home');

显示几个类别及ID

显示属于几个类别ID的文章

query_posts('cat=2,6,17,38');

删除某个类别的文章

显示所有的文章,但是类别ID前面有个’-‘(负号)负号的类被除外。

query_posts('cat=-3');

删除属于类别3的所有文章。有一个限制性条款:会删除只属于类别3的所有文章。如果一个类别也同时属于其它的类别,这个类别仍然不会被删除。

标签参数

显示与某个标签相关的文章

  • tag

为某个标签提取文章

query_posts('tag=cooking');

获得拥有任何这样的标签的文章

query_posts('tag=bread,baking');

获取拥有这三个标签的文章

query_posts('tag=bread+baking+recipe');

作者参数

你也可以根据作者限制文章数目

  • author_name=Harriet
  • author=3

author_name在 user_nicename区操作, 同时作者 在作者id上操作。

文章 & 网页参数

返回一篇单独的文章或者一个单独的网页

  • p=1 – 使用文章 ID来显示第一篇文章
  • name=first-post – 使用 post Slug 显示第一篇文章
  • page_id=7
  • pagename=about
  • showposts=1 (你可以使用 showposts=3,或者其它的任何数字显示一定数目的文章)

由于 模板层级方面的原因, home.php先执行了。这意味这你可以编写一个home.php,home.phh调用query_posts()重新得到一个特别的网页并且将那个网页设置为你的首页。没有任何插件或者hacks,你需要运行一个机制,并且显示和维护一个非博客的首页。

更有用的方法,可能是利用WP的网页功能并且为你的首页使用这个功能。你可以将”关于网页”设置为entry point或者设置为站点的末页。你可能执行一些更动态的步骤,设置一个自定义网页,显示最近的评论,文章,类别,存档。请看看下面的例子。

时间参数

得到某个特别的时间段内发表的文章

  • hour=
  • minute=
  • second=
  • day= – 一个月中的每一天; 显示,例如,十五号发表的所有文章。
  • monthnum=
  • year=

网页参数

  • paged=2 -显示使用”以前发表的文章”链接时,通常在网页2上显示的文章。
  • posts_per_page=10 -每个网页显示的文章数目;-1这个值,会显示所有的文章。
  • order=ASC -按时间顺序显示文章,以相反的顺序显示DESC(默认)

Offset 参数

你不能转移或者忽视一个或者更多的原始文章,这些文章一般是你的query同时使用offset参数收集到的。

下面的函数会显示(1)最近的5篇文章

query_posts('showposts=5&offset=1');

根据参数排序

根据这个区给得到的文章排序

  • orderby=author
  • orderby=date
  • orderby=category
  • orderby=title
  • orderby=modified
  • orderby=modified
  • orderby=menu_order
  • orderby=parent
  • orderby=ID
  • orderby=rand

同时考虑”ASC”或者的”DESC”的排序参数

联合参数

你可能从上面的例子中注意到,你使用一个&(&符号)将参数组合在一起,像:

query_posts('cat=3&year=2004');

类别13,关于当前月份显示在主页上的文章:

if (is_home())  {
query_posts ($query_string . '&cat=13&monthnum=' . date('n',current_time('timestamp'))); }

在2.3版本中,这个参数组合会返回属于类别1同时属于类别3的文章,只显示两篇(2)文章,根据标题,按降序排列:

query_posts(array('category__and'=>array(1,3),'showposts'=>2,'orderby'=>title,'order'=>DESC));

在2.3和2.5版本中,你可能期待下面的内容,返回属于类别1并且标签为”苹果”的所有文章

query_posts('cat=1&tag=apples');

一个bug阻止这个运行。请看看Ticket #5433,一个工作区要搜索几个使用+的标签

query_posts('cat=1&tag=apples+apples');

对于先前的查询,这个会产生期待的结果。注意使用’cat=1&tag=apples+oranges’能够产生期待的结果。

资料来源:站长百科 Template Tags/query posts

IT技术, php, 互联网技术 ,

学习制作WordPress主题

2009年7月31日
学习制作WordPress主题已关闭评论

如果你正准备学着制作Wordpress主题,那将非常有用。

WordPress模板基本文件

style.css 样式表文件
index.php 主页文件
single.php 日志单页文件
page.php 页面文件
archvie.php 分类和日期存档页文件
searchform.php 搜索表单文件
search.php 搜索页面文件
comments.php 留言区域文件(包括留言列表和留言框)
404.php 404错误页面
header.php 网页头部文件
sidebar.php 网页侧边栏文件
footer.php 网页底部文件

WordPress Header头部 PHP代码

注: 也就是位于<head>和</head>之间的PHP代码

<?php bloginfo(’name’); ?> 网站标题
<?php wp_title(); ?> 日志或页面标题
<?php bloginfo(’stylesheet_url’); ?> WordPress主题样式表文件style.css的相对地址
<?php bloginfo(’pingback_url’); ?> WordPress博客的Pingback地址
<?php bloginfo(’template_url’); ?> WordPress主题文件的相对地址
<?php bloginfo(’version’); ?> 博客的Wordpress版本
<?php bloginfo(’atom_url’); ?> WordPress博客的Atom地址
<?php bloginfo(’rss2_url’); ?> WordPress博客的RSS2地址
<?php bloginfo(’url’); ?> WordPress博客的绝对地址
<?php bloginfo(’name’); ?> WordPress博客的名称
<?php bloginfo(’html_type’); ?> 网站的HTML版本
<?php bloginfo(’charset’); ?> 网站的字符编码格式

WordPress 主体模板 PHP代码

<?php the_content(); ?> 日志内容
<?php if(have_posts()) : ?> 确认是否有日志
<?php while(have_posts()) : the_post(); ?> 如果有,则显示全部日志
<?php endwhile; ?> 结束PHP函数”while”
<?php endif; ?> 结束PHP函数”if”
<?php get_header(); ?> header.php文件的内容
<?php get_sidebar(); ?> sidebar.php文件的内容
<?php get_footer(); ?> footer.php文件的内容
<?php the_time(’m-d-y’) ?> 显示格式为”02-19-08″的日期
<?php comments_popup_link(); ?> 显示一篇日志的留言链接
<?php the_title(); ?> 显示一篇日志或页面的标题
<?php the_permalink() ?> 显示一篇日志或页面的永久链接/URL地址
<?php the_category(’, ‘) ?> 显示一篇日志或页面的所属分类
<?php the_author(); ?> 显示一篇日志或页面的作者
<?php the_ID(); ?> 显示一篇日志或页面的ID
<?php edit_post_link(); ?> 显示一篇日志或页面的编辑链接
<?php get_links_list(); ?> 显示Blogroll中的链接
<?php comments_template(); ?> comments.php文件的内容
<?php wp_list_pages(); ?> 显示一份博客的页面列表
<?php wp_list_cats(); ?> 显示一份博客的分类列表
<?php next_post_link(’ %link ‘) ?> 下一篇日志的URL地址
<?php previous_post_link(’%link’) ?> 上一篇日志的URL地址
<?php get_calendar(); ?> 调用日历
<?php wp_get_archives() ?> 显示一份博客的日期存档列表
<?php posts_nav_link(); ?> 显示较新日志链接(上一页)和较旧日志链接(下一页)
<?php bloginfo(’description’); ?> 显示博客的描述信息

其它的一些Wordpress模板代码

/%postname%/ 显示博客的自定义永久链接
<?php the_search_query(); ?> 搜索表单的值
<?php _e(’Message’); ?> 打印输出信息
<?php wp_register(); ?> 显示注册链接
<?php wp_loginout(); ?> 显示登入/登出链接
<!–next page–> 在日志或页面中插入分页
<!–more–> 截断日志
<?php wp_meta(); ?> 显示管理员的相关控制信息
<?php timer_stop(1); ?> 显示载入页面的时间
<?php echo get_num_queries(); ?> 显示载入页面查询

介绍完基本的函数代码后,介绍一点高级的使用

指定example.php中的内容只在首页显示

<?php if ( is_home() ) { include ('example.php'); } ?>

为不同分类指定不同的样式表

<?php if ( is_category('15') ) {<link rel="stylesheet" href="<?php bloginfo('template_url'); ?>/cat-15.css"

type="text/css" media="screen" />;

<?php } else { ?>

<link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>"

type="text/css" media="screen" />

<?php } ?>

为不同的分类指定不同的图像

<?php if (is_category('7') ):<img src='<?php bloginfo('template_url');?>/images/cat7.jpg' alt='' />

<?php } elseif (is_category('8') ):

<img src='<?php bloginfo('template_url');?>/images/cat8.jpg' alt='' />

<?php endif; ?>

样式化单篇日志

<div id="post-<?php the_ID();?>">This snippet will assign the post ID to the DIV. For example, if the ID for the post is 8, that line will echo as

<div id=”post-8”></div>. Now you can style that individual post in the CSS as #post-8. Place this code

within the loop.

上一页和下一页链接

<?php next_posts_link('Next Entries »') ?><?php previous_post_link('« Older Entries'); ?>

动态页面链接

<ul><li<?php if(is_home()) { ?><?php } ?>><a href="

<?php bloginfo('home'); ?>">home</a></li>

<?php wp_list_pages('sort_column=menu_order&depth=1&title_li='); ?>

</ul>

This snippet will rst echo the text “home” with a link to the home page. Next, it will echo the WordPress

pages links in a list, in order dened by your settings, excluding the child pages, and excluding a title

header for the list. If one of the pages in the list is active, the link for that page will be assigned the class

“current_page_item”, which can now be styled in your CSS. Place this code in the template les.

动态页面标题

<?phpif (is_home()) { echo bloginfo('name'); } elseif (is_404()) { echo 'WPCandy » 404'; } elseif(is_search()) { echo 'WPCandy » Search Results'; } else { echo 'WPCandy » '; wp_title(''); }

?>

分类日志

<?php query_posts('cat=2&showposts=5'); ?>

CSS样式表头部声明

/*

Theme Name:  WPCandy

Description: Description goes here

Theme URI: http://wpcandy.com/

Version: 2.0

Author: Michael Castilla

Author URI: http://wpcandy.com/

Template: Dene a parent template (optional)

*/

日志循环

The Loop<?php if(have_posts()) : ?><?php while(have_posts()) : the_post(); ?>

// this is the inside of the loop

<?php endwhile; ?>

<?php else : ?>

<?php endif; ?>

标签云(Tag cloud)

<?php wp_tag_cloud('smallest=1&largest=9&'); ?>

页面模板头部声明

<?php/*

Template Name: Gallery

*/

?>

为每个分类指定不同的模板

<?php$post = $wp_query- >post;if ( in_category('3') ) {

include(TEMPLATEPATH . '/cat3.php’);

} elseif ( in_category('4') ) {

include(TEMPLATEPATH . '/cat4.php');

} else {

include(TEMPLATEPATH . '/cat.php');

} ? >

这是来自WPCandy的电子书,由帕兰翻译而成,你可以通过这里下载
转载自 高级Wordpress模板代码帮助手册中文版 | 帕兰映像

IT技术, php, 互联网技术 ,