The widget is located in /protected/extensions not /protected/extensions/widgets, I only point this out for people who aren't sure where to put things. You have quite a bit of flexibility on where you locate widgets and components. It doesn't makes sense to me to create another folder in extensions but perhaps on a very large project it would.

The dropdown list data is being pulled from a table that has only two fields, id and word, since I want to select the word from the list and store exactly the same value in the database I need a key=>value array that looks like word'=>'word.

The $_POST data will contain an array of selected values, this will be in $_POST['keywordArray']

publicfunctionactionCreate(){$model=newEventAbstract;
$this->layout = '//layouts/column1';
// Uncomment the following line if AJAX validation is needed// $this->performAjaxValidation($model);if(isset($_POST['EventAbstract'])){$model->attributes=$_POST['EventAbstract'];
// I better do a check in case no keywords were selected$keywordArray = (!isset($_POST['keywordArray']) ? array() : $_POST['keywordArray']);
// now I either have an array of keywords or an empty array// send the array to a function to format the keywords in a // comma delimited format$this->setKeywords($model,'keywords',$keywordArray);
// it's all done but not yet validatedif($model->save())$this->redirect(array('view','id'=>$model->id));
}$this->render('create',array('model'=>$model));
}

publicfunctionrules(){//NOTE: you should only define rules for those attributes that// will receive user inputs.returnarray(// other rules are herearray('keywords', 'keywordCount', 'skipOnError'=>true, 'maxKeys'=>6, 'minKeys'=>2),
// keywords is the field in the table currently holding the submitted value// $model->keywords// keywordCount is the function (in the model) that will do the validation////skipOnError, maxKeys and minKeys are all parameters that will be //sent to the validation function other rules);
}