- 首页
- PHP
- yii:如何在运行提交按钮之前运行一个函数
yii:如何在运行提交按钮之前运行一个函数
[英] yii:how to run a function before run submitbutton
本文介绍了yii:如何在运行提交按钮之前运行一个函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我需要在 yii 1.1.X 中运行提交按钮之前运行一个函数
我的函数是这种形式的getcode()
这是我在 _form.php
中的代码
我想从这个函数中设置(组文本文件)的值
<div class="form"><?php $form=$this->beginWidget('CActiveForm', array('id'='=>'文本形式','enableAjaxValidation'=>TRUE,'focus'=>array($model,'group'),//'clientOptions'=>array(//'validateOnChange'=>true,//默认值.输入更改时验证//'validateOnType'=>'true',//每次击键都验证,万岁!//'validationDelay'=>10,//与这篇文章无关——但是很酷!////默认延迟为 200 毫秒//),));?><p class="note">带有 <span class="required">*</span> 的字段</p><?php echo $form->errorSummary($model);?><div class="row"><?php echo $form->labelEx($model,'subject');?><?php echo $form->textField($model,'subject',array('size'=>60,'maxlength'=>80));?><?php echo $form->error($model,'subject');?>
<div class="row"><?php echo $form->labelEx($model,'matn');?><?php echo $form->textField($model,'matn',array('size'=>60,'maxlength'=>255));?><?php echo $form->error($model,'matn');?>
<div class="row"><?php echo $form->labelEx($model,'group');?><?php echo $form->textField($model,'group',array('value'=>$groupNumber, 'size'=>20,'maxlength'=>20));?><?php echo $form->error($model,'group');?>
<?php $userX=yii::app()->session['idX'];?><div class="row"><?php//echo $form->labelEx($model,'user_id');?><?php echo $form->textField($model,'user_id',array('value'=>$userX,'type'=>"hidden"));?><?php//echo $form->error($model,'user_id');?>
<div class="row"><?php echo $form->labelEx($model,'Privacy');?><?php echo $form->dropDownList($model,'Privacy', array('1'=>'Public','2'=>'Only me'));?><?php echo $form->error($model,'Privacy');?>
<div class="行按钮"><?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save' );?>
<?php $this->endWidget();?></div><!-- 形式--><?php函数getcode(){$groupNumber =Text::model()->maxIdNote();}
如何在保存表单之前运行此功能.
这是我的文本模型
80),数组('matn', 'length', 'max'=>255),数组('组', '长度', 'max'=>20, 'min'=>2),数组('组','comp_group'),//以下规则由 search() 使用.//@todo 请删除那些不应搜索的属性.array('id, subject, matn, group, user_id, Privacy', 'safe', 'on'='search'),);}公共函数 getidX(){$user= Yii::app()->db->createCommand();//SELECT users.username from users INNER JOIN text on text.user_id=users.id//SELECT users.username FROM users, text WHERE users.id=text.user_id;$user = Yii::app()->db->createCommand()->select('users.id')-> from('用户')->where('users.id=:username' , array(':username'=>1))//->where('id=:id', array(':id'=>$id))->queryRow();Yii::app()->session['idX']=$user;返回 $user;}/*** @return 数组关系规则.*/公共函数关系(){//注意:您可能需要调整关系名称和相关的//下面自动生成的关系的类名.返回数组('用户' =>数组(自我:: BELONGS_TO,'用户','user_id'),);}/*** @return 数组自定义属性标签(name=>label)*/公共函数attributeLabels(){返回数组('id' =>'ID','主题' =>'主题','matn' =>'马特','组' =>'团体','user_id' =>'用户','隐私' =>'隐私',);}/*** 根据当前搜索/过滤条件检索模型列表.** 典型用例:* - 使用过滤器表单中的值初始化模型字段.* - 执行此方法以获取将过滤的 CActiveDataProvider 实例* 根据模型字段中的数据进行建模.* - 将数据提供者传递给 CGridView、CListView 或任何类似的小部件.** @return CActiveDataProvider 可以返回模型的数据提供者* 基于搜索/过滤条件.*/公共功能搜索(){//@todo 请修改以下代码以移除不应搜索的属性.$criteria=新的CDbCriteria;$criteria->compare('id',$this->id);$criteria->compare('subject',$this->subject,true);$criteria->compare('matn',$this->matn,true);$criteria->compare('group',$this->group,true);$criteria->compare('user_id',$this->user_id);$criteria->compare('Privacy',$this->Privacy);返回新的 CActiveDataProvider($this, array('标准'=>$标准,));}/*** 返回指定 AR 类的静态模型.* 请注意,您应该在所有 CActiveRecord 后代中都有这个确切的方法!* @param string $className 活动记录类名.* @return Text 静态模型类*/公共静态函数模型($className=__CLASS__){return parent::model($className);}公共函数 comp_group($attributes , $params){$sqlname='SHOW COLUMNS FROM `group`';$gpnamet = Yii::app()->db->createCommand($sqlname);$gpall =$gpnamet->queryAll();$sqlnumber="SELECT COUNT(*)来自 INFORMATION_SCHEMA.COLUMNSWHERE table_name = '组'";$sqlnumberquery= Yii::app()->db->createCommand($sqlnumber);$sqlnumberall=$sqlnumberquery->queryAll();$numberColumns=( $sqlnumberall[0]['COUNT(*)']);for ($t=1 ; $t<$numberColumns ;$t++){$columnsArray[]=($gpall[$t]['Field']);}$test_status=假;$numberint=0;$masterCommand = Yii::app()->db->createCommand();$gname=$this->group;foreach ($columnsArray 作为 $u){//اگه گروه وارد شده موجود بودif ($this->group == $u ){$this->clearErrors('group');//$this->addError('group' ," $gname 已经注册");$masterCommand->reset();$masterCommand->insert('group',大批($this->group='1',));$masterCommand->reset();$this->newId=$masterCommand->select('max(id)')->from('group')->queryAll();$this->newId=$this->newId[0]['max(id)'];$test_status=TRUE;休息;}}//اگه وارد شده موجود نبود و نیاز داشت به ستون ها اضافه شودforeach ($columnsArray 作为 $u){if($test_status==FALSE && $this->group != $u){$this->clearErrors('group');//$this->addError('group' ," $gname 未注册");如果($numberint==0){$masterCommand->reset();$masterCommand->addColumn('group' , $gname , 'int(1)');$masterCommand->reset();$masterCommand->insert('group', array($this->group='1',));$masterCommand->reset();$this->newId = $masterCommand->select('max(id)')->from('group')->queryAll();$this->newId= $this->newId[0]['max(id)'];$numberint++;}}}}公共函数 maxIdNote(){返回 $this->newId;}}
解决方案
试试这个(请替换必填值,尤其是 ACTION_NAME)-
更改视图文件 -
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save' );?>
到
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save', array('id' => 'text_form_submit') );?>
在视图文件末尾写这个 -
在文本控制器中 -
创建一个新动作(与替换ACTION_NAME
时提到的相同)-
公共函数 actionACTION_NAME() {$groupNumber = Text::model()->maxIdNote();回声 json_encode($groupNumber);出口();}
i need run a function before run submit button in yii 1.1.X
my function is getcode()
in this form
this is my code in _form.php
i want set value of ( group textfiled ) from this function
<?php
/* @var $this TextController */
/* @var $model Text */
/* @var $form CActiveForm */
?>
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'text-form',
'enableAjaxValidation'=>TRUE,
'focus'=>array($model,'group'),
// 'clientOptions'=>array(
// 'validateOnChange'=>true, // the default. validate when input changes
// 'validateOnType'=>'true', // validate with EVERY keystroke, hooray!
// 'validationDelay'=>10, // not related to this post--but cool!
// // default delay is 200 ms
// ),
)); ?>
<p class="note">Fields with <span class="required">*</span> are required.</p>
<?php echo $form->errorSummary($model); ?>
<div class="row">
<?php echo $form->labelEx($model,'subject'); ?>
<?php echo $form->textField($model,'subject',array('size'=>60,'maxlength'=>80)); ?>
<?php echo $form->error($model,'subject'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'matn'); ?>
<?php echo $form->textField($model,'matn',array('size'=>60,'maxlength'=>255)); ?>
<?php echo $form->error($model,'matn'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'group'); ?>
<?php echo $form->textField($model,'group',array('value'=>$groupNumber , 'size'=>20,'maxlength'=>20)); ?>
<?php echo $form->error($model,'group'); ?>
</div>
<?php $userX=yii::app()->session['idX']; ?>
<div class="row">
<?php // echo $form->labelEx($model,'user_id'); ?>
<?php echo $form->textField($model,'user_id',array ('value'=>$userX,'type'=>"hidden")); ?>
<?php // echo $form->error($model,'user_id'); ?>
</div>
<div class="row">
<?php echo $form->labelEx($model,'Privacy'); ?>
<?php echo $form->dropDownList($model,'Privacy', array('1'=>'Public','2'=>'Only me')); ?>
<?php echo $form->error($model,'Privacy'); ?>
</div>
<div class="row buttons">
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save' ); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
<?php
function getcode()
{
$groupNumber =Text::model()->maxIdNote();
}
how to run this function before saving form.
this is my text model
<?php
/**
* This is the model class for table "text".
*
* The followings are the available columns in table 'text':
* @property integer $id
* @property string $subject
* @property string $matn
* @property string $group
* @property integer $user_id
* @property integer $Privacy
*
* The followings are the available model relations:
* @property Users $user
*/
class Text extends CActiveRecord
{
public $newId=0 ;
/**
* @return string the associated database table name
*/
public function tableName()
{
return 'text';
}
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('subject, user_id, Privacy ,group', 'required'),
array('user_id, Privacy', 'numerical', 'integerOnly'=>true),
array('subject', 'length', 'max'=>80),
array('matn', 'length', 'max'=>255),
array('group', 'length', 'max'=>20 , 'min'=>2),
array('group', 'comp_group'),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('id, subject, matn, group, user_id, Privacy', 'safe', 'on'=>'search'),
);
}
public function getidX()
{
$user= Yii::app()->db->createCommand();
// SELECT users.username from users INNER JOIN text on text.user_id=users.id
// SELECT users.username FROM users, text WHERE users.id=text.user_id;
$user = Yii::app()->db->createCommand()
->select('users.id')
->from('users')
->where('users.id=:username' , array(':username'=>1))
// ->where('id=:id', array(':id'=>$id))
->queryRow();
Yii::app()->session['idX']=$user;
return $user;
}
/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'user' => array(self::BELONGS_TO, 'Users', 'user_id'),
);
}
/**
* @return array customized attribute labels (name=>label)
*/
public function attributeLabels()
{
return array(
'id' => 'ID',
'subject' => 'Subject',
'matn' => 'Matn',
'group' => 'Group',
'user_id' => 'User',
'Privacy' => 'Privacy',
);
}
/**
* Retrieves a list of models based on the current search/filter conditions.
*
* Typical usecase:
* - Initialize the model fields with values from filter form.
* - Execute this method to get CActiveDataProvider instance which will filter
* models according to data in model fields.
* - Pass data provider to CGridView, CListView or any similar widget.
*
* @return CActiveDataProvider the data provider that can return the models
* based on the search/filter conditions.
*/
public function search()
{
// @todo Please modify the following code to remove attributes that should not be searched.
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('subject',$this->subject,true);
$criteria->compare('matn',$this->matn,true);
$criteria->compare('group',$this->group,true);
$criteria->compare('user_id',$this->user_id);
$criteria->compare('Privacy',$this->Privacy);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
/**
* Returns the static model of the specified AR class.
* Please note that you should have this exact method in all your CActiveRecord descendants!
* @param string $className active record class name.
* @return Text the static model class
*/
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function comp_group($attributes , $params)
{
$sqlname='SHOW COLUMNS FROM `group`';
$gpnamet = Yii::app()->db->createCommand($sqlname);
$gpall =$gpnamet->queryAll();
$sqlnumber="SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_name = 'group' ";
$sqlnumberquery= Yii::app()->db->createCommand($sqlnumber);
$sqlnumberall=$sqlnumberquery->queryAll();
$numberColumns=( $sqlnumberall[0]['COUNT(*)']);
for ($t=1 ; $t<$numberColumns ;$t++)
{
$columnsArray[]=($gpall[$t]['Field']);
}
$test_status=FALSE;
$numberint=0;
$masterCommand = Yii::app()->db->createCommand();
$gname=$this->group;
foreach ($columnsArray as $u)
{
// اگه گروه وارد شده موجود بود
if ($this->group == $u )
{
$this->clearErrors('group');
// $this->addError('group' ," $gname already registered");
$masterCommand->reset();
$masterCommand->insert('group',
array
(
$this->group=>'1',
));
$masterCommand->reset();
$this->newId=$masterCommand->select('max(id)')->from('group')->queryAll();
$this->newId=$this->newId[0]['max(id)'];
$test_status=TRUE;
break;
}
}
// اگه گروه وارد شده موجود نبود و نیاز داشت به ستون ها اضافه شود
foreach ($columnsArray as $u)
{
if($test_status==FALSE && $this->group != $u)
{
$this->clearErrors('group');
// $this->addError('group' ," $gname not registered");
if($numberint==0)
{
$masterCommand->reset();
$masterCommand->addColumn('group' , $gname , 'int(1)');
$masterCommand->reset();
$masterCommand->insert('group', array(
$this->group=>'1',
));
$masterCommand->reset();
$this->newId = $masterCommand->select('max(id)')->from('group')->queryAll();
$this->newId= $this->newId[0]['max(id)'];
$numberint++;
}
}
}
}
public function maxIdNote()
{
return $this->newId;
}
}
解决方案
Try this (please replace the required values, especially ACTION_NAME) -
Change in view file -
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save' ); ?>
to
<?php echo CHtml::submitButton($model->isNewRecord ? 'Create' : 'Save', array('id' => 'text_form_submit') ); ?>
Write this at the end of the view file -
<script>
$(document).ready(function() {
$('#text_form_submit').click(function(ev) {
ev.preventDefault();
$.ajax({
type: 'GET',
dataType: 'JSON',
url: '<?php echo Yii::app()->createUrl("text/ACTION_NAME"); ?>',
success:function(data){
if(data !== null) {
$('#Text_group').val(data);
$('#text-form').submit();
}
},
error: function() {
alert("Error occured!!!.");
},
});
return false;
});
});
</script>
In TextController -
Create a new action (same as what is mentioned in replacement to ACTION_NAME
) -
public function actionACTION_NAME() {
$groupNumber = Text::model()->maxIdNote();
echo json_encode($groupNumber);
exit();
}
这篇关于yii:如何在运行提交按钮之前运行一个函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文