扩展用户extended-users


用于前端的用户注册、登录、找回密码、个人中心等操作。

1. 安装:

在最新版2.4版已经集成了这个插件,默认是关闭的,具体文件在couch/addons/extended里。
文件中的“couch/addons/kfunctions.php”文件中的以下行来激活插件(新安装时会有一个名为kfunctions.example.php的文件——该文件应改名为kfunctions.php)- 我们的前端代码还会使用“会话”和“数据绑定表单”,所以也要激活它们。

require_once( K_COUCH_DIR.'addons/extended/extended-users.php' ); //激活用户插件
require_once( K_COUCH_DIR.'addons/cart/session.php' ); //激活会话插件
require_once( K_COUCH_DIR.'addons/data-bound-form/data-bound-form.php' ); //激活数据绑定表单

安装完成了。

2. 实现

我们的附件包带了一个具体的用户实现,把user文件夹放到网站的根目录,注意不是couch的目录,是要和它同级。
你会看到有五个写好的couch前端模板:

index.php  //用于扩展本地用户账户的主要模板,它会关联到后台的“用户”,且可以定义任意数量的自定义字段
login.php  // 登录界面,注意会替代系统默认的后台登录界面
lost-password.php  // 找回密码,会替代系统默认的找回密码页面
profile.php  // 这也是一个数据绑定表单的经典实现,用于编辑当前登录用户关联的克隆页面(包含"users/index.php")
register.php  // 注册页面,一个简单的Databound表单,可以创建"users/index.php"的克隆页面,因此,用这个必须先用index.php

用户账户(users/index.php)

这个模板就是couch的普通模板,显而易见,第一步我们必须注册它,用超级管理员登录后台后,再在前端访问它。
回到管理员面板,侧边栏应该会出现这个模板,如果没有出现,那是没有注册成功。
好了,有个默认页面,取消发布它。
目前,我们的用户模板准备好了,再创建用户账户前,还有最后一步:你会在“couch/addons/extended/”文件夹里找到一个叫“config.sample.php”的文件。把它改名为“config.php”。在文本编辑器
中打开它,并指定我们用户模板的名称(即“users/index.php”)作为“users_tpl”设置的值,具体如下:

// 所需模板名称
$t['users_tpl'] = '';
$t[''login_tpl'] = '';
$t['lost_password_tpl'] = '';
$t['registration_tpl'] = '';

修改为:

//所需模板名称
$t['users_tpl'] = 'users/index.php';
$t[''login_tpl'] = '';
$t['lost_password_tpl'] = '';
$t['registration_tpl'] = '';

注意,注册所有模板(users/profile.php除外),都是这2步。

1. 前端访问注册。
2. 然后再配置文件里添加。

请确保只有在模板已向 Couch 注册(即其名称出现在管理面板侧边栏)后,才在配置文件中指定模板名称。

最后,是时候看看“扩展”模块的实际操作了。

---------------通用的登录登出按钮,用于扩展用户插件----------------

<cms:if k_logged_in>
   <a href="<cms:logout_link />" class="uk-button uk-button-default">退出</a>
<cms:else />
   <a href="<cms:login_link />" class="uk-button uk-button-default">登录</a>
</cms:if>

 

最后一次以超级管理员的身份访问‘users/index.php’,让它接收我们对上面的配置文件所做的更改。
从我们的‘users/index.php’模板创建一个克隆页面。
您将看到它显示了模板中未定义的一些可编辑区域

会出现User界面  多了extends-user email, password, repeat password. 咱们可以新建多个用户账户。
同时你会发现,“用户”模块的账户也会出现在这里,因此,从某种意义上说,两者(即克隆的users/index.php页面和它自动创建的用户帐户)已经合二为一了。无论改变两者中的哪一个,变化都会同时出现在两者中。删除用户帐户则相关的克隆页面被自动删除(相反,虽然不会发生,即删除一个克隆页面将*不会*删除相关的用户帐户。这是为了防止宝贵的用户帐户意外删除而设计的。

如果,在这一点上,你仍然发现自己想知道为什么我们需要采取这种迂回路线,通过克隆页面访问用户帐户,请记住,这样做的全部范围的沙发的功能,例如,仅举几例
a.支持DataBound表单,允许普通用户从站点前端创建/编辑克隆页面
b.能够定义任意数量的自定义字段
c.可用cms:pages 标签切片和切片所有页面
d.“relations”功能将来自不同模板的页面关联起来
e. 就地编辑 in-place editing
-基本上所有迄今为止只适用于克隆页面,现在也适用于用户帐户。*加上*我们所知道的一切与用户帐户工作,从沙发的第一个版本(http://www.couchcms.com/docs/concepts/users.html),仍然有效。

继续,现在我们知道users/index.php模板的克隆页面已经为我们提供了真实用户帐户的句柄,我们可以实现其他模板了。接下来,让我们尝试使用databoundforms从前端创建(注册)用户帐户。

注册/激活账号(users/ Register .php):

正如我们对实现的第一个模板所做的那样,通过以超级管理员身份访问users/register.php来注册它。一旦它出现在admin-panel中,在‘couch/addons/extended/config.php’文件中指定它的名称,如下所示

// Names of the required templates
$t['users_tpl'] = 'users/index.php';
$t['login_tpl'] = '';
$t['lost_password_tpl'] = '';
$t['registration_tpl'] = 'users/register.php';

模板中的代码应该很容易理解,但我将指出其中的重要部分。
如前所述,该模板处理两个函数
A.从前端创建新的用户帐户(即为访问者提供“注册帐户”功能)
B.激活上面创建的帐户(如果我们选择在禁用状态下创建它们)。
创建一个新帐户只需创建一个常规的克隆页面,这是使用常规的数据绑定表单完成的。
如果你不熟悉数据绑定表单,请先看看数据绑定表单教程,本节完全建立在这个特性之上。

这就是定义DataBound表单的方式

<cms:form
    masterpage=k_user_template
    mode='create'
    ..
    ..

“create”模式指定提交此表单将导致从“masterpage”参数中指定的模板创建克隆页面。

说到这里,请注意‘masterpage’参数被设置为一个名为‘k_user_template’的变量。这实际上解析为“users/index.php”,即我们用来创建“代理”用户帐户的模板。为了代码可移植性,Couch获取配置文件中指定的模板的名称,并使它们作为变量可用。‘k_user_template’就是其中之一。其他可用变量:
k_user_login_template
k_user_lost_password_template
k_user_registration_template

接下来让我们看一下表单的主体。
您将发现,正如在dbf中所期望的那样,它由“绑定”字段组成。

DisplayName:<br />
<cms:input name='k_page_title' type='bound' /><br />
Email Address:<br />
<cms:input name='extended_user_email' type='bound' /><br />
Password:<br />
<cms:input name='extended_user_password' type='bound' /><br />
Repeat Password:<br />
<cms:input name='extended_user_password_repeat' type='bound' /><br /> 

‘extended_user_email’, ‘extended_user_password’和‘extended_user_password_repeat’字段是特殊的,因为我们没有在模板中定义它们- Couch自动将它们添加到users/index.php模板中。
让我们看看克隆页面的各个字段如何映射到用户帐户。

 

在编辑任何用户帐户时,‘extended_user_email’, ‘extended_user_password’和‘extended_user_password_repeat’映射到‘E-Mail’, ‘新密码’和‘重复密码’系统字段。
‘k_page_title’字段映射到‘显示名称’。
克隆页面中映射到用户帐户的其他字段是‘k_page_name’和‘k_publish_date’。
‘k_page_name’映射到‘Username’,而‘k_publish_date’有点不寻常,因为它映射到'Disabled' -这个想法是通过取消发布克隆页面,我们禁用相关的用户帐户。
我们不会在表单本身中使用最后两个字段,但稍后保存表单时将直接使用它们。
除了上面提到的系统字段之外,如果您选择在“users/index.php”模板中定义自己的自定义字段,那么这些字段可以作为“绑定”字段添加到表单中——这是常规的DBF内容。

与所有dbf一样,操作取决于表单的成功条件,其中我们使用cms:db_persist_form标记将提交的值推入克隆页面。在我们的模板中,这部分看起来像这样

<cms:db_persist_form
    _invalidate_cache='0'
    k_page_name = "<cms:random_name />"
    k_publish_date = '0000-00-00 00:00:00'
/> 

请注意‘k_page_name’被设置为上面的随机字符串的方式。
如上所述,‘k_page_name’将成为‘Username’,即可用于登录的字符串(连同密码)。显然,这应该是唯一的。但是,为什么我们要将它设置为一个随机值,而不是在表单中提供一个输入供访问者填写呢?

我们当然可以,如果我们愿意的话,提供一个“绑定”到“k_page_name”的字段,让访问者指定他唯一的帐户名。但是,请记住,每个用户帐户也要求一个唯一的电子邮件。这个电子邮件也可以用来登录,所以基本上现在每个用户将有两个唯一的值,可以用于登录-“名称”和“电子邮件”。

对于从前端创建的帐户,只使用电子邮件登录可能是一个好主意。所需的‘k_page_name’可以简单地设置为一个唯一的随机值,以满足Couch的要求。这就是我们正在做的。如果您的用例另有要求,请随意进行更改。

接下来,注意‘k_publish_date’日期被设置为‘0000-00-00 00:00:00’。
Couch使用这个特殊的日期来表示“未发表”的克隆页面。因此,我们正在创建的页面将处于未发布状态,如上所述,这将导致创建处于“禁用”状态的用户帐户。

在我们的代码中,按照公认的惯例,当访问者创建她的帐户时,该帐户不能立即用于登录。为了防止创建垃圾帐户,我们通过电子邮件向用户发送激活链接。只有当用户使用发送的链接访问我们的模板时,我们才能从帐户中删除“禁用”状态。

这是通过下面的代码部分完成的,我们使用‘cms:activation_link’标签来获取激活链接,然后通过电子邮件发送它

<cms:send_mail from="<cms:php>echo K_EMAIL_FROM;</cms:php>" to=frm_extended_user_email subject='New Account Confirmation' debug='1'>
    Please click the following link to activate your account:
    <cms:activation_link   frm_extended_user_email   />
    Thanks,
    Website Name
</cms:send_mail> 

随着电子邮件的发送,我们的模板设置了一个“会话变量”(即只在页面的一次刷新中可用的变量)来指示成功条件并重定向到自身(即刷新页面)。

<cms:set_flash name='success_msg' value='1' />
<cms:redirect k_page_link />

刷新后,开始模板的以下代码会感知上面设置的success_msg会话变量,并向用户显示相关消息

<!-- are there any success messages to show from previous actions? -->
<cms:set success_msg="<cms:get_flash 'success_msg' />" />
<cms:if success_msg >
    <div class="notice">
        <cms:if success_msg='1' >
            Your account has been created successfully and we have sent you an email.<br />
            Please click the verification link within that mail to activate your account.
            ..
            ..

这就完成了用例的第一部分(即注册)。
第二部分(即激活)将在用户使用我们发给她的激活链接访问该模板时启动。

我们使用cms:process_activation标签处理这个激活部分,如下所示

<!-- is the visitor here by clicking the account-activation link we emailed? -->
<cms:if action='activate' >
    <h1>Activate account</h1>
    <cms:process_activation />
    ..
    ..

现在您应该熟悉了成功消息的设置和随后的重定向。
这就完成了我们对‘users/register.php’模板中的代码的浏览。
接下来,我们通过“users/ Login .php”实现“登录/注销”功能;

登录/注销(用户/ Login):