検索
ホームページphp教程php手册[PHP]如何使用CodeIgniter简化页面
[PHP]如何使用CodeIgniter简化页面Jun 06, 2016 pm 07:57 PM
codeigniterphp使用についてどうやって簡略化するページ

关于CodeIgniter的入门请参照这篇文章:[PHP]框架教程:CodeIgniter框架的简易使用 下面介绍一下 创建视图的各种不同方法-与你的控制器和模型协同并用来显示结果的页面。 1 、 编写视图 视图是用户能看到你的网站的所有。他们使用一个统一的接口,而且可以根

关于CodeIgniter的入门请参照这篇文章:[PHP]框架教程:CodeIgniter框架的简易使用


下面介绍一下创建视图的各种不同方法-与你的控制器和模型协同并用来显示结果的页面。

1编写视图
视图是用户能看到你的网站的所有。他们使用一个统一的接口,而且可以根据需要进行修改。MVC的好处之一是你分开了表示层和逻辑层,一切都显得很干净。

到现在为止,我们已经可以创建简单的“welcome”页面,现在让我们看看该如何使它变得更精细。
视图实际上是一组包含有你的内容的HTML结构。结构中有各种元素,如颜色,字体,文字布局等;不过视图不关心这些,它要做的只是取来内容,显示出来。
创建视图,首先你需要创建一个HTML网页的骨架,并保存为.php后缀。让我们称它为basic_view.php。保存在
application/views目录中。(CI的loader会在这个目录寻找视图文件。)




<p>Helloworld!</p>



然后当你想要从一个控制器装载它时,使用在某个函数中调用$this->load->view():
function index()
{
$this->load->view('basic_view');
}


注意,如果这是一个model或者一个helper,你将会首先装载它,然后根据需要使用它。通过视图,调用它只需要一行代码。
当然,那是一个空的视图。为了要使它有用,我们需要内容。
因此我们要增加名称和一些文本。首先我们在控制器中定义他们:

function index()
{
	$data['mytitle']="A website monitoring tool";
	$data['mytext'] ="Test Index.";
}

注意我们并没有把它们定义为单独的变量,而是作为数组$data的元素。对于第一个元素,键名是'mytitle',值是"A website monitoring tool"。

然后,我们调用装载函数:

<?php function index()
{
	$data['mytitle']="A website monitoring tool";
	$data['mytext'] ="Test Index.";
	$this->load->view('basic_view',$data);
}

?>


我们把$data数组作为$this->load->view()的第二个参数,在视图名称之后。视图接收到$data数组后,使用PHP函数extract()把数组中的每个元素转换成内存变量,数组的键名即为变量名,值为变量内所包含的值。这些变量的值能直接被视图引用:




<h1 class="test"><?php echo$mytitle;?></h1>
<p class="test"><?php echo$mytext;?></p>


虽然你只能传送一个变量到视图,但是通过建立数组,你能把大量变量整洁地传入视图。它似乎复杂,但是实际上是一种紧凑和优秀的信息传输方式。

下面来看一下页面的效果

[PHP]如何使用CodeIgniter简化页面


2、PHP语法的长格式和短格式
在我们继续之前,先了解一下PHP标记的两种不同格式。常用的方式是:

<?php echo $somevariable ?>

然而,如果你不喜欢这种,CI也支持一个较短的版本:
=$somevariable ?>

被?>取代,而且echo由“=”代替,你也能用短格式来使用if,for,foreach,和while循环。
我个人偏好标准格式,因为我已习惯使用它。如果你使用短格式,注意有些服务器不能正确地解释短格式。


3、嵌套视

为了最大程度地重用代码,我们可以提取HTML页面的公共部分,例如,header和footer,然后在显示实际视图时把它们组合起来。
让我们创建一个视图的header部分,这是一个符合W3C标准的header、包含HTML声明和meta数据。
首先,我们列出header部分的代码:

<title><?php echo $mywebtitle?></title>
<base href="<?php%20echo">"/>
<meta name="robots" content="<?php echo $myrobots?>">
<link rel="stylesheet" type="text/css" href="<?php%20echo">"/>



把这保存为views/header_view。下面介绍它包含的变量:

$myrobots,这个变量用来告诉机器人当前页面不需要被编入索引。
$base和$css,描述基本网址的字符串。$css包含css文件的路径信息,这些信息会从CI的config文件读取(也可以用CIconfig变量site_url代替。)
现在我们需要知道:
我们如何调用嵌套视图?
我们如何获取变量的值?
有两个方法可选择。

第一,在主调用视图中读入其它视图,因此我们的主视图,也就是basic_view,应该加上一行:


<?php $this->load->view('header_view');?>


<h1><?php echo$mytitle;?></h1>
<p><?php echo$mytext;?></p>



变量可以在控制器中加上两行:
function index()
{
	$data['mytitle'] = "A website monitoring tool";
	$data['mytext'] = "Test Text!";
	$data['myrobots'] = '<meta name="robots" content="noindex,nofollow">';
	$data['mywebtitle']= 'Web monitoring tool';
	$data['base'] =$this->config->item('base_url');
	$data['css'] =$this->config->item('css');
	$this->load->view('basic_view',$data);
}

在这里新的变量$myrobots,$css,$base,$mywebtitle被创建为数组$data的新元素,当header_view被basic_view调用时,CI使用extract()解开他们,在视图中显示出来(在两个视图中不要出现同名的变量,否则会引起冲突)。


第二个方法将把视图加入控制器里面,给它分配一个变量:

function index()
{
	$data['mytitle'] ="A website monitoring tool";
	$data['mytext'] ="Test!Test!";
	$data['myrobots'] ='<meta name="robots" content="noindex,nofollow">';
	$data['mywebtitle']='Web monitoring tool';
	$data['base'] =	$this->config->item('base_url');
	$data['css'] =$this->config->item('css');
	$this->load->view('header_view','', TRUE);
	$this->load->view('basic_view',$data);
}


从严格的MVC设计原则来看,这样做似乎更正确。
实际上有三个参数可传给load->view函数。第一个,header_view,是要装载的视图的名字。这是必选。
第二个,是可选项,是装入视图的数据。第三个是布尔值。如果你不指定它,默认是FALSE,将视图送到浏览器。然而,在嵌套视图这种情况下,你需要将header_view送到主视图basic_view中,因此需要将第三项参数设置为TRUE。
现在我们已经建立了与stylesheet的关联,我们能够用定义好的css中的类来更新视图中的显示部分:


<?php $this->load->view('header_view');?>


<h1 class="test"><?php echo$mytitle;?></h1>
<p class="test"><?php echo$mytext;?></p>



请注意CI的MVC系统能让你分离显示的内容。视图只为内容提供结构,结构的风格则由cssstylesheet控制。
视图不关心什么$mytext的内容是什么,它只是按照正确的格式在正确的位置上显示它。定义$mytext的控制器甚至不知道(也不关心)它产生的数据如何被显示。因此,如果我们需要改变我们网页的外观,或在一个不同的系统(如WAP)上显示他们,那么我们只需要改变视图和CSSstylesheet。我们不需要修改控制器。

而且如果我们想要改变在网页上的信息,我们不需要去改动视图,而是只需要改变控制器里的变量值。“松耦合”原则使设计、升级和维持你的网站比较容易。


4、网站架构的现实问题
请稍等片刻,我们在header_view中动态生成了CSS样式表的地址:

<link rel="stylesheet" type="text/css" href="<?php%20echo">"/>

这意味着控制器必须生成变量的值,这些值与数据如何被显示有关,但是我们在上面说过控制器不应该知道或者关心它们具体的值是什么。这样不就符合了我们刚才提及的所谓'松耦合'原则?

动态地产生这些数据需要这样一些操作:

首先,控制器必须在config文件中读取它们,

然后控制器必须在$data数组中装入它们而且传送它们到视图,

然后视图必须解开成为内存变量$base和$css,真正使用这两个变量的是HTML协议。
似乎这样做太绕圈子了,为什么不直接在视图中静止地插入数据?

<link rel="stylesheet" type="text/css" href="http://www.mysite.com/mystylesheet.css">

用变量方式做这件事情的好处是:如果你迁移网站,或移动你的CSS文件,你只需要在config文件中改变设置,而且每个控制器和视图将会立刻反映变化。而如果把CSS位置硬编码到每个视图的后果是一旦需要变化,你必须到每个视图中去修改它们,明白这样做的好处了吧?
没有一个正确的答案。

这取决于你的优先级。关键是要合理运用MVC设计原则,让它作为一种工具,而不是束缚。为此,CI给了你很大自由。

完整的项目源码:[PHP]框架CodeIgniter的简单测试源码

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
php怎么把负数转为正整数php怎么把负数转为正整数Apr 19, 2022 pm 08:59 PM

php把负数转为正整数的方法:1、使用abs()函数将负数转为正数,使用intval()函数对正数取整,转为正整数,语法“intval(abs($number))”;2、利用“~”位运算符将负数取反加一,语法“~$number + 1”。

php怎么实现几秒后执行一个函数php怎么实现几秒后执行一个函数Apr 24, 2022 pm 01:12 PM

实现方法:1、使用“sleep(延迟秒数)”语句,可延迟执行函数若干秒;2、使用“time_nanosleep(延迟秒数,延迟纳秒数)”语句,可延迟执行函数若干秒和纳秒;3、使用“time_sleep_until(time()+7)”语句。

php字符串有没有下标php字符串有没有下标Apr 24, 2022 am 11:49 AM

php字符串有下标。在PHP中,下标不仅可以应用于数组和对象,还可应用于字符串,利用字符串的下标和中括号“[]”可以访问指定索引位置的字符,并对该字符进行读写,语法“字符串名[下标值]”;字符串的下标值(索引值)只能是整数类型,起始值为0。

php怎么除以100保留两位小数php怎么除以100保留两位小数Apr 22, 2022 pm 06:23 PM

php除以100保留两位小数的方法:1、利用“/”运算符进行除法运算,语法“数值 / 100”;2、使用“number_format(除法结果, 2)”或“sprintf("%.2f",除法结果)”语句进行四舍五入的处理值,并保留两位小数。

php怎么根据年月日判断是一年的第几天php怎么根据年月日判断是一年的第几天Apr 22, 2022 pm 05:02 PM

判断方法:1、使用“strtotime("年-月-日")”语句将给定的年月日转换为时间戳格式;2、用“date("z",时间戳)+1”语句计算指定时间戳是一年的第几天。date()返回的天数是从0开始计算的,因此真实天数需要在此基础上加1。

php怎么读取字符串后几个字符php怎么读取字符串后几个字符Apr 22, 2022 pm 08:31 PM

在php中,可以使用substr()函数来读取字符串后几个字符,只需要将该函数的第二个参数设置为负值,第三个参数省略即可;语法为“substr(字符串,-n)”,表示读取从字符串结尾处向前数第n个字符开始,直到字符串结尾的全部字符。

php怎么替换nbsp空格符php怎么替换nbsp空格符Apr 24, 2022 pm 02:55 PM

方法:1、用“str_replace("&nbsp;","其他字符",$str)”语句,可将nbsp符替换为其他字符;2、用“preg_replace("/(\s|\&nbsp\;||\xc2\xa0)/","其他字符",$str)”语句。

php怎么查找字符串是第几位php怎么查找字符串是第几位Apr 22, 2022 pm 06:48 PM

查找方法:1、用strpos(),语法“strpos("字符串值","查找子串")+1”;2、用stripos(),语法“strpos("字符串值","查找子串")+1”。因为字符串是从0开始计数的,因此两个函数获取的位置需要进行加1处理。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。