CakePHP input is the wrong input type. Should be text field but is dropdown :S

animate

New Member
I have a added the cakePHP tags functionality to my applications. I have a table called projects that can have many tags associated. So I have a tags table with an id and a tag varchar field. A projects table with a tags varchar field, and a link table projects_tags that has an id, tag_id, and project_id field. When I add the tags input to my view the tags that exist get populated in a dropdown box for some reason. Can anyone figure out what it is I've done wrong here?Here is my tags model:\[code\]<?phpclass ProjectTag extends AppModel {var $name = 'ProjectTag';var $hasAndBelongsToMany = array('Tag' => array('className' => 'Tag', 'joinTable' => 'tags', 'foreignKey' => 'tag_id', 'conditions' => '', 'order' => '', 'limit' => '', 'unique' => true, 'finderQuery' => '', 'deleteQuery' => '', ), array('className' => 'Project', 'joinTable' => 'projects', 'foreignKey' => 'project_id', 'conditions' => '', 'order' => '', 'limit' => '', 'unique' => true, 'finderQuery' => '', 'deleteQuery' => '', ) );}?>\[/code\]Here is my add project view add.ctp:\[code\]<?phpecho $form->create('Project');echo $form->input('title', array('label' => 'Title'));echo $form->input('website', array('label' => 'Website'));echo $form->input('description', array('label' => 'Description'));echo $form->input('language_id', array('label' => 'Language'));echo $form->input('tags');echo $form->end('Post project');?>\[/code\]Here is the tag behavior model:\[code\]<?phpclass TagBehavior extends ModelBehavior {/** * Initiate behaviour for the model using specified settings. * * @param object $model Model using the behaviour * @param array $settings Settings to override for model. * * @access public */function setup(&$model, $settings = array()) { $default = array( 'table_label' => 'tags', 'tag_label' => 'tag', 'separator' => ','); if (!isset($this->settings[$model->name])) { $this->settings[$model->name] = $default; }$this->settings[$model->name] = array_merge($this->settings[$model->name], ife(is_array($settings), $settings, array()));}/** * Run before a model is saved, used to set up tag for model. * * @param object $model Model about to be saved. * * @access public * @since 1.0 */function beforeSave(&$model) {// Define the new tag model$Tag =& new Tag; if ($model->hasField($this->settings[$model->name]['table_label']) && $Tag->hasField($this->settings[$model->name]['tag_label'])) { // Parse out all of the $tag_list = $this->_parseTag($model->data[$model->name][$this->settings[$model->name]['table_label']], $this->settings[$model->name]); $tag_info = array(); // New tag array to store tag id and names from db foreach($tag_list as $t) { if ($res = $Tag->find($this->settings[$model->name]['tag_label'] . " LIKE '" . $t . "'")) { $tag_info[] = $res['Tag']['id']; } else { $Tag->save(array('id'=>'',$this->settings[$model->name]['tag_label']=>$t)); $tag_info[] = sprintf($Tag->getLastInsertID()); } unset($res); } // This prepares the linking table data... $model->data['Tag']['Tag'] = $tag_info; // This formats the tags field before save... $model->data[$model->name][$this->settings[$model->name]['table_label']] = implode(', ', $tag_list);}return true;}/** * Parse the tag string and return a properly formatted array * * @param string $string String. * @param array $settings Settings to use (looks for 'separator' and 'length') * * @return string Tag for given string. * * @access private */function _parseTag($string, $settings) { $string = strtolower($string); $string = preg_replace('/[^a-z0-9' . $settings['separator'] . ' ]/i', '', $string); $string = preg_replace('/' . $settings['separator'] . '[' . $settings['separator'] . ']*/', $settings['separator'], $string);$string_array = preg_split('/' . $settings['separator'] . '/', $string);$return_array = array();foreach($string_array as $t) { $t = ucwords(trim($t)); if (strlen($t)>0) { $return_array[] = $t; }} return $return_array;}}?>\[/code\]Here is my project_controller add:\[code\]function add() { $this->set("Languages", $this->Project->Language->find("list")); if (!empty($this->data)) { if ($this->Project->save($this->data)) { $this->Session->setFlash('Project added.'); $this->redirect(array('action' => 'index')); } }}\[/code\]
 
Back
Top