我正在准备一个应用程序,它将为几个不同的站点提供服务,这些站点具有一个共同的管理面板(一个具有不同主题的页面要简化)。
这些“主题”中的每一个都有不同的需求。例如,虽然它们都显示服务列表,但其中一些也会显示相关图像。对于那些不喜欢的人,我宁愿避免使用数据库调用来获取它们(呈现页面的不同逻辑)。
在 Laravel(一个 PHP 框架)中,这将是视图作曲家的完美用途。
这样的系统在围棋中的设计是什么?
我在想某种“钩子”,每个主题都可以注册以运行函数来获取和添加特定模板的数据。有更好的方法吗?
我正在准备一个应用程序,它将为几个不同的站点提供服务,这些站点具有一个共同的管理面板(一个具有不同主题的页面要简化)。
这些“主题”中的每一个都有不同的需求。例如,虽然它们都显示服务列表,但其中一些也会显示相关图像。对于那些不喜欢的人,我宁愿避免使用数据库调用来获取它们(呈现页面的不同逻辑)。
在 Laravel(一个 PHP 框架)中,这将是视图作曲家的完美用途。
这样的系统在围棋中的设计是什么?
我在想某种“钩子”,每个主题都可以注册以运行函数来获取和添加特定模板的数据。有更好的方法吗?
如果您将服务对象列表传递给模板,您可以轻松地在模板中决定要显示的内容。如果您决定显示服务的图像,您可以调用ServiceObject.ImageURL()(然后会导致数据库调用)。如果您不调用此函数,则不会发出数据库查询。
使用pongo2模板引擎的示例:
{% for service in services %}
{% if page.theme == "simple" %}
<p>We don't show any image in the simple theme.</p>
{% else %}
{# This would lead to a database call and return the image path #}
<img src="{{ service.ImageURL() }}" />
{% endif %}
{% endfor %}
另一个想法是简单地为每个主题创建一个单独的模板(扩展通用基本模板);你没有检查模板内的主题。