I'm using Yii framework to build myself a poor man's project tracking system. The goal is to have a in place "crud" widget/form that is similar to basecamp's note widget to display note(s) with a title and a content field. (I no longer use basecamp therefore cannot post the image of what their note widget looks like :-( )
Using Yii, I have a client model and I would like to display in a div all the notes corresponding to this client and have CRUD functionality for these notes right in the same webroot/client/view/client_id
page.
The closest implementation I found online is done purely in jquery, jeditable, but lacks of create and delete functionality. Also, it has no Yii model (CActiveRecord) support, meaning one needs to hard-wire the data transmitted back and forth in controller code without taking advantage of Yii's MVC setup.
What I have now: A hidden form that's submitted via AJAX (forcCreation) and an Zii CListView widget (for Retrieve) of the note(s), which takes advantage of the built-in zii widget update functionality $.fn.yiiListView.update('clistview_id');
, but I am rather stuck on the U and D part of the game using Yii/Zii widget, jquery, or a combination of those.
My client/view.php snippet:
<div class="note_create">
<?php echo CHtml::button('Add new note',array('class'=>'create-note-button')) ?>
<div class="create-note-form" style="display: none;">
<!-- _createNote is just a CActiveForm with a CHtml::ajaxSubmitButton-->
<?php $this->renderPartial('_createNote', array('client' => $model, 'note' => $note)); ?>
</div>
</div>
<div class="note_browser">
<?php $this->widget('zii.widgets.CListView', array(
'id' => 'clist_note_browser',
'dataProvider' => $model->noteSearch(),
'itemView' => '_note', // refers to the partial view named '_note'
'emptyText' => 'No notes found.',
'sortableAttributes' => array(
'note.title',
'note.last_modify'
),
));
?>
</div>
A very simple Note Model:
<?php
/**
* This is the model class for table "note".
*
* The followings are the available columns in table 'note':
* @property string $nid
* @property string $title
* @property string $content
* @property string $first_create
* @property string $last_modify
*
* The followings are the available model relations:
* @property ClientNote $client ClientNote an intermediate table with two columns: nid, cid
*/
class Note extends CActiveRecord
{
...
public function relations()
{
return array('client' => array(self::HAS_ONE, 'ClientNote', 'nid'),);
}
...
}
Does anyone have any suggestions?
For start check out this, it helps you to understand how do you want:
http://help.discretelogix.com/php/yii/enable-in-place-editing-in-yii-grid.htm
after you understood, you need to create your own widget that does this
you can check out existing extensions that tries to do what you are after: http://www.yiiframework.com/extension/editablegridview/
http://yiitutorials.net/easy/creating-a-widget-with-the-yii-framework
http://www.yiiframework.com/extension/escrollablegridview/
You need to study all these, and understand how they work, so you should be able to take one and extend to fit your needs. Good luck.