【新版修订】DiliCMS新手学习帖 2.0Final
本帖最后由 jeongee 于 2012-11-7 12:31 编辑【本帖子内容安装教程是旧版的,新版的安装教程参看下载包里的README】
2012.09.11 下载DiliCMS最新版,发现有些东东有了变化,修订一下...
2012.03.07 其实看完这个帖子之后,做简单的小站是没问题的,祝大家学习顺利...
2012.02.22 学了一段时间后,在多语言上卡壳了,也没能解决。希望大家又做出的拿来分享一下吧。唉!发现岁数大了,就懒了...drupal学习中,懒啊...
首先感谢jeongee 给大家带来这么好的东东...感谢HEX老大加精!
刚开始学习CI,一边学一边写下过程吧,方便新手学习,也以免日后忘记。
希望jeongee 能及时帮忙指正错误,谢谢...谢谢老大的评分!
测试机环境:WindowsXP XAMPP 1.7.7
服务器目录:D:\xampp\htdocs
Apache端口:80
DiliCMS版本:DiliCMS 2.0Final
快捷通道:
一楼. 下载与安装
二楼. CI设置
三楼. 模型管理学习 创建内容模型、分类模型,并在views页面显示出来
四楼.插件学习
五楼.做好了静态页模板,怎么放进DiliCMS做views?
一.下载与安装
1.下载:到Github下载最新版2.0Final https://github.com/DiliCMS/DiliCMS
2.安装:解压到dilicms文件夹,路径:D:\xampp\htdocs\dilicms,地址栏输入http://127.0.0.1/dilicms/
(1).新建数据库dilicms,并导入db.sql
(2).配置application/config/database.php
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '数据库密码';
$db['default']['database'] = 'dilicms';
(3).运行http://127.0.0.1/dilicms/index.php/initialize ,初始化系统。完成后可以登录。http://127.0.0.1/dilicms/index.php/admin
初始用户名:admin 密码:dilicms
3.文件夹说明:
2.0Final版本改动比较大,jeongee把后台管理所使用的东东都整理到了admin目录下,更方便管理。
-admin 后台界面主题(DiliCMS)
+templates 后台主题存放目录
+default 后台界面默认主题
-application这个就是咱们自己网站要放的地方,捡用的说...
+config 配置文件都在这里,config.php,database.php,autoload.php刚学就用到了这几个...
+controllers 传说中的控制器
+core 自己定义的核心文件
+libraries自己的类库,这里面已经有了DiliCMS的类库
+models传说中的模型
+views 传说中的视图,DiliCMS在controller设置用不用这个目录
+extensions
+fields
+plugins 这个以后存放插件,也是DiliCMS 加的
+shared 这是DiliCMS 加的
+settings 这是DiliCMS的设置文件
+system CI默认
+templates 这是DiliCMS 加的,放前台页面模板,跟application\views作用相同,有兄弟问“模板扩展时,怎么用templates 或者view路径”的问题,老大的解释是“class test extends CI_Controller还是原来的views路径,extends Front_Controller路径默认被改为templates/default。”问题帖:http://codeigniter.org.cn/forums/thread-11344-1-1.html
xiehao 发表于 2011-12-27 14:42
三.模型管理学习帖
刚接触这个“模型管理”,还真有点乱,因为“内容模型”、“分类模型”的管理界面相同, ...
还需要在文件controllers/welcome.php中的index()加上一行
$this->load->database();
以便载入并初始化数据库
请问一下大家,为什么我安装dilicms的时候会出现卡在第一步“关于dilicms”的界面? 本帖最后由 xiehao 于 2012-9-11 09:19 编辑
二.CI设置
1.URI中去掉index.php
(1).在D:\xampp\htdocs\dilicms,下创建.htaccess文件,内容如下
RewriteEngine on
RewriteBase /dilicms
RewriteCond $1 !^(index\.php|images|robots\.txt|admin|templates|extra|plugins|attachments)
RewriteRule ^(.*)$ index.php/$1
(2).配置application/config/config.php,将其中的index.php删掉
$config['index_page'] = 'index.php';
这时候,试试看这个地址是不是能访问了。http://127.0.0.1/dilicms/admin
2.自动加载常用类库
配置application/config/autoload.php ,自动加载常用的类库,以免在控制器中每次加载。
$autoload['libraries'] = array('database');
$autoload['helper'] = array('url','form','html');
3.修改默认首页
配置application/config/routes.php ,这里给个值,CI的默认值是welcome,DiliCMS这里空着了。我们给写上welcome
$route['default_controller'] = "welcome";
小试一下:
以上改好后,在application/controllers下建一个welcome.php,内容如下
<?php
class Welcome extends CI_Controller
{
function index()
{
$data['site'] = $this->db->get('dili_site_settings')->row();
$this->load->view('welcome_message',$data);
}
}
修改application/views/welcome_message.php,修改为如下内容。
<!DOCTYPE html>
<html lang="zh-cn">
<head>
<meta charset="utf-8">
<title><?=$site->site_name?></title>
</head>
<body>
<div id="container">
<h1><?=$site->site_name?></h1>
</div>
</body>
</html>
浏览器地址栏输入网址http://127.0.0.1/dilicms/ 看一下吧
接触CI的大家应该知道这个网址的完整样子应该是http://127.0.0.1/dilicms/welcome/index,welcome是控制器,index是控制器里面定义的那个function,看看对不对。可以把welcome.php里面的function index改成blog或者其它名字试试,网址输入http://127.0.0.1/dilicms/welcome/blog,是不是一样能看到这个页面?
本帖最后由 xiehao 于 2011-12-28 13:53 编辑
三.模型管理学习帖
刚接触这个“模型管理”,还真有点乱,因为“内容模型”、“分类模型”的管理界面相同,还以为他俩的功能一样呢,后来瞎鼓捣一番,才算明白了。当时的问题帖http://codeigniter.org.cn/forums/thread-11353-1-1.html
创建分类模型,其实就是建了个dili_u_c_xxxxx的表
创建内容模型,其实就是建了个dili_u_m_xxxxx的表
举例:网站需要3个导航菜单,一是主导航栏,二是页面底部导航,三是侧栏导航。当然不会去创建3个表,只要创建一个表来存放内容,一个表来存放类别就可以了。(其实存放类别的这个表看自己喜好,要不要都行吧?)
【分类模块】:导航菜单nav,已有默认字段classid,那只需加个说明性的字段,如nav_name
【内容模块】:导航菜单nav,加个nav_title字段命名,加个nav_url字段链接,还要加个classid对菜单进行分类,而这个classid就可以获取分类模块里的信息。填写:nav|nav_category(分类模块名|字段名)
具体操作一下,看看。接着上面的例子,我们需要两个表,使用DiliCMS不用跑到phpmyadmin去建表,Dili就做了。我们先创建一个分类模型。
1.在“分类模型管理”-“添加新分类模型”中添加nav模型
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/1507592sg6ycbgy5szvdl3.jpeg
2.在分类模型管理,点击nav行的“字段管理”-“添加新字段”
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/1507592gy929h4g31gpvyv.jpeg
3.这里我们只需要添加一个字段就可以了,命名为nav_category吧,设置为单行文本框,50字节就可以啦。
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/150800asptmtjjxaxitjs5.jpeg
4.上述动作完成后,点击“内容管理”-“菜单分类”-“添加”
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/1508007pzd5hx4n8dz4488.jpeg
5.添加“主导航”,“底部导航”,“侧栏导航”三个分类
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/150759hoicau5cee35huea.jpeg
6.看一下数据库里面发生了什么情况,多了一个表,dili_u_c_nav,结构如下:
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/152422fzddcu191q181qd3.jpeg
7.接下来我们创建内容模型,在“内容模型管理”-“添加新内容模型”中添加nav模型。
我当时有疑问,这个模型标识跟分类模型的名称一样行不行?答案是行的,因为它们生成的表名不一样。
分类模型的表名:dili_u_c_nav
内容模型的表名:dili_u_m_nav
可以自己用phpmyadmin去看一下。
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/145300rnglhkzeherjirhf.jpeg
8.点击模型列表nav行的“字段管理”-“添加新字段”
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/1455558j08sik04ks09885.jpeg
9.这里要添加的字段有:分类ID-classid,链接名称-nav_title,链接地址nav_url。
我们的菜单类别这里要放个下拉菜单,用来选择链接属于“主导航”,“底部导航”,“侧栏导航”
这里的字段类型选择“下拉菜单(模型数据)”,它的值应该是“分类模型名|字段名”,如图。
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/15242166ss00y0sh0hvy30.jpeg
10.三个字段都添加完成后,我们到内容管理去添加菜单项
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/15242155lz51a3acdh3lh1.png
11.这时候,菜单类别的下拉列表,就会...哦,如果你发现没有出现这种情况的话,请先清理一下缓存,嘿嘿
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/153556z5f7h88d7i54fcv7.jpeg
12.我们去看一下数据表dili_u_m_nav的结构,前三个字段是默认生成的,后三个字段是我们添加的。
http://codeigniter.org.cn/forums/data/attachment/album/201112/27/1535564m3jvc19gc4k3jzj.jpeg
这样一步步做下来,算是明白了。
暂时不会写model,就在views里面页面的对应位置加入一个导航栏吧,可以在welcome_message.php试试。代码如下:
<div class="mainNav">
<ul>
<?php
//导航菜单表dili_u_m_nav主导航classid=1底部导航classid=2
$menu_query = $this->db->query('SELECT * FROM dili_u_m_nav WHERE classid=1')->result();
foreach ($menu_query as $row){
echo "<li>".anchor($row->nav_url,$row->nav_title)."</li>";
}
?>
</ul>
</div>
照着这个例子,我自己再做一个“新闻模型”,用于网站发布新闻,这里就不分类了,根据实际需要而定。
还要做“博客模型”等等...
而且我看到dilicms的权限管理那里,也是按模型分配权限的。
本帖最后由 xiehao 于 2011-12-27 17:14 编辑
四.插件学习帖
这里先放个插件,使用方法见jeongee的原帖
【插件】随变编辑器---DiliCMS第一个官方插件发布啦
http://codeigniter.org.cn/forums/thread-10172-1-1.html
本帖最后由 xiehao 于 2012-3-21 16:55 编辑
要做个多语言站,应该处理哪些问题?已经发帖请教了,请高手做个详细教程吧...问题贴http://codeigniter.org.cn/forums/thread-11371-1-1.html找了一个比较不错的教程,试了一下,可以用,待整理后会发布上来。
http://heshiwenxiang.blogbus.com/logs/128636817.html
【基础】做好了静态页模板,怎么放进DiliCMS里面做前台页面?
首先,明白controller、views是怎么工作的,这里先把数据处理层的models省略掉吧,学习进度有点慢,鼻子塞了,有点感冒。
做好的静态页包括html、css、js、图片等文件,我们应该把它们放在哪里呢?
我们把html文件转成php文件,html中公用的部分,如底部的版权可以单独做成footer.php文件,统一放在application\views下,
在站点根目录下建立名为assets的文件夹存放其他文件(你可以随意命名这个文件夹,assets的意思是“资产、有用的东西”,用这个名字比较好记嘛,意思是有用的东西都在这里啦,哈哈,想用abc也可以),把css放在assets\css下,把js放在assets\js下,把图片放进assets\images下。这样的目的是方便文件管理。
-application
+views 存放.php文件
-assets 有用的东西都在这里
+css 存放css文件
+images 存放图片
+js 存放js文件
如果你的文件夹结构跟我的一样,嘿嘿,那views里面那些.php文件包含的图片、css、js路径都要修改喽。示例如下,index.php调用css的代码:
<link rel="stylesheet" href="<?=base_url();?>assets/css/style.css" type="text/css" />
<?=link_tag('assets/css/style_index.css');?>
这两行代码其实输出是一样的,详见参考手册:
URL helper http://codeigniter.org.cn/user_guide/helpers/url_helper.html
HTML helper http://codeigniter.org.cn/user_guide/helpers/html_helper.html
把application\controller\welcome.php中的index修改为 $this->load->view('index');
然后浏览器打开http://127.0.0.1/dili/ 看一下,是否显示正常呢?
如果还是不正常,看看.htaccess里面的RewriteCond是不是没有添加|assets|呢,解决。
这样,静态页就放到了views里面,当做views使用,我们再用dilicms创建个内容类型,写几句读取数据库的代码,那这些views不就可以成为动态站点前台页面了吗,呵呵呵...接下来继续...
好支持 坚决的支持 那啥 兄弟辛苦了
中英双语站的实现 2012.03.23
本帖最后由 xiehao 于 2012-3-23 13:57 编辑鼓捣了很久双语站了,其实后来向ionize妥协了,但还是把dilicms实现多语言站的教程写一下吧。参考教程:http://heshiwenxiang.blogbus.com/logs/128636817.html
下面的步骤,紧接着我们之前的学习帖进行...实现方式,给内容表添加相应的字段,方式参考3楼,嘻嘻,不重复了。
比如给news添加title_english字段,之前的title字段则修改为title_zh-cn。就这样,所有需要中英文显示的内容,都由两个字段来分别显示。
六. 中英双语站的实现
中文zh-cn英文english
想用简写的朋友,不好意思,我没实现...
1. 看一下hook功能是不是已经开启了。application\config\config.php,大约第94行,配置为TRUE
$config['enable_hooks'] = TRUE;
2.定义挂钩点。
打开application\config\hooks.php,在后面添加下面这段代码,定义pre_controller
$hook['pre_controller'] = array(
'class' => 'LangClass',
'function' => 'set_lang',
'filename' => 'Langclass.php',
'filepath' => 'hooks'
);
3.定义钩子。
在application\hooks目录下新建文件LangClass.php,内容如下:
<?php
class LangClass extends CI_Controller {
function set_lang(){
//从Uri中分解出当前的语言,如'zh-cn' 或 'english'
$my_lang = $this->uri->segment(1);
//默认语言为英语english
if($my_lang =='zh-cn' || $my_lang =='english' )
{
//动态设置当前语言
$this ->config->set_item('language' , $my_lang );
//为方便,配置做后缀的当前语言,如_english
$this ->config->set_item('post_lang' , '_' .$my_lang );
}
else{
$this ->config->set_item('language' , 'zh-cn' );
$this ->config->set_item('post_lang' , '_zh-cn');
}
$this ->load->helper('language' );
}
}
4.配置路由规则,application\config\routes.php,修改如下,其实只添加了后面两行:
$route['default_controller'] = "welcome";
$route['admin'] = "admin/login";
$route['404_override'] = '';
$route ['(zh-cn|english)(:any)' ] = "$2" ;
$route ['zh-cn|english' ] = "welcome" ;
5. ...
很好,我昨晚还在研究,没有想到你就发帖出来,真是及时雨啊~!有最新资料发出来大家共同研究研究。谢谢了~ xiesq008 发表于 2011-12-27 23:25 static/image/common/back.gif
很好,我昨晚还在研究,没有想到你就发帖出来,真是及时雨啊~!有最新资料发出来大家共同研究研究。谢谢了~ ...
大家共同学习,进步更快,呵呵。我也一直在看帖学习,CI社区的老大们都很热心的在帮助我们 你有新进展就贴出来 大家学习学习 :lol