【问题标题】:Generic Declarative Expression Builder in PHPPHP 中的通用声明式表达式生成器
【发布时间】:2009-06-09 01:02:07
【问题描述】:

伙计们,

我正在寻找构建一个 PHP5 用户界面,我很确定它对于一堆应用程序来说是通用的。基本上,它是一个表达式构建器,允许用户指定通过逻辑运算符 (AND/OR) 组合的表达式,如下所示:

  • FieldX > 3 AND FieldY = 5
  • FieldY = "bob" 且 FieldZ 不为空
  • FieldX > '5/23/2007' OR(FieldY = 5 AND FieldY 不为空)

理想情况下,像这样的系统将允许我作为程序员指定用户可以选择的参数列表(列)以及每个参数的数据类型。它还提供了一个很好的、用户友好的界面来定义这样的表达式——我想象一个像表格一样的东西,其中每一行都有几个选择器:

[列] [条件] [值] [AND/OR] [列] [条件] [值] [AND/OR] ...

你知道有这样的开源组件吗?或者也许是这种功能的一部分?

【问题讨论】:

    标签: php ajax user-interface expression declarative


    【解决方案1】:

    请注意。这些类型的通用表达式构建器通常被认为是解决各种用户问题的优秀解决方案。思路倾向于沿着这些路线:

    • 用户想要所有这些不同的报告
    • 我们无法授予他们 SQL 访问权限(即使他们能够理解)
    • 我们没有时间编写所有这些自定义报告
    • 因此,我将为他们提供一种简单的方法来编写查询,而无需了解特定的语法、表和字段。

    这不一定是一个坏主意,但我们在我的公司发现,非技术用户在理解和构建比一组 ANDS 或一组 ORS 更复杂的表达式方面有惊人的困难。这对我们程序员来说很难掌握,因为我们大多数人可能甚至在我们学会编程之前就对布尔逻辑有一个直观的理解。

    我建议您不要尝试让他们完全灵活地创建他们想要的任何表达式,而是将一个 UI 放在一起,让程序员在后端定义更复杂的东西,但为用户提供简单的选择前端。显然,说起来容易做起来难。

    请记住 - 有时最终用户的困难不是因为他们不知道表达想法的正确语法。更多的时候是因为他们甚至不知道如何以明确的方式表达他们的想法,即使他们提供了一种简单的方法。

    注意:我并不是说最终用户总是白痴——只是他们的思维方式可能与我们这些疯狂的开发人员不同。

    【讨论】:

    • 这是一个很好的观点。大多数人不考虑决策树。
    【解决方案2】:

    这并不完全是一个组件,但您可以查看Shopping Cart rule builder in Magento 的条件选项卡,了解此类功能的可靠 PHP 实现。它是为电子商务定制的,所以它不是一个通用的数据库覆盖,但它确实有一个很好的条件构建器界面。

    【讨论】:

    • Steve 中的这个版本是什么?我想我使用的是 1.1.3,它没有这个...
    • 它应该 - 在主水平菜单中,转到促销 > 购物车价格规则。然后添加新规则。在新规则表单中,单击左侧标有“条件”的选项卡。我正在运行 1.0.19+
    【解决方案3】:

    我认为这是一个非常有趣的想法。您打算为个人使用或通过工作进行此项目吗?

    如果您打算亲自从事这个项目,也许您应该自己编写它并将其变成一个开源项目。看起来已经对这个领域产生了一些兴趣,这将是一次很好的学习体验。

    否则,我可以看到一家公司如何在这样的事情中找到价值。它将为程序员提供另一种实用程序,可以帮助他们更轻松地完成工作并从长远来看带来回报。

    无论哪种方式,这个项目都是赢家。您将学到很多东西,并创造出其他人认为有用的东西。

    【讨论】:

      【解决方案4】:

      看看这个:http://www.codeproject.com/KB/custom-controls/SqlWhereBuilder.aspx

      下载组件的客户端 JavaScript 库版本并根据您的需要对其进行自定义。干杯。

      【讨论】:

        【解决方案5】:

        我将从创建一个面向对象的查询模型开始。例如。 Criteria-objects。下一步是编写一个允许操作此模型结构的 UI。

        【讨论】:

          【解决方案6】:

          我最近自己完成了这样的功能,恕我直言,编写自己的实现更容易。

          【讨论】:

          • 是的,PHP。实际上,它是蹩脚和直截了当的。这是规则结构: $rule = array( 'field' => 'name', 'action' => 'eq', // 测试相等性 'value' = 'John*', 'bit_operation' => 'AND' // 这个条件和下一个条件之间的连接 } 规则被保存到会话中的数组中,并由 SQL 查询构建函数使用。没有类,没有 OOP - 只是这个 :)
          【解决方案7】:

          我认为这通常与 UI 相关,而不是 PHP。你最好重新标记你的问题。也许你只是想在 PHP 中解析这些定义,在这种情况下我建议使用 preg_replace_callback。

          【讨论】:

            【解决方案8】:

            为什么不尝试使用smarty 这是一个模板引擎。您只需要获取并解析用户输入。

            现在我在想,以任何方式执行此操作都需要您检查用户输入以避免注入。

            【讨论】:

              猜你喜欢
              • 2011-08-17
              • 1970-01-01
              • 2018-09-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2022-12-03
              • 2017-12-08
              相关资源
              最近更新 更多