的 !!!更新!!!
我们拥有来自多个来源(内部,客户,供应商)的复杂产品数据的电子表格 由于作者身份如此多样化,因此尝试管理格式化详细信息(例如列顺序和标题行数)是不切实际的。
这些CSV电子表格将通过现有表格上传到我们的数据库 (我的第一个Zend_Form ......我差不多完成了它)
用户需要查看给定电子表格中的样本,以便他们可以映射列和开始行
为此,我需要生成一个动态内容的html表,并在表数据中和周围编织表单元素。
用户将选择在每列中找到哪些值,并识别第一行数据(在任何标题行之后)
CLICK HERE看一个例子
(注意:我在这里的大部分工作都是在NDA下进行的,所以人为的例子是我们能得到的最好的:)
在这个例子中,我希望输出为:
_POST('first_row'=>2, 'column0'=>'mi', 'column1'=>'lName', 'column2'=>'fName', 'column3'=>'gender')
通过映射/定义所有scpecifics,可以解析上传的电子表格,并将准确的数据添加到product_history数据库。
ZF是解决这一特定问题的好工具吗,还是我应该从头开始写一些东西? 你 如何实现这一目标? 我终于 JUST BARELY 开始直接把这个ZF的东西放在我脑海里,而这个让我完全迷失了:)
任何和所有建议表示赞赏 〜莫
答案 0 :(得分:0)
我认为在你的情况下,使用Zend_Form会对这种情况有所帮助。
它的棘手部分当然是您的表单将基于CSV文件的标题和第一行内容在运行中动态生成。
无论您使用的是Zend_Form,还是纯PHP或其他解决方案,您将要做的很多事情都是相同的(分析CSV,提供基于CSV的动态输入,然后错误检查选择)。我认为使用Zend_Form可以非常干净地制作这样的东西。
鉴于Zend_Form的性质,例如如何根据添加到Zend_Form本身的元素验证现有表单,您需要对表单采取特殊方法。基本上,在用户上传CSV一次后,您将根据列数,它们在CSV中的位置以及列的名称创建Zend_Form对象。
由于您不想让用户多次上传CSV,如果他们做出错误的选择,我会将CSV解析为某种结构,可能是一个简单的对象或数组,然后根据它构建Zend_Form那个数据。这样,您可以将该结构保存到会话中,这样您就可以继续基于解析的数据重新生成表单,而无需每次都读取该文件。这是因为Zend_Form和动态表单的主要挑战是,当您想要显示表单时,表单不仅需要所有元素及其属性,而且还需要它们以验证表单并重新显示经过验证的表格。
我记得多年前在PHP脚本中看到过这个功能,我发现它仍然可用。也许你可以看看它的想法。我不会在这里发布链接,因为截图和脚本大多是成人网站相关的,网站大部分是NSFW,但它被JMBSoft称为TGPX。主产品页面上第8个屏幕截图的第7个屏幕显示了导入过程,它允许用户将字段映射到数据,这正是您正在做的事情。
希望我的建议有所帮助,随时回答任何问题。