一、开发模式
现在的开发模式主要分为两种:
1.二次开发:
如果已经有一个产品,和要开发的项目比较相似,就使用二次开发。
在已经存在的产品上改动, 即使不做任何改动也能使用,改动时根据需求。
2.框架开发:
如果没有现有的产品可改,就选择一个好的框架进行自主框架开发。
新产品=50%功能+一些实用的类库+ 自己补充的新产品
二、下载安装
1.下载
登录phpcms官网:http://www.phpcms.cn 即可找到下载入口。下载时推荐下载UTF-8字符集版本的。
2.安装
下载后解压,即可见到两个目录,其中install_package目录内的文件为需要安装的文件,readme里的文件为帮助文档和.htaccess文件(做伪静态时的规则)。
将install_package内的所有文件和目录拷贝到项目目录内,然后通过浏览器访问项目目录中的install目录,即可打开安装界面(如下图所示)。
第一步:同意许可协议
第二步:运行环境检测
如果运行环境中有哪些没开启,表格最后一列就表现为×,需要通过调整开启。若设备未联网,最后一行DNS解析则表现为×,但不影响在本机安装。
第三步:选择模块
注意PHPSSO设置中必须选择一项才能进行下一步。
第四步:文件权限设置
表格所列出的文件和目录都需要可写才行。
第五步:账号设置
第六步:系统安装
第七步:安装完成
安装完成后,要把项目中的install目录删掉,系统默认是在安装完后自动删掉的,如果没删,要手动删掉。
浏览器访问项目目录下/index.php则访问前台页面,访问项目目录下/admin.php则访问后台管理页面。
三、后台功能
1.我的面板
(1)修改个人信息
其中Language语言一项,改完之后要刷新,则整个界面就改成其他语言。
(2)修改密码
可以修改管理员登录密码。
(3)生成首页
点击则可以生成首页的静态化html文件,加快外界访问速度。
2.设置
(1)站点管理
点击修改
可以在此进行修改网站相关设置。
(2)管理员管理
可以在此进行管理员管理。
1)口令卡
点击申请口令卡
口令卡申请成功,一定要牢牢保存好口令卡图片。
按照图中所示,根据口令卡对照着输入正确数字才能登陆。
(3)角色管理
phpcms中支持对用户进行角色管理,如下图,角色管理中的权限分为管理权限和使用权限:
1)管理权限:通过点击图中的‘权限设置’来设置角色在哪个站点的后台能参与哪些管理,如‘设置’、‘模块’、‘内容’等…
2)栏目权限:通过点击图中的‘栏目权限’来设置角色在哪个站点的前台能对哪些栏目进行哪些操作。
3)成员管理:管理注册的用户。
3.模块
(1)模块管理
1)模块管理
通过管理操作中的禁止、卸载和安装可以操作所列的这些模块,操作完之后需要更新一下缓存。
上图所示的这些模块就在项目目录/phpcms/modules/
中的各个目录。
2)友情链接
①添加类别
②添加友情链接
该友情链接模块还能够通过进行前台申请,只有通过后台管理员通过以后才会显示在前台的友情链接中。
4.内容
(1)管理栏目
上图展示了目前网站所有栏目的结构。
1)添加类别
(2)模型管理
1)添加模型
点击字段管理可以更改字段相关属性,还能够添加你所需要的字段,修改字段的排序就可以更改其在模板中显示的位置。
在此处设置好模型之后,在栏目管理中就可以使用了。
(3)采集管理及其使用方法
1)添加采集点:上图中采集页面编码是采集对象网站使用的是什么字符集编码。
i序列网址:在网址类型选择序列网址之后,在其下面的文本框中,输入列表页的URL,并将代表分页的数字用通配符
(*)
来代替(可以点击测试看看采集的网址是否正确),还可以在下面设置采集页面的数量和“步”的大小。
ii网址配置:通过设置采集网址的规则,如采集的url中必须包含什么和不能包含什么,来控制过滤采集的URL以符合自己需要的标准。
iiiBase设置:有的网站使用了Base(
iiii获取网址: 在网页源代码中寻找要获取连接部分,通过填写获取部分前后的唯一代码来进行该部分的定位。
iiiii内容规则:内容规则则是通过选取被采集网站中的html源代码,进行内容的选取,选取方式就是寻找两边独特的html代码,将被采取的内容区域飙升
[内容]
标签。过滤中填写的内容,不会采集到内容当中。
iiiiii提交:点击提交即可提交此采集点。
2)采集管理:
1)测试:点击列表中某一条的测试,可以测试该采集点的获取的内容如下图所示。
2)采集网址:点击采集网址,则可以将上述测试中的内容全部采集到。
3)采集内容:采集网址完成之后,要采集内容才能将内容采集到。
4)内容发布:点击之后,可以将选中的条目导入相应的栏目之中,然后将采集到的东西归类到相应的本站数据库字段中,点击提交即可。
四、模板引擎
1.phpcms的模板
模板目录在项目目录/phpcms/templates/
中,里面的目录就是模板。
default目录是默认模板,default目录中的目录都是各个模块。在templates目录中新建目录即为创建一套前台模板,在目录中创建模块目录,在模块目录中新建页面,前台模板中需要但是没有创建的页面,系统会自动从default目录相应的位置继承。
建好页面之后,要将default中的config.php粘贴到新建的模板目录中,然后根据自己的目录结构来修改该config.php,这个文件中的文件结构根据default中的结构建立即可,在此修改后,还可以根据后台中的界面菜单->模板风格中进行设置。
注意:需要修改项目目录/caches/configs/system.php
文件,将“是否允许在线编辑模板”的值改为1,才能通过后台编辑模板文件。
模板中的页面:
1.index.html——首页;
2.category.html——频道页;
3.list.html——列表页;
4.show.html——内容页;
2.phpcms模板引擎语法
(1)phpcms模板引擎支持在模板html文件中写php代码(不推荐使用)。
(2)使用{php
}
定界符,可以在其中直接书写php语法的语句(推荐使用)。
(3)使用{}
定界符之中可以直接调用phpcms对应后端中的常量和变量并显示输出(常用的常量请参考PHPCMS V9手册)。
(4)使用{}
定界符可以在其中调用绝大部分的php函数和phpcms自带函数,在处理完变量和常量后再输出(不推荐使用php函数而推荐使用系统函数)。
(5)if判断
举例:如果$num的值为1或者0,就输出aaaaa,如果等于2就输出bbbbb,否则就输出ccccc。
{php $num=1}
{if $num==1 || $num==0}
aaaaa
{elseif $num==2}
bbbbb
{else}
ccccc
{/if}
(6)数组遍历
循环只有一种,就是遍历数组:
假设后台一个数组:$data = array("1"=>1,"2"=>2,"3"=>3,"4"=>4,"5"=>5,"6"=>6,"7"=>7,"8"=>8,"9"=>9);
,将其遍历。
{loop $data $k $r}
{$k}=========>{$r}
{/loop}
注:loop标签中有一个默认$n的变量(不显示,可以直接用),用于循环计数。
(7)pc标签
{pc:模块名 action='获取的内容操作' [参数1='参数1值' [参数2='参数2值' [...] ] ] [return='变量名(默认是data)']}
{$变量名(对其操作)}
{/pc}
所有有pc标签的地方,在后台=>界面=>相应模板=>点击[可视化]=>修改,可以在弹出的页面上点击获取想要的内容,在此修改相当于在页面上修改代码。如下图:
1)get模块
{pc:get sql='sql语句' }
{$变量名(对其操作)[参数1='参数1值' [参数2='参数2值' [...]]] }
{/pc}
2)碎片
{pc:block pos='碎片名'}
{/pc}
进入后台,现在模板相应页面的可视化界面中点击“添加碎片”,进行简单的编辑,如下图:
然后进入后台=>内容=>碎片管理,即可看到在页面中添加的碎片,并对其进行管理。
(8)template标签
{temlplate "模板名1" [,"模板名2" [,"模板名3" [,...]]}
该标签可以将页面中共同的部分直接引入到本页面中。
五、实战
1、模板的导入
(1)按照项目目录下phpcms目录下templates目录下的default目录的结构创建一个目录并重命名,然后按照default目录中的config.php的格式,创建一个config.php文件,并修改其中目录路径有关的地方(也可以在后台→设置→站点管理中设置)。
以东亚新闻网为例,其目模板的结构为:
dynews
|-phpcms
|-templates
|-default
|-config.php
|-content
|-……
|-index.html
|-dynews
|-config.php
|-content
|-……
(2)将静态资源(如js、css和图片等)打包存入项目目录下的statics目录中,这样比较好管理不同模板的静态资源。以东亚新闻网为例:
dynews
|-statics
|-css
|-js
|-images
|-dynews
|-css
|-js
|-img
|-fonts
|-……
(3)进入后台,在设置→站点管理中切换模板风格设置。设置完之后更新缓存,然后页面即可切换过来。
2、模板内容基本信息的替换
(1)兼容设置
以上文本放在下,意思为:如果是ie8浏览器,就加载
,如果ie版本大于ie9,或者非ie浏览器,就加载
.
(2)head头部分使用模板引擎加载
按照缺省模板中相同的部分,粘贴过来。
标题:
{if isset($SEO['title']) && !empty($SEO['title'])}{$SEO['title']}{/if}{$SEO['site_title']}
以上文本的意思:如果后台设置了$SEO的标题并且标题不为空,就使用这个标题,否则就使用网站标题。
关键词:
描述:
css、js文件的引入:
搜索框的代码:
导航栏的遍历:
注:subcat()
这个pc函数,传入一个catid,就能将子类的catid都取出来,返回一个数组。
首页焦点图的遍历:
注:thumb()
这个pc函数,有三个参数,第一个参数是缩略图地址,第二个参数是指定的宽度,第三个参数是指定的高度,返回一个指定宽高的缩略图地址。
六、项目建设理论
1、项目的组成
项目由多个模块组成;
模块采用MVC架构;
MVC中最重要的就是控制器;
控制器中包含若干操作;
2、操作
可以理解为操作系统中的邮件菜单中的功能,它是用户在系统中要执行的动作,例如添加、修改、删除和查看等。每个操作都由步骤组成。
3、phpcms的主入口文件
phpcms的整个项目都只访问一个文件,这个文件就是主入口文件。通过参数来判断你要访问的是哪个模块和做的哪个操作。
域名参数组成:
http://域名/index.php/m=模块名&c=控制器类&a=操作(事件)名&id=XXX
模块文件的目录:
X:\项目名\phpcms\modules\
该目录下,每个文件夹是一个模块。每个文件夹中都有php类文件(.php文件),每个类文件,或者说每个类都是一个控制器。类中的每个方法就是一个操作(或事件)。
通常来说,每个模块中,控制前台的类文件都起名为index.php
,控制后台的类的文件名称和模块名相同。
当我们访问网站的首页时,虽然在地址栏中只是访问了index.php
,但实际上访问的全称是index.php/m=content&c=index&a=init
这个事件。
这种自动跳转在X:\项目名\caches\configs\route
这个文件中做了定义,定义规则如下:
路由配置文件
默认配置为default如下:
'default'=>array(
'm'=>'phpcms',
'c'=>'index',
'a'=>'init',
'data'=>array(
'POST'=>array(
'catid'=>1
),
'GET'=>array(
'contentid'=>1
)
)
)
基中“m”为模型,“c”为控制器,“a”为事件,“data”为其他附加参数。
data为一个二维数组,可设置POST和GET的默认参数。POST和GET分别对应PHP中的$_POST和$_GET两个超全局变量。在程序中您可以使用$_POST['catid']来得到data下面POST中的数组的值。
data中的所设置的参数等级比较低。如果外部程序有提交相同的名字的变量,将会覆盖配置文件中所设置的值。如:
外部程序POST了一个变量catid=2那么你在程序中使用$_POST取到的值是2,而不是配置文件中所设置的1。
4、前后台模块控制器的控制
(1)对后台模块的访问控制
模块目录中,凡是后台类文件中必须做到两点:
1.最开始要写上这条代码:
defined('IN_PHPCMS') or exit('No permission resources.');
其意思为:用户必须通过主入口来访问此控制器类文件,直接访问此文件是不行的。即通过地址栏输入http://域名/phpcms/modules/模块目录名/后台类控制器文件名
来访问就会返回No permission resources.这个信息。
IN_PHPCMS
这个变量在base.php文件中已经定义为true
只有通过主入口文件,才能加载base.php文件,才不会返回No permission resources.这个信息。
2.要继承admin
这个类,此admin类为admin模块目录下的classes目录下的admin.class.php文件,因此要在文件第二行写上这条代码:
pc_base::load_app_class('admin','admin',0);
表示引入admin
模块中的admin
类。
(2)base.php详解
base.php中的类名为‘pc_base’,其中定义的静态方法均用pc_base::方法名()
来调用,下面就详细讲解一下这个类中常用的几个静态方法:
1)pc_base::load_app_class()
加载应用中的类,这些类通常只在模块当中加载。
它有3个参数:
①类名:其所加载的是X:\项目名\phpcms\modules\
目录中每个模块目录下的classes
目录中的类。
②模块名:如果不写的话,缺省加载本模块中的类。
③是否初始化类:如果不写的话,缺省是初始化创建对象付给变量的,如果写0
或者false
,就是只加载,相当于引入文件。
2)pc_base::load_sys_class()
加载系统中的类,这些类是phpcms的系统类,里面的方法都是全局函数,在项目中的任何地方都可以使用。
它有3个参数:
①类名:其所加载的是X:\项目名\phpcms\libs\classes
中的类目录中每个模块目录下的classes
目录中的类。
②扩展路径名:????????????
③是否初始化类:如果不写的话,缺省是初始化创建对象付给变量的,如果写0
或者false
,就是只加载,相当于引入文件。
3)pc_base::load_app_func()
加载应用函数库。
它有两个参数:
①函数库名:其所加载的是X:\项目名\phpcms\modules\
目录中每个模块目录下的functions
目录中的函数库。
②模块名:如果不写的话,缺省加载本模块中的函数库。
4)pc_base::load_sys_func()
加载系统函数库。
它有两个参数:
①函数库名:其所加载的是X:\项目名\phpcms\libs\
目录中每个模块目录下的functions
目录中的函数库。
②扩展路径名:?????????????。
(3)模块的安装和卸载
1)简洁办法
只要在X:\项目名\phpcms\modules\
目录中拷入已有模块中的install
和uninstall
目录,即可实现自建模块的安装和卸载功能。
2)土办法
在该phpcms项目的数据库中,找到module
表,在表中插入一条数据,模块名一定要和创建的模块目录名相同,插入之后,刷新后台,即显示自己创建的模块已经安装。
注意:用这个方法会出现一个Hash错误,需要点击“扩展”->“菜单管理”后,在面板中点击自己添加的模块然后???(视频中未说明)
(4)后台模块的配置
进入后台“扩展”->“菜单管理”->“添加菜单”中添加菜单,可以将新功能置于任何后台菜单目录之下,如图:
按照文本框后的提示将其全部填完,点击提交后更新缓存即可安装写好模块的功能。会在左边栏最下方显示。
5、通过前台模块加载模板
前台模板在templates目录下,当前网站正在使用的模板目录下(以东亚新闻网为例),添加相应要使用的使用目录,比如加一个test测试目录。
dynews
|-phpcms
|-templates
|-default
|-config.php
|-content
|-……
|-index.html
|-dynews
|-config.php
|-content
|-test
|-demo.html
|-……
该test目录中放入要使用的模板文件(html文件),其文件名为“demo.html”若模块想调用该模板,则需要在控制器类文件(php文件)的相应方法中写入下面这行代码:
include templae("test","demo");
调用此控制器中的该方法即可显示demo模板。
6、通过后台模块加载模板
而后台的模板则需要在模块目录下建立一个templates
目录,该目录下的模板文件一定是.tpl.php
格式。以东亚新闻网为例,在其后台目录www/dynews/phpcms/modules
中创建一个test
模块,那么它的模板文件就在其templates
目录下,假设其模板文件为list.tpl.php
,在后台控制器类文件的相应方法中写入这行代码:
include $this->admin_tpl("list");//该方法默认调用本模块下的模板目录里的文件
若想调用其他模块中的模板,则需要使用第二个参数:
include $this->admin_tpl("link_list","link");//第二个参数为模块名,此为调用友情链接模块中的templates下的link_list.tpl.php模板。
(1)后台模板结构分析(以友情链接中的link_list.tpl.php为例)
1)头三行请不要动:
admin_tpl('header', 'admin');//保持后台默认同意风格
?>
2)下面即一个列表