重定向

您可以通过添加 website_redirects 钩子来添加重定向。

可选字段 redirect_http_status 允许您指定用于重定向的自定义 HTTP 状态码——如果未指定,默认使用 301。

示例

website_redirects = [
    # absolute location
    {"source": "/from", "target": "https://mysite/from"},

    # relative location
    {"source": "/from", "target": "/main", "redirect_http_status": 307},

    # use regex
    {"source": "/from/(.*)", "target": "/main/\1"}
]

生成器

如果表(DocType)中的每条记录都对应一个网页,您可以设置生成器。

要设置生成器,您必须:

  1. 添加一个字段 route 来指定页面的路由
  2. 添加一个条件字段,用于指示页面是否可见。
  3. 在您应用的 hooks.py 的 website_generators 中添加该 DocType 名称。
  4. 从 frappe.website.website_generator.WebsiteGenerator 继承控制器(Controller)
  5. 为您的页面创建一个模板
  6. 为模板添加自定义属性(上下文)
  7. 自定义路由和列表视图

让我们通过一个示例来说明:

示例

1. 添加字段

我们在 DocType 中添加了 published、route 字段

注意: 字段 route 是必填项

2. 将网站生成器添加到 Hooks

由于 Job Opening 位于 erpnext 中,我们已将其添加到现有的生成器 hooks 列表中:

website_generators = ["Item Group", "Item", "Sales Partner", "Job Opening"]

如果您的 hooks.py 中不存在 website_generators 属性,请添加它!

3. 控制器

我们在 job_opening.py 的 JobOpening 类中添加了 website 属性

在 get_context 中,parents 属性将用于指示面包屑导航

from frappe.website.website_generator import WebsiteGenerator
from frappe import _

# subclass from WebsiteGenerator, not Document
class JobOpening(WebsiteGenerator):
    website = frappe._dict(
        template = "templates/generators/job_opening.html",
        condition_field = "published",
        page_title_field = "job_title",
    )

    def get_context(self, context):
        # show breadcrumbs
        context.parents = [{'name': 'jobs', 'title': _('All Jobs') }]

注意: 完成此操作后,您应该会在文档表单上看到“在网站上查看”链接。

4. 添加模板

在 erpnext/templates/generators/job_opening.html 中添加模板

{% raw %}{% extends "templates/web.html" %}

{% block breadcrumbs %}
    {% include "templates/includes/breadcrumbs.html" %}
{% endblock %}

{% block header %}

<h1>{{ job_title }}</h1>
{% endblock %}

{% block page_content %}

<div>{{ description }}</div>

<a class="btn btn-primary" href="/job_application?job_title=%7B%7B%20doc.job_title%20%7D%7D">
    {{ _("Apply Now") }}</a>

{% endblock %}
{% endraw %}

5. 自定义列表视图

如果您在控制器文件(job_opening.py)中添加一个 get_list_view 方法,您可以为列表视图设置属性

def get_list_context(context):
    context.title = _("Jobs")
    context.introduction = _('Current Job Openings')

网页表单

Frappe 提供了一种简单的方法,只需很少的配置即可为您的网站生成表单。这些表单可以是公开的(任何人都可以填写),也可以配置为需要登录,还可以通过私密请求链接提供访问。

创建 Web 表单

要创建 Web 表单,请在 awesomebar 中输入“新建 Web 表单”并按回车键。

  1. 输入标题
  2. 选择要创建记录对应的 DocType(文档类型)。
  3. 添加一些介绍(可选)。
  4. 点击“获取字段”按钮,从所选 DocType 中获取所有字段,或者为您的 Web 表单手动选择字段。
  5. 发布表单,即可开始使用。

自定义 Web 表单 →

私密 Web 表单请求 →

标准 Web 表单

如果您勾选“标准”复选框,系统将在 Web 表单的
module 中创建一个新文件夹。在此文件夹中,您会看到一个 .py 和 .js 文件,
可用于配置 Web 表单。这些文件需要随您的自定义应用一起
纳入版本控制。您可以在任何站点上安装此应用,
该站点便会安装此 Web 表单。

Is Standard 字段仅在开发者模式下可见。

门户角色

版本:7.1+

可以为网站用户分配角色,他们将根据其角色看到相应的菜单

  1. 可以在门户设置中设置默认角色
  2. 每个门户菜单项都可以关联一个角色。如果设置了该角色,则只有拥有该角色的用户才能看到该菜单项
  3. 可以为默认角色设置规则,这些规则将在钩子(hooks)上应用于默认用户

默认角色规则

例如,如果电子邮件地址与联系人ID匹配,则设置角色为客户或供应商:

default_roles = [
{‘role’: ‘Customer’, ‘doctype’:’Contact’, ’email_field’: ’email_id’,
‘filters’: {‘ifnull(customer, “”)’: (‘!=’, ”)}},
{‘role’: ‘Supplier’, ‘doctype’:’Contact’, ’email_field’: ’email_id’,
‘filters’: {‘ifnull(supplier, “”)’: (‘!=’, ”)}},
{‘role’: ‘Student’, ‘doctype’:’Student’, ’email_field’: ‘student_email_id’}
]

动态页面

您可以使用 Jinja 模板语言动态渲染页面。要查询数据,您可以更新传递给模板的 context 对象。

这可以通过添加一个与模板同名的 .py 文件(例如,为 index.md 添加 index.py)并定义一个 get_context 方法来实现。

示例

如果您想显示一个查看用户的页面,请在 www/ 文件夹中创建一个 users.html 和一个 users.py 文件。

在 users.py 中:

import frappe
def get_context(context):
 context.users = frappe.get_list("User", fields=["first_name", "last_name"])

在 users.html 中:

### List of Users

{% for user in users %}
 2. {{ user.first_name }} {{ user.get("last_name", "") }}

{% endfor %}

目录

您可以通过在新行中添加 {index​} 字符串来添加目录。

您还可以通过在 {} 中添加 previous 或 next 来添加上一页和下一页按钮。

显示目录

这是一个标题

你好,段落

目录:

{index​} 将渲染为页面的编号列表,但仅在 index.md 或 index.html 中有效。

此页面的 {next​} 将渲染为:

{next}

添加页面

要添加页面,只需在 www 文件夹中添加 .html 或 .md 文件。页面内容中只能包含正文,不能包含 and 标签。

您也可以编写 Markdown 格式的页面。

索引

文件夹中的第一个文件必须命名为 index.md 或 index.html。

系统需要存在其中任一文件,才能将该文件夹视为有效的页面构建目录。

Markdown

这是一个标题

这是一些页面内容
一个链接

页面链接的 URL 可以省略 .html 扩展名,例如 /home/link。

标题

如果未在特殊标签中指定,第一个 “ 块(如果存在)将作为页面标题。如果既没有 `

` 也没有指定标题,则文件名将作为标题。

添加 CSS

您还可以添加一个与页面同名的 .css 文件(例如,为 index.md 添加 index.css),该文件将与页面一起渲染。

特殊标签

  1. “ 将使页面以 Jinja 模板方式渲染。
  2. “ 将添加自定义标题。
  3. “ 将不在页面中显示面包屑导航。
  4. “ 将启用缓存(如果您使用了 Jinja 模板)。
    ==========================================================================================================================================================================================================================================================================================================================================================================================================

下单

您可以通过在文件夹中定义 index.txt 文件来指定索引中页面的排序方式。index.txt 文件必须包含该文件夹中页面的名称(不带扩展名),以指示其顺序。

例如,对于此文件夹,index.txt 的内容如下所示:

添加页面
排序
内容
上下文
构建

页面

您可以通过向网站的 /www 文件夹添加页面来创建您的网站。您网站的 URL 将与 /www 文件夹中页面的路径相匹配。

页面必须是 .html 或 .md(Markdown)文件。frappe 中的 frappe/templates/base_template.html 提供了基本的 HTML 模板。