Según la documentación se debe crear un campo select multiple para colocar los tags aquí. Este método no me gustó mucho y decidí hacerlo al estilo de el bloguer de Google, o sea, separar los tags por compas en un campo tipo text.
Mi solución consiste en buscar en la base de datos si los tags que el usuario introdujo existen, de no existir los inserto y obtengo su id. En el modelo post agregué el método beforeSave. Aquí les dejo el código:
public function beforeSave(){
if ($this->data['Tag']['tags'] != ''){ //Campo $form->input('Tag/tags')
$tags = explode(',', $this->data['Tag']['tags']);
foreach($tags as $tag){
$tag = trim($tag);
$tag_find = $this->Tag->findByTagname($tag);
if ($tag_find){
$tag_id = $tag_find['Tag']['id'];
}else{
$tag_ins = array('Tag' => array('tagname' => $tag));
$this->Tag->save($tag_ins);
$tag_id = $this->Tag->getLastInsertID();
}
$this->data['Tag']['Tag'][] = (string) $tag_id;
}
}
unset($this->data['Tag']['tags']);
return true;
}
Para el caso de la acción de editar, coloqué este código en el método:
if (empty($this->data)) {Listo, de esta manera utilizamos la relación de muchos a muchos en cakephp, pero a nuestra manera.
$this->data = $this->Post->read(null, $id);
foreach($this->data['Tag'] as $tag){
$tags[] = $tag['tagname'];
}
$tags = implode(', ', $tags);
$this->set('tags', $tags);
}
Y en la vista
echo $form->input('Tag/tags', array('label' => 'Tags separados por coma', 'type' => 'text', 'value' => $tags));
Saludos ...
No hay comentarios:
Publicar un comentario