目录结构
- index.php //入口文件
- .htaccess //重写规则
+ conf
|- application.ini //配置文件
application/
+ controllers
- Index.php //默认控制器
+ views
|+ index //控制器
- index.phtml //默认视图
+ modules //其他模块
- library //组件目录
- models //model目录
- plugins //插件目录
入口文件是所有请求的入口, 一般都借助于rewrite规则, 把所有的请求都重定向到这个入口文件.
一个经典的入口文件public/index.php
define("APP_PATH", realpath(dirname(__FILE__) . '/../')); /* 指向public的上一级 */
$app = new Yaf_Application(APP_PATH . "/conf/application.ini");
$app->run();
除非我们使用基于query string的路由协议(Yaf_Route_Simple, Yaf_Route_Supervar), 否则我们就需要使用WebServer提供的Rewrite规则, 把所有这个应用的请求, 都定向到上面提到的入口文件.
修改.htaccess文件
Nginx的Rewrite (nginx.conf)
listen 80;
server_name yaf.demo.com;
root document_root;
index index.php index.html index.htm;
if (!-e $request_filename) {
rewrite ^/(.*) /index.php/$1 last;
}
}
在Yaf中, 配置文件支持继承, 支持分节. 并对PHP的常量进行支持. 你不用担心配置文件太大造成解析性能问题, 因为Yaf会在第一个运行的时候载入配置文件, 把格式化后的内容保持在内存中. 直到配置文件有了修改, 才会再次载入.
一个简单的配置文件application/conf/application.ini
application.directory = APP_PATH "/application"
application.dispatcher.catchException = 0
application.dispatcher.throwException = 0
application.view.ext = 'phtml'
[product : common]
;enable the error controller
application.dispatcher.catchException=1
在Yaf中, 默认的模块/控制器/动作, 都是以Index命名的, 当然,这是可通过配置文件修改的.
对于默认模块, 控制器的目录是在application目录下的controllers目录下, Action的命名规则是"名字+Action"
默认控制器application/controllers/Index.php
class IndexController extends Yaf_Controller_Abstract {
public function indexAction() {//默认Action
$this->getView()->assign("content", "Hello World");
}
}
?>
Yaf支持简单的视图引擎, 并且支持用户自定义自己的视图引擎, 比如Smarty.
对于默认模块, 视图文件的路径是在application目录下的views目录中以小写的action名的目录中.
一个默认Action的视图application/views/index/index.phtml
<head>
<title>Hello yaf</title>
</head>
<body>
<?php echo $content;?>
</body>
</html>
然后在浏览器输入nginx.conf设置的servername,yaf.demo.com。是不是出来了??
表 4.2. Yaf可选配置项
本文链接:http://www.cnblogs.com/descusr/p/3210599.html,转载请注明。
1 向浏览器输出数据:print()、echo()、printf()、sprintf()、
- print()和echo()语句都是把传入它的数据输出到浏览器
- pintf()输出静态文本和一个或多个变量中存储的动态信息组成的混合语句
- sprintf()相比于print(),其函数的功能一样,但它将输出赋给一个字符串而不是直接呈现给浏览器
2 与类型有关的函数:
- 获取类型gettype() string gettype(mixed var)
- 转换类型settype() boolean settype(mixed var,string type)
3 变量声明:变量总是以美元符$开头,然后是变量名。
4 heredoc语法为输出大量文本提供了一种便利的方式。采用两个相同的标示符,两个相同标识符之间就是文本
$website = https://www.romatermini.it,
echo <<<EXCERPT //标识符
......//文本
excerpt; //标识符
?>
5 foreach语句:遍历元素(例如数组)其有两种形式
- foreach (array_expr as $value){
statement
} - foreach (array_expr as $key=>$value){
statement
}
两种语法形式的例子为:
$links = array("www.apress.com","www.php.net",www.apache.org);
echo "<b>Online Resources</b>:<br />";
foreach ($links as $link) {
echo "<a href=/index.html"http://$link\">$link</a><br />";
}
?>
$links = array("The Apache Web Server" =>"www.apress.com",
"Apress" => "www.php.net",
"The PHP Scripting Language" => "www.apache.org);
echo "<b>Online Resources</b>:<br />";
foreach ($links as $title=> $link) {
echo "<a href=/index.html"http://$link\">$title</a><br />";
}
?>
6 文件包含语句:让代码具有重用性和模块性,提高效率、拒绝加班,珍惜程序员生命。
include()、 include_once()、require() ***require()和include()的区别是无论require()的位置如何,指定文件一定包含在require()的脚本中。
7 从函数返回多个值:假设要创建一个从数据库中获取用户数据的函数(姓名、邮箱、住址、电话号码),然后用户的全部个人信息返回给调用者。实现返回多值,语言构造list()可以满足你的愿望。
function retrieveUserProfile(){
$user[] = "Jason Gilmore";
$user[] = jason@example.com;
$user[] = "English";
return $user;
}
list ($name, $email, $language) = retrieveUserProfile();
echo "Name: $name, email: $email, language: $language";
?>
8 数组
创建数组:PHP与其他计算机语言在创建数组时有许多不同的地方,不需要指定其大小、使用数字时不需要先声明。
相关联的函数有
- explode(separator,string,limit) //把字符串分割为数组,前两个参数是必须要有的。
- range(fist, secend,step) //创建并返回一个包含指定范围的元素的数组,前两个参数必须要有。
- is_array(mixed variable) //判断变量类型是否为数组类型。
本文链接:http://www.cnblogs.com/hww836967373/p/3213195.html,转载请注明。
◆二次开发
1、什么是二次开发?
二次开发,简单的说就是在现有的软件上进行定制修改,功能的扩展,然后达到自己想要的功能和效果,一般来说都不会改变原有系统的内核。
2、为什么要二次开发?
随着信息化技术的不断发展,IT行业涌现出了一系列优秀的开源作品,其作者或是个人,或是项目小组,或是软件公司。选择和应用这些优秀的开源软件,并在此基础上进行符合业务需求的二次开发,将给企业节省信息化成本(时间成本及开发成本)的同时,更能带来技术上的保障。这就是我们常听的:站在巨人的肩膀上,你将看的更远。所以国内很多公司需要二次开发的人才。
3、怎么做二次开发?
第一,你要有这个开源产品的所用语言的语言基础,能看懂代码是最基本的。
第二,你要对这个开源产品的功能和使用要有比较熟悉,因为你熟悉了,你才知道一个需求下来,你要改什么,什么是系统自带的,大概要怎么改。
第三,你要熟悉这个开源产品的数据结构,代码结构,系统的框架结构,核心是哪里,附属功能是在哪里。简单点说,就是数据库,代码逻辑,文件目录的熟悉。
第四,根据你的需求,然后利用开源产品的内核,进行系统的扩展和修改,以达到你的需求
4、介绍PHP的开源产品的二次开发的基本要求:
第一, 基本要求:HTML(必须要非常熟悉),PHP(能看懂代码,能写一些小系统,如:留言板,小型CMS),Mysql(至少会一种数据库),Javascript(能看懂,能改现成的一些代码),Div+Css(能进行界面的调整,明白CSS是怎么使用的)
第二, 熟悉开源产品的使用,比如 Dedecms,你要知道怎么登录,怎么新建栏目,怎么添加文章,模板标签的使用方法,模型的概念和使用方法等等一些功能
第三, 要熟悉这个开源产品的数据库结构,还要理解里面核心文件的内容,比如:数据库类怎么使用,常用的安全过滤是怎么做的,模板引擎又是怎么使用的等等一些核心内容。还要知道这个开源产品的目录结构,就是说,你要知道哪是放模板的,哪里是做控制的,哪里是放样式的,等等
第四, 熟悉你的需求,对需求进行解读,然后确定如何对这个开源产品进行修改和扩展 经过二次开发后,你能获取到的是什么呢? 你能完成你的需求,你能积累经验,这里的经验有你自己的,也有别人的。所谓别人的,就是在你做这个二次开发的时候,你能吸收到这个系统的精华,然后融入到你自己的思想里,你还能总结项目架构的经验。有句话说的好,就是:聪明的人会把别人的失败的经验当作自己的经验,而傻的人就是自己无数次体验失败后才作为自己的经验。
二次开发不仅仅是开发,而更重要的是吸取精华,总结经验,理顺思路,少走弯路,提升自己。
站在巨人的肩膀上,你将看的更远!!!
◆DedeCMS二次开发
1、DedeCMS的二次开发
为了让更多人了解二次开发,并更方便的了解DedeCMS的二次开发,下面将会简单的介绍关于DedeCMS二次开发的一些基础和大纲
2、DedeCMS二次开发必备基础:
· 非常熟悉HTML
· 熟悉DIV+CSS的布局
· 扎实的PHP基础,熟悉结构化编程,了解OOP,并能看懂和使用
· 熟悉MYSQL,掌握SQL语言
3、DedeCMS二次开发学习过程
· 理解CMS是什么
· 熟悉DedeCMS的功能(如:栏目的分类,文档管理,模型的使用,系统的设置等常用的功能)
· 掌握DedeCMS的模板标签使用及原理
· DedeCMS目录结构分析 熟悉每个文件夹里面主要装什么文件,这样在二次开发的时候知道在哪个文件夹下的什么文件修改
目录结构摘要:
./a 生成文件存放路径 ./data 缓存文件及数据中心
/admin 管理后台数据
/backupdata 备份数据
/cache 缓存文件
/enums 级别联动数据,JS,枚举类型的缓存文件
/js 常用的JS
/mark 水印相关文件
/module 模块安装文件
/rss Rss相关
/sessions Session 存放路径
/textdata 文本数据
/tplcache 模板缓存
/uploadtmp 上传文件缓存位置
/ziptmp zip包解压缓存位置 ……
· DedeCMS文件结构分析 熟悉每个文件的基本功能,方便做修改,知道每个文件的大概作用之后,可以方便的对文件进行修改
文件结构摘要:
common.inc.php 数据库配置文件
config.cache.bak.php 后台系统配置备份
config.cache.inc.php 后台系统配置文件缓存
downmix.data.php 采集混淆缓存文件
mysql_error_track.inc MYSQL错误志
safequestions.php 安全问题
sitemap.html 站点地图
sys_pay.cache.php 支付网关配置
template.rand.php 随机模板设置 ……
· DedeCMS数据库结构分析,至少要熟悉每个表的作用 熟悉每个表的作用,了解几个核心表的设计及字段的含义,方便拿到新的需求之后,能快速的判断是否加字段,还是新建表来处理。同时也能理解DedeCMS的数据库设计思想,把有用的设计思路加到自己的系统中。
· DedeCMS的流程控制,及一些核心文件的解析 熟悉一些登陆,注册,文档管理,权限控制,分类管理,模型设置等一些常用流程控制。对几个核心文件进行解剖,了解其编程技巧及安全机制
· DedeCMS插件的开发(****式插件和内嵌式插件) 熟悉两种插件的编写,插件的导入导出,插件搭配模型的使用
◆Ecshop二次开发
1、EcShop二次开发学习