Y!i 2011-04-24 21:49:06 8274次浏览 9条回复 6 1 0

yii中CDbCriteria多表关联查询

public function search()
{
  $criteria=new CDbCriteria;
  $criteria->with=’c';   //先在relations中关联类别表取名为’c’
  $criteria->compare(‘pname’,$pname);   //类别名称
  $criteria->compare(‘title’,$this->title,true);
  return new CActiveDataProvider(get_class($this), array(
    ‘criteria’=>$criteria,
  ));
}

舰长大叔给的参考(来自:http://bbs.php.la/thread-1099-1-1.html): http://www.yiiframework.com/doc/guide/zh_cn/database.arr

php YII中BOM引起的frameset不显示问题

问题描述:

本地测试的frameset显示正常,但是传到Linux上就不显示了,查了许多资料,也证明了我的页面结构代码都没有问题,但还是不显示。猜想一下引起这个问题的原因最大的可能就是BOM引起的,但是发现views下的页面没有BOM,但是审查元素时还是有BOM头的存在,由于我用了全站删除BOM的代码,发现了,控制器代码中存在BOM头,去掉之后上传就OK了。

去除BOM文件的方法请参考:PHP文件BOM引起的一系列问题

YII关于layout使用中renderPartial和render的两种效果

在没使用layout的情况下,用renderPartial导向view。代码中不会生成相应的js和css出来。 只有使用了layout的情况下,用render导向view才会生成。 下面代码在没有用layout的情况下生成:

$this->renderPartial($view,$data,$return,true);

yii利用iframe实现数据提交AJAX效果主要用于AJAX效果文件上传 使用iframe实现Ajax效果主要是用于带Ajax效果的文件上传 主要架构:index.html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>无标题文档</title>
<script type="text/javascript">
/**
* 提交时AJAX效果
*/
function startUpload(){
/*当AJAX处理时显示的效果*/
return true;
}
/**
* 获取提交结果
*/
function stopUpload(result,message,revalue){
/**
* result 处理状态
* message 返回信息
* revalue 返回结果
*/
return true;
}
/**
* 验证提交表单
*/
function check(){
//......
if(true){
startUpload();
$("#form1").submit();
}
}
</script>
</head>
<body>
<form id="form1" enctype="multipart/form-data" target="upload_target" action="/member/fileupload" method="post">
<input type="button" onclick="check();" value="提交" />
<iframe id="upload_target" name="upload_target" src="#" style="width:0;height:0;border:0px solid #fff;"></iframe>
</form>
</body>
</html>

XXController

<?php
class XXController extends Controller
{
public function actionFileupload(){
......
Header('content-type:text/html;charset=utf-8');
exit('<script language="javascript" type="text/javascript">window.parent.window.stopUpload($result,"'.$message.'","'.$revalue.'");</script>');
}
}
?>

注意:还要建一个名为fileupload.php视图,这个虽然可以没有,但是如果有中文信息返回会导致某某浏览器提示信息为乱码。

代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title></title>
</head>
<body>
</body>
</html>

附加说明: window.parent 是iframe页面调用父页面对象 window.top 是调用最外层的iframe

Yii实现文件上传功能

//模型页面,定义文件上传规则 //定义图片,记录原文件名,以便更新用。 //Models/File.php

class File extends CActiveRecord{
public $pic;
private $_oldpic;
public static function model($className=__CLASS__){
return parent::model($className);
}
public function tableName(){
return '{{file}}';
}
public function rules(){
array('pic', 'file', 'types'=>'jpg, gif, png',//定义文件类型
'maxSize'=>1024 * 1024 * 0.2, // 0.2MB
'tooLarge'=>'图片大小不能超过200KB.','allowEmpty'=>true),
);
}

//保存原有文件名,更新数据时用到,如果更新时未选择文件,使用原文件
//搜索完成之后的动作
protected function afterFind(){
parent::afterFind();
if(!$this->isNewRecord){//更新时
$this->_oldpic=$this->pic;
}
}

//保存之后的动作
protected function afterSave(){
if(!$this->isNewRecord){//更新时
if($this->pic==null){
$this->pic=$this->_oldpic;
$this->updateByPk($this->id,array('pic'=>$this->_oldpic));//更新一条数据中的一个字段
}
}
}
}

//表单页面 //_fileform.php

<?php 
$form=$this->beginWidget('CActiveForm', array(
'id'=>'file-form',
'htmlOptions'=>array('enctype'=>'multipart/form-data'),//上传文件必须的哦
'enableAjaxValidation'=>false,
)); 
?>
<div class="boxtab">
<?php echo $model->isNewRecord?'':'<img src="'.Yii::app()->request->baseUrl.'/uploads/'.$model->pic.'" />';?>
<h3><?php echo $form->labelEx($model,'pic'); ?></h3>
<div><?php echo CHtml::activeFileField($model, 'pic'); ?></div>
</div>
<div class="boxtab buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? '添加' : '保存'); ?>
</div>
<?php $this->endWidget(); ?>

//控制器代码,实现将文件保存在服务器 //FileController.php //上传文件

public function actionnewsAdd($id){
$model=new File;
if(isset($_POST['File'])){
$model->attributes=$_POST['File'];
$model->tid=$id;

//上传文件
$file=CUploadedFile::getInstance($model,'pic');
if($file){
$newname=date('YmdHmss',time()).'.'.$file->extensionName;
$model->pic = $newname;
}
if($model->save()){
if($file)$file->saveAs('uploads/'.$newname);//上传到服务器
//Yii::app()->user->setFlash('contact','更新成功!');
//防止重复提交
CController::refresh();
}
}
$this->render('newsAdd',array(
'model'=>$model,
));
}

//网上上传文件的例子很多,这是跟据网上的例子,转入到实际应用的代码。希望对大家有所帮助

//注:这样只实现了文件上传的基本功能,如果有大于2MB的文件,还需要对Apache进行配置修改。

//配置方法参照:http://www.dzhui.net/archives/21)解决Apache2的PHP文件上传大小限制[/url]

PHP Yii框架中使用Jquery自带的Ajax功能

<script type=”text/javascript” src=”/js/jquery-1.4.4.min.js”></script>//引用Jquery
//调用方法
<?php echo ‘<a href=”#” onclick=”ajaxupdate(‘.$data->id.’,’.$type.’,\’txt\’,\’pudate\’)”>更新</a>’;?>
//JqAjax
<script type=”text/javascript”>
//id,type,val参数
//url控制器方法
function ajaxupdate(id,type,val,url)
{
url=”<?php echo Yii::app()->request->baseUrl;?>/index.php/site/”+url;
var val1=$(“#”+val+id).val();//动态获取input中的值
var pars = “id=”+id+”&type=”+type+”&val=”+val1;
$.ajax({
type: “POST”,//以POST方法接收表单数据
url: url,
data: pars,
dataType : “html”,
success: function(msg){
$(“.classbox”).html(msg);//在class=”classbox”的节点内插入Ajax返回信息
}});
}
function isdel(id,type,val,url){
if(!confirm(‘确定要删除这条数据吗?’)){
return false;
}else{
ajaxupdate(id,type,val,url);
}
}
</script>
//site控制器中的update更新方法
public function actionupdate(){
$id = $_POST['id'];
$val =$_POST['val'];
$type=$_POST['type'];
$model=myClass::loadModel($id);
$model->title=$val;
if($model->save()){
echo ‘<div>更新成功</div>’;
}else{
echo ‘<div>更新失败</div>’;
}
Yii::app()->end();
}
<script type=”text/javascript” src=”/js/jquery-1.4.4.min.js”></script>//引用Jquery//调用方法
<?php 
echo ‘<a href=”#” onclick=”ajaxupdate(‘.$data->id.’,’.$type.’,\’txt\’,\’pudate\’)”>更新</a>’;?>//JqAjax
<script type=”text/javascript”>    //id,type,val参数    //url控制器方法	 
function ajaxupdate(id,type,val,url){	 
url=”<?php echo Yii::app()->request->baseUrl;?>/index.php/site/”+url;	 
var val1=$(“#”+val+id).val();//动态获取input中的值
var pars = “id=”+id+”&type=”+type+”&val=”+val1;	 
$.ajax({	   
type: “POST”,//以POST方法接收表单数据	   
url: url,	   
data: pars,	   
dataType : “html”,	   
success: function(msg){	 
$(“.classbox”).html(msg);//在class=”classbox”的节点内插入Ajax返回信息	 
}});	 
}	 
function isdel(id,type,val,url){	 
if(!confirm(‘确定要删除这条数据吗?’)){	 
return false;	 }
else
{	 
ajaxupdate(id,type,val,url);	 
}	
}	
</script>
//site控制器中的update更新方法	
public function actionupdate(){	 
$id = $_POST['id'];	 
$val =$_POST['val']; 
$type=$_POST['type'];	 
$model=myClass::loadModel($id);	
$model->title=$val;	 
if($model->save()){	 
echo ‘<div>更新成功</div>’;	 
}else
{	 
echo ‘<div>更新失败</div>’;	 
}	 
Yii::app()->end();	
}

原文出处

觉得很赞
您需要登录后才可以回复。登录 | 立即注册