Javascript CakePHP—从用户处处理数组的最佳方法
对于我正在使用CakePHP构建的应用程序,我希望用户能够输入任意数量的标记,这些标记来自一组特定的可能性,有点像stackoverflow的类别标记 我实际上得到了一个工作代码,但对我来说它看起来很难看。我将在下面概述我的方法,以及我想用黑体字进行的改进。我很抱歉没有提出具体的问题,但作为一个自作主张的人,我真的可以利用反馈。如有任何建议,将不胜感激 我允许用户使用Html->select从列表中选择他们的选项:Javascript CakePHP—从用户处处理数组的最佳方法,javascript,php,mysql,cakephp,Javascript,Php,Mysql,Cakephp,对于我正在使用CakePHP构建的应用程序,我希望用户能够输入任意数量的标记,这些标记来自一组特定的可能性,有点像stackoverflow的类别标记 我实际上得到了一个工作代码,但对我来说它看起来很难看。我将在下面概述我的方法,以及我想用黑体字进行的改进。我很抱歉没有提出具体的问题,但作为一个自作主张的人,我真的可以利用反馈。如有任何建议,将不胜感激 我允许用户使用Html->select从列表中选择他们的选项: $options = array( //... ); echo
$options = array(
//...
);
echo $this->Form->select(
'Tag.tag_name',
$options,
array('multiple' => true)
);
我宁愿让用户键入他们的选择,然后再显示选项。理想情况下,标签会出现在那之后,用一个可点击的十字架再次移除它,就像在Evernote Webtagger中一样。有人知道可以用于此任务的Java脚本吗
然后是服务器端。基于我在stackoverflow上读到的其他帖子,我决定创建一个单独的表来存储我希望它们易于搜索的标签。数据存储在另一个控制器中,对象与标记表有hasMany关联。第一次存储东西的代码看起来不错,但是用户应该能够在以后编辑它。我现在要做的就是简单地销毁标记表中与当前帖子相关联的所有db对象,然后再次添加从表单返回的所有标记。以下是我的代码的相关部分:
$profile = $this -> select(); // select() is a private function that returns the current profile, based on Auth id
//destroy old ones
foreach($profile['Tag'] as $tag):
$this -> Profile -> Tag -> delete($tag['id']);
endforeach;
//create new ones
foreach ($this -> request -> data['Tag']['tag_name'] as $tag):
$this -> Profile -> Tag -> create();
$entry['tag_name'] = $tag;
$entry['profile_id'] = $this -> Profile -> id;
$this -> Profile -> Tag -> save($entry);
endforeach;
我对这些东西的经验是有限的,但删除所有东西然后再次保存似乎很粗糙。是否有一种好方法可以只触摸已删除的条目
最后,为了确保用户在进入编辑菜单时看到他以前的标记,我将数据存储到$this->request->data中:
$count = 0;
foreach($profile['Tag'] as $tag):
$this -> request -> data['Tag']['tag_name'][$count] = $tag['tag_name'];
$count++;
endforeach;
感谢您的评论:这可能更适合于感谢两位的链接!Select2似乎正是我在寻找前端部分的东西:下次我将使用codereview来解决这些模糊的问题;ndm,你能推荐一个更深入地讨论CakePHP或Web开发的地方吗?例如,关于工具的讨论?在学习C++中,CPLUS PLUS网站对我来说是非常有价值的,但是我还没有找到这样一个社区来进行Web开发。