Image tagging wrapper class for jQuery jTag
$this->widget('ext.imageTag.EImageTag',array( 'src'=>'http://djpate.com/portfolio/jTag/demo/img/bettlejuice.jpg', ));
Model:
/** * This is the model class for table "image_tag". * * The followings are the available columns in table 'image_tag': * @property integer $id * @property string $label * @property integer $width * @property integer $height * @property integer $top_pos * @property integer $left_pos */ class ImageTag extends CActiveRecord { /** * Returns the static model of the specified AR class. * @return ImageTag the static model class */ public static function model($className=__CLASS__) { return parent::model($className); } /** * @return string the associated database table name */ public function tableName() { return 'image_tag'; } /** * @return array validation rules for model attributes. */ public function rules() { return array( array('label, width, height, top_pos, left_pos', 'required'), array('width, height, top_pos, left_pos', 'numerical', 'integerOnly'=>true), array('label', 'length', 'max'=>255), array('id, label, width, height, top_pos, left_pos', 'safe', 'on'=>'search'), ); } /** * @return array relational rules. */ public function relations() { return array( ); } /** * @return array customized attribute labels (name=>label) */ public function attributeLabels() { return array( 'id'=>Yii::t('app','Id'), 'label'=>Yii::t('app','Label'), 'width'=>Yii::t('app','Width'), 'height'=>Yii::t('app','Height'), 'top_pos'=>Yii::t('app','Top Pos'), 'left_pos'=>Yii::t('app','Left Pos'), ); } /** * Retrieves a list of models based on the current search/filter conditions. * @return CActiveDataProvider the data provider that can return the models based on the search/filter conditions. */ public function search() { $criteria=new CDbCriteria; $criteria->compare('id',$this->id); $criteria->compare('label',$this->label,true); $criteria->compare('width',$this->width); $criteria->compare('height',$this->height); $criteria->compare('top_pos',$this->top_pos); $criteria->compare('left_pos',$this->left_pos); return new CActiveDataProvider('ImageTag', array( 'criteria'=>$criteria, )); } }
Controller:
class ImageTagController extends Controller { public function actionIndex() { $this->render('index'); } public function actionList() { if($models=ImageTag::model()->findAll()) { $ret=array(); foreach($models as $model) $ret[]=array( 'id'=>(int)$model->id, 'width'=>(int)$model->width, 'height'=>(int)$model->height, 'top_pos'=>(int)$model->top_pos, 'left_pos'=>(int)$model->left_pos, 'label'=>$model->label, ); echo CJSON::encode($ret); } header('Content-type: application/json'); Yii::app()->end(); } /** * Simple saving example * You should handle error, etc */ public function actionSave() { $model=new ImageTag; if(Yii::app()->request->isAjaxRequest&&isset($_POST['ImageTag'])) { $model->attributes=$_POST['ImageTag']; if($model->save()) echo $model->id; Yii::app()->end(); } } /** * Simple delete example * You should handle error, etc */ public function actionRemove() { if(Yii::app()->request->isAjaxRequest&&isset($_POST['id'])) { $model=ImageTag::model()->findByPk($_POST['id']); if($model) $model->delete(); Yii::app()->end(); } } }
View:
$this->widget('ext.imageTag.EImageTag',array( 'id'=>'imgTag', 'src'=>'http://djpate.com/portfolio/jTag/demo/img/bettlejuice.jpg', 'options'=>array( 'save'=>'js:function(width,height,top_pos,left_pos,label,imgTag){ $.post("'.$this->createUrl('/imageTag/save').'",{ ImageTag:{ "width":width, "height":height, "top_pos":top_pos, "left_pos":left_pos, "label":label }},function(id){ imgTag.setId(id); }); }', 'remove'=>'js:function(id){ $.post("'.$this->createUrl('/imageTag/remove').'",{"id":id}); }', ), )); Yii::app()->clientScript->registerScript('_imageTag',' $.getJSON("'.$this->createUrl('/imageTag/list').'",function(tags){ $.each(tags, function(key,tag){ $("#imgTag").addTag( tag.width, tag.height, tag.top_pos, tag.left_pos, tag.label, tag.id ); }); }); ',CClientScript::POS_LOAD);
PS: Sorry for bad English.
Total 3 comments
Thanks for your feedback, please check new version and tell me if there's any problem
Even I do not work .. I'm hoping for a solution because the extension is very nice. If it worked I'd be able to store data in a table, is there any example? Hello Giuseppe
I have downloaded right now yii-1.1.10 and your imagetag-0.0.1. When I click over image. I can write my tag. But all tag are saved on left top of image. Can you fix this bug?
Leave a comment
Please login to leave your comment.