提问人:Pekka 提问时间:11/25/2009 最后编辑:Pekka 更新时间:11/26/2009 访问量:414
如何解决PHP中的“非结构化”导航?
How do you solve "unstructured" navigation in PHP?
问:
我有一个大型的、基于 PHP 的 CMS 来管理网页。 所有项目都以树状结构进行组织。 当我编辑一个项目时,“后退”按钮通常指向它的父项目。 因此,通常的工作流是在树中导航。
现在,时不时地会出现一个工作流,该工作流可以“跳转”到其他项目,而不考虑结构。
例如,当用户编辑网页时,他们可能希望打开该页面附加到的模板(完全不同分支中的另一个项目),在那里进行更改,然后单击“保存”时,希望返回到他们正在编辑的页面。
目前,我使用
domain.com/admin/template/edit?from=/frontpage/edit
其中“from”变量确定“保存”和“取消”按钮的目标 URL。
当路径变得太长和太复杂时,这一直有效。例如,如果用户
- 编辑页面
- 打开附加的模板
- 在前端视图中预览该模板
- 然后期望无缝地回到他们正在编辑的页面?
现在,“历史记录”在最后一项结束,因此当用户从前端视图返回时,原始页面的链接将丢失,他们必须手动搜索。
另一个可能很快发生的问题是,包含所有“from”值的 GET URL 变得太长或完全混乱:
domain.com/admin/template/edit?from=/frontpage/edit&from=/somepage/edit
&from=/template/preview&/from=template/edit&/from=template_preview ...
(你明白了)
我过去通过打开单独的窗口优雅地解决了这个问题,但我真的想实现一个通用的无缝单窗口工作流程,主要是因为多个窗口往往会让用户感到困惑。
你如何解决这个问题?
您是否实现了强大的“非结构化”导航,该导航在打开多个窗口时效果良好(=一个用户使用不同的导航路径执行多个不同的操作)?
你如何在用户界面方面做到这一点?
我能想到的最好的方法是传递一个“from”值,该值指向数据库或会话中的临时记录。该记录包含有关当前路径的所有信息,因此始终可以提供正确的“返回第 x 页”值。
我最想听到的是那些成功实施它的人的经验,以及他们是如何做到的。
答:
只要你只需要后退一次,为什么不在你生成你要跳转到的页面时传入任何你想要的链接页面 ID?
评论
只是几点建议
预览问题:在IFRAME中预览,这样历史记录就不会丢失?
杂乱无章的 URL 问题:如果每个页面都有某种键,而不是 URL 路径
(i.e. /frontpage/edit = 952,
/frontpage/edit&from=/somepage/edit = 763,
/template/preview = 651,
template/edit = 612,
template_preview = 866 etc.)
您可以在PATH_INFO中将它们串在一起,如下所示:
domain.com/admin/template/edit/952/763/651/612/866
当用户单击时,您可以为会话构建一堆访问过的页面,每次打开新页面时都会推送新页面,当他们单击后退时会弹出。将其存储为会话变量。
诀窍是始终检查他们的引用字符串,因为他们也可能使用浏览器的后退和前进按钮。如果他们的引荐来源链接字符串不在堆栈的顶部,则必须扫描堆栈以查找它,以查看他们是否手动备份到上一页。
评论