wordpress模板开发手册

写这篇文章只是为了记录自己写一个模板的经验,并且分享给来我博客的朋友,本博文将会不断更新。

 

所需文件:

1、style.css:必须要有本文件,调用的方式为


,用上面的这段话就加到标签可以调用css文件了,以后写css就都写在这个文件,一般不适用绝对路径或者相对路径来调用css文件。

2、index.php:必须有,规定模板的主页。

3、header.php:非必须,主要写从网页顶部的代码,包括<head>以及博客顶部的部分,然后在index.php中调用header.php文件。

4、functions.php:函数文件,所有的php函数的集结地。

C语言里->和点号.的区别

这两个符号都是用来取结构体成员的值的。

如果使用->,那前面一定是指针,比如p->age这样就说明p是一个指针,当然(*p).age和p->是等价的。

如果使用.符号,那前面可能是指针,也可能就是结构体变量的名称,因为结构体变量只能用点符号,而指针两种符号都可以用

dedecms全站伪静态的实现方法及注意事项

点评:DEDECMS为什么要用伪静态?不是有一个现成生成html功能,直接用它不就省事啊

成都SEO告诉你,用系统自带生成静态的麻烦事情很多,特别是文章多了,更新一点东西之类的就很是麻烦。所以成都SEO建议,大家如果能用伪静态就都用伪静态吧!一劳永逸的事情,以后不用再给大批量的更新而烦恼了。在此分享一下DEDECMS实现频道|列表页|文章页|TAG伪静态的方法,希望朋友们在有需要的时候能用上吧!

开启伪静态的前提条件
保证你的空间或服务器支持伪静态即URL重写
开启DedeCms伪静态

开启伪静态的方法:后台–》系统–》核心设置 找到:是否使用伪静态: 选择是 确定保存。
栏目和文章发布设置
栏目列表选项: 选择使用动态页 发布选项: 选择仅动态浏览
DEDECMS全站伪静态方法
首页伪静态
把站点根目录下index.html删除,以后不更新主页HTML即可,当然你也可以选择不使用动态首页。
频道、列表、文章伪静态
主要通过修改GetFileName()、GetTypeUrl()这两个函数实现。DedeCms V5.3、DedeCms V5.5和DedeCms V5.6版本,打开/include/channelunit.func.php进行修改。注意:DedeCms V5.7,此文件路径更改了,你打开/include/helpers/channelunit.helper.php即可。
a.将GetFileName()中的如下代码:
//动态文章
if($cfg_rewrite == ‘Y’)
{
return $GLOBALS[“cfg_plus_dir”].”/view-“.$aid.’-1.html’;
}
替换为
//动态文章
if($cfg_rewrite == ‘Y’)
{
return “/archives/view-“.$aid.’-1.html’;
}
将文章页默认的/plus/view-1-1.html链接格式改为/archives/view-1-1.html,这个随个人喜欢,不作更改也行。
b.将GetTypeUrl()中的如下代码:
//动态
$reurl = $GLOBALS[‘cfg_phpurl’].”/list.php?tid=”.$typeid;
替换为
//动态
$reurl = “/category/list-“.$typeid.”.html”;
这步必须修改,即让你的频道或是列表页URL变更为/category/list-1.html形式。
列表分页伪静态
打开/include/arc.listview.class.php,找到获取动态的分页列表GetPageListDM()函数末尾处:
$plist = str_replace(‘.php?tid=’, ‘-‘, $plist);
替换为
$plist = str_replace(‘plus’, ‘category’, $plist);//将默认的plus替换成category$plist = str_replace(‘.php?tid=’, ‘-‘, $plist);将列表分页默认链接格式/plus/list-1-2-1.html修改为/category/list-1-2-1.html,这步也可以不作更改。
DEDECMS文章分页伪静态
打开/include/arc.archives.class.php,找到获取动态的分页列表GetPagebreakDM()函数末尾处:
$PageList = str_replace(“.php?aid=”,”-“,$PageList);
替换为
$plist = str_replace(‘plus’, ‘archives’, $plist);//将默认的plus替换成archives$PageList = str_replace(“.php?aid=”,”-“,$PageList);这步不作修改也可以,只是个人喜好问题。
TAG标签伪静态
DedeCms默认的TAG标签URL,形如/tags.php?/dedecms5.7/,非常之难看。打开/include/taglib/tag.lib.php,找到lib_tag()函数下的:
$row[‘link’] = $cfg_cmsurl.”/tags.php?/”.urlencode($row[‘keyword’]).”/”;
替换为
$row[‘link’] = $cfg_cmsurl.”/tags/”.urlencode($row[‘keyword’]).”/”;到这里,TAG标签URL中的“.php?”号就去掉了。
搜索伪静态
DedeCms搜索URL静态化比较麻烦,附带参数多不说,参数也可能变化,像搜索结果分页的URL就特麻烦,伪静态规则匹配复杂。小拼就偷下懒,将搜索URL中“search.php?…”直接替换为“search.html?…”,至于“?”号之后的参数以任意字符进行匹配。
依次打开include文件夹下的channelunit.func.php、arc.searchview.class.php、arc.taglist.class.php以及/include/taglib/hotwords.lib.php,查找“search.php?”替换为“search.html?”即可。

注意事项

以上都是需要伪静态的地方。值得注意的一点是:在进行任何一步的操作之前先将文档都进行备份,以防万一。以上方法也不是我原创的,纯属网络上搜集的。实践过,都能用的哈。如果有问题可以给我留言,修正不对的地方,但很有可能是你的操作失误哈,这些伪静态的到5.7版本都可以用。

算法的时间复杂度(计算实例)

原文链接:https://blog.chinaunix.net/uid-20490872-id-1665370.html

定义:如果一个问题的规模是n,解这一问题的某一算法所需要的时间为T(n),它是n的某一函数 T(n)称为这一算法的“时间复杂性”。

当输入量n逐渐加大时,时间复杂性的极限情形称为算法的“渐近时间复杂性”。

我们常用大O表示法表示时间复杂性,注意它是某一个算法的时间复杂性。大O表示只是说有上界,由定义如果f(n)=O(n),那显然成立f(n)=O(n^2),它给你一个上界,但并不是上确界,但人们在表示的时候一般都习惯表示前者。

此外,一个问题本身也有它的复杂性,如果某个算法的复杂性到达了这个问题复杂性的下界,那就称这样的算法是最佳算法。

“大O记法”:在这种描述中使用的基本参数是 n,即问题实例的规模,把复杂性或运行时间表达为n的函数。这里的“O”表示量级 (order),比如说“二分检索是 O(logn)的”,也就是说它需要“通过logn量级的步骤去检索一个规模为n的数组”记法 O ( f(n) )表示当 n增大时,运行时间至多将以正比于 f(n)的速度增长。

这种渐进估计对算法的理论分析和大致比较是非常有价值的,但在实践中细节也可能造成差异。例如,一个低附加代价的O(n2)算法在n较小的情况下可能比一个高附加代价的 O(nlogn)算法运行得更快。当然,随着n足够大以后,具有较慢上升函数的算法必然工作得更快。

O(1)

Temp=i;i=j;j=temp;

以上三条单个语句的频度均为1,该程序段的执行时间是一个与问题规模n无关的常数。算法的时间复杂度为常数阶,记作T(n)=O(1)。如果算法的执行时 间不随着问题规模n的增加而增长,即使算法中有上千条语句,其执行时间也不过是一个较大的常数。此类算法的时间复杂度是O(1)。

O(n^2)

2.1. 交换i和j的内容
sum=0;                 (一次)
for(i=1;i<=n;i++)       (n次 )
for(j=1;j<=n;j++) (n^2次 )
sum++;       (n^2次 )
解:T(n)=2n^2+n+1 =O(n^2)

2.2.
for (i=1;i<n;i++)
{
y=y+1;         ①
for (j=0;j<=(2*n);j++)
x++;        ②
}
解: 语句1的频度是n-1
语句2的频度是(n-1)*(2n+1)=2n^2-n-1
f(n)=2n^2-n-1+(n-1)=2n^2-2
该程序的时间复杂度T(n)=O(n^2).

O(n)

2.3.
a=0;
b=1;                      ①
for (i=1;i<=n;i++) ②
{
s=a+b;    ③
b=a;     ④
a=s;     ⑤
}
解: 语句1的频度:2,
语句2的频度: n,
语句3的频度: n-1,
语句4的频度:n-1,
语句5的频度:n-1,
T(n)=2+n+3(n-1)=4n-1=O(n).

O(log2n )

2.4.
i=1;       ①
while (i<=n)
i=i*2; ②
解: 语句1的频度是1,
设语句2的频度是f(n),   则:2^f(n)<=n;f(n)<=log2n
取最大值f(n)= log2n,
T(n)=O(log2n )

O(n^3)

2.5.
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
{
for(k=0;k<j;k++)
x=x+2;
}
}
解:当i=m, j=k的时候,内层循环的次数为k当i=m时, j 可以取 0,1,…,m-1 , 所以这里最内循环共进行了0+1+…+m-1=(m-1)m/2次所以,i从0取到n, 则循环共进行了: 0+(1-1)*1/2+…+(n-1)n/2=n(n+1)(n-1)/6所以时间复杂度为O(n^3).

我们还应该区分算法的最坏情况的行为和期望行为。如快速排序的最 坏情况运行时间是 O(n^2),但期望时间是 O(nlogn)。通过每次都仔细 地选择基准值,我们有可能把平方情况 (即O(n^2)情况)的概率减小到几乎等于 0。在实际中,精心实现的快速排序一般都能以 (O(nlogn)时间运行。
下面是一些常用的记法:

访问数组中的元素是常数时间操作,或说O(1)操作。一个算法如 果能在每个步骤去掉一半数据元素,如二分检索,通常它就取 O(logn)时间。用strcmp比较两个具有n个字符的串需要O(n)时间 。常规的矩阵乘算法是O(n^3),因为算出每个元素都需要将n对 元素相乘并加到一起,所有元素的个数是n^2。
指数时间算法通常来源于需要求出所有可能结果。例如,n个元 素的集合共有2n个子集,所以要求出所有子集的算法将是O(2n)的 。指数算法一般说来是太复杂了,除非n的值非常小,因为,在 这个问题中增加一个元素就导致运行时间加倍。不幸的是,确实有许多问题 (如著名 的“巡回售货员问题” ),到目前为止找到的算法都是指数的。如果我们真的遇到这种情况, 通常应该用寻找近似最佳结果的算法替代之。

今天学习struct遇到了问题

开始是源于这样一个问题,从键盘输入十个同学的成绩,然后求出这是个成绩的平均值,最大值,最小值,要求使用调用函数的方式。

例题后面的答案是使用调用的函数return平均值,然后最大值和最小值使用全局变量,但是书上又说尽量不要使用全局变量,所以我想用别的办法让这个自己写的函数直接可以返回平均值、最大值、和最小值,于是想到了用这个函数返回数组或者定义一个结构体,结构体包含上面这个变量,然后返回到main函数。

 

可是关键字是,C语言可以返回结构体或者数组类型的变量吗?

 

UPDATE:

经过一段时间的学习,才知道这是可以的,实现返回需要的数据类型的变量的时候,按如下格式定义你的函数:

DataType  FuncName( 形参列表 )

{

somecode;

return (DataType类型的变量);

}

特别注意的是如果需要返回指针的时候,需要将FuncName前面加一个*号,说明这是一个指针。

兼职

日记:大学里第一次去做兼职,做苦力的那种,一个下午赚了70。这个星期一小强带上我去做兼职,没经过大脑就决定了,本来是打算那个下午去图书馆写作业的,可是就是这样想也没有想就答应了。坐901在工大那边下了车,然后走很长很长的路,问了好几个路人,七歪八拐的找到了地点,却不见人在那里,我还以为是小强的兼职中介黑中介费呢,坐在某个台阶上登了约莫半个小时,终于等到人来了,领取一个仓库,当时就呆了,果然和搬砖没啥区别啊。

 

好吧,是整理一个舞台架子。搬来搬去,的确是很苦很累的活,真感觉自己当时会坚持不住的。本来还指望能回学校去晚点名,后来天都黑了,不得不考虑发短信给……