文章目录
-- application
-- cache
-- config
-- controllers
-- core
-- hooks
-- models
-- views
-- system
-- core :CI的基础核心,不要做任何修改,要扩展应通过Hooks
-- fonts
-- libraries
Basic
- 任何一个url请求,ci都是先用网站根目录下的
index.php
来处理,然后再重定向.所以一般的请求格式是这样的:..index.php/..
有一种方法可以使url中避免输入index.php
,方式是使用.htaccess
… - url的格式是:
example.com/controller1/method1/para1/para2
访问上面的网址ci就会调用(需public):Controller1::method1($para1, $para2)
如果访问的是example.com/controller1则默认调用:Controller1::index()
; - route
application/config/routes.php
- config
// application/autoload.php
$autoload['libraries'] = array('database', 'session');
$autoload['helper'] = array('url'); // 辅助函数
controllers/hello.php
class Hello extends CI_Controller {
function __construct() { // 默认是public,定义为private外界就不能访问了
parent::__construct(); // 对应的有__destruct();
// models/mod1/hello.php
// 一般数据的来源是models里面的数据库.完了传递给view
// TRUE: 模型在加载时自动按照数据库配置连接数据库.当然也可以给第三个参数传递一个$config['key']='value'的配置array!
$this->load->model('mod1/hello', 'aliasname', TRUE);
// 加载helper(),类库(libraries)
$this->load->help(array('url'));
$this->load->library(array('email', 'table'));
$this->load->library('form_validation'); // 表单验证相关
$this->load->library('pagination'); // 翻页
$config['base_url'] = site_url('admin/..');
$config['total_rows'] = 100;
$config['per_page'] = 20;
$this->pagination->initialize($config);
$offset = ($this->pagination->cur_page - 1) * $perpage;
}
public function index() {
// http://your-domain/index.php/hello
// index方法表示默认的,无需特意指明/hello/index
}
public function welcome($name, $age) {
$res = $this->aliasname->func(); // 默认就是模型的名字hello
$data['content'] = '123';
$data['array'] = array('1', '2');
$this->load->view('hello', $data); // view/hello.php. 给视图传递一个数据$data.key名模板中被当做变量.
}
public function _remap($method, $params=array()) { // 如果想自定义uri中第2段的映射函数如此:
$method = 'process' . $method;
if (method_exists($this, $method)) {
return call_user_func_array(array($this,$method), $params);
}
show_404();
}
}
models/mod1/hello.php
# 如果某个模型在app的整个生命周期内使用,可以让ci在系统初始化时自动加载,设置路径为:application/config/autoload.php
class Hello extends CI_Model {
public function __construct() {
parent::__construct();
$this->db = $this->load()->database('dbname', TRUE);
}
public function func() {
$res = $this->db->query('select....');
foreach ($res->result_array() as $row) {
$row['columnname'];
}
$this->db->update('tbname', array(...));
return $res;
}
public function update_entry() {
// 最好使用 $this->input->post('title');
$this->title = $_POST['title'];
$this->content = $_POST['content'];
$this->date = time();
$this->db->update('entries', $this, array('id'=>$_POST['id']));
}
}
views/hello.php
<html>
<head></head>
<body>
<h1><?php echo $content; ?></h1>
<ul>
<?php foreach ($array as $item): ?>
<li><?php echo $item;?></li>
<?php endforeach>
</ul>
</body>
</html>
ssl
$priKey = 'rsa_private_key.pem';
$pubKey = 'rsa_public_key.pem';
extension_loaded('openssl') ordie('php needs openssl extention');
$pri = openssl_pkey_get_private(file_get_contents($priKey)); // 如果失败会返回false
$pub = openssl_pkey_get_private(file_get_contents($pubKey));
$oriData = 'hello';
$encData = '';
openssl_private_encrypt($oriData, $encData, $pri); // bool
$decData = '';
openssl_public_decrypt($encData, $decData, $pub);
misc
/*
* 自动文章第一个图片为特色图片
*/
function autoset_featured_image(){
global $post;
$already_has_thumb = has_post_thumbnail($post->ID);
if (!$already_has_thumb){
$attached_image = get_children("post_parent=$post->ID&post_type=attachment&post_mime_type=image&numberposts=1");
if ($attached_image) {
foreach ($attached_image as $attachment_id => $attachment) {
set_post_thumbnail($post->ID, $attachment_id);
}
} else { // 若没有图片使用素材库中的某个
set_post_thumbnail($post->ID, '414');
}
}
}
add_action('the_post', 'autoset_featured_image');
add_action('save_post', 'autoset_featured_image');
add_action('draft_to_publish', 'autoset_featured_image');
add_action('new_to_publish', 'autoset_featured_image');
add_action('pending_to_publish', 'autoset_featured_image');
add_action('future_to_publish', 'autoset_featured_image');
// dg2: 验证码相关,处理验证码图片
// Smarty
// 主要还是为了实现前后端的分离.因为CI框架中的HTMLtemplate是直接嵌入的PHP代码.没有模板引擎.
// 这不利于前端人员撰写前端的界面. 势必要独立一套模板语言.以便达成双方沟通的桥梁!