跳转到主要内容
首页

用户帐户菜单

  • 登录

主导航

  • 首页
  • 小公司运营
  • 网站建设
  • 创业杂谈
  • 兼职赚钱
  • 小微企业信息化
  • 手册教程
    • 《大伟哥的Drupal 8建站指南》
    • 《通过JohnChow.Com在网上赚钱》
  • 关于

面包屑

  • 首页
  • Drupal 8/9 让某个字段仅对注册登录用户显示

Drupal 8/9 让某个字段仅对注册登录用户显示

By 大伟哥 | 2020-09-18,周五, 10:01
登录后可见字段内容

大伟哥最近做行业站的时候,有个需求,是希望注册用户在网站上填写的个人联系方式如手机号码、QQ号码等,只对网站的处于登录状态的注册用户可见,而对于搜索引擎和匿名访客,则不显示这些字段信息。这样的话,一方面可以在一定程度上保护用户的私人信息,另一方面也能够激励访客注册成为会员,增强网站的互动性。

Drupal群里的热心网友给出了两个实现方法,一个是使用 field permissions 模块,另一个是直接使用字段的主题覆写实现。

大伟哥首先试用了 field permissions 模块,这个模块把Drupal的权限管理粒度从默认的节点级权限下放到了字段级,允许管理员对任意实体的不同字段分配不同的权限给不同的角色用户,经过设置,完全可以实现对未登录用户隐藏指定字段内容的目的。

然而,field permissions 的字段隐藏,是该字段的标签和值一起隐藏,对未登录的匿名用户来说完全看不到有这项内容。

但是大伟哥还想再多实现一点,让未登录的匿名用户,看到的是“手机号码:登录后可见”这样的样式。也就是说即使不登录,也能看到有这么一项,只是内容需要登录后才可以查看。如此一来,是不是会让访客有那么一刹那产生一点注册成为会员的冲动呢?

经过测试,这个需求可以通过简单的主题覆写实现。思路就是在该字段的twig模版里加一个判断,看看当前的访客是不是已经登录了,如果是登录用户,就直接输出字段标签和字段值,如果是匿名用户,就输出字段标签加上登录后可见的提示。

以下是具体操作步骤:

1.找到原来负责展示该字段的twig模版,并用新的twig文件覆写。这个通过可以开启twig debug功能实现。大伟哥这里要改的是用户字段,经过debug查看,发现当前字段是由core/themes/classy/templates/field/field.html.twig控制输出的,而且模版覆盖的顺序如下:

<!-- FILE NAME SUGGESTIONS:
   * field--user--field-mobile_phone--user.html.twig
   * field--user--field-mobile_phone.html.twig
   * field--user--user.html.twig
   * field--field-mobile_phone.html.twig
   * field--integer.html.twig
   x field.html.twig
-->

本着最小化影响的原则,大伟哥复制web/core/themes/classy/templates/field/field.html.twig这个文件到自定义主题的template目录,并更改文件名为field--user--field-mobile_phone--user.html.twig,完整文件路径为:document_root/web/themes/custom/theme_name/templates/field--user--field-mobile_phone--user.html.twig

2.修改field--user--field-mobile_phone--user.html.twig文件,在输出字段的地方加入{% if logged_in %}判断并保存:

  <div{{ attributes.addClass(classes) }}>
    <div{{ title_attributes.addClass(title_classes) }}>{{ label }}</div>
    {% if multiple %}
      <div class="field__items">
    {% endif %}
    {% for item in items %}
      {% if logged_in %}
        <div{{ item.attributes.addClass('field__item') }}>{{ item.content }}</div>
      {% else %}
        <div{{ item.attributes.addClass('field__item') }}>登录后可见</div>
      {% endif %}
    {% endfor %}
    {% if multiple %}
      </div>

3. 将该文件原样复制并重命名,可以覆写其他需要同样操作的字段。

4. 清除Drupal 缓存, 让新的twig模版生效。以匿名用户的身份打开网页,效果是这样的:

登录后可见字段内容

总结:

1. Drupal 牛掰, Drupal Yes.

2. Twig 牛掰, Twig Yes.

3.大伟哥牛掰,大伟哥YES.(手动狗头,捂脸,逃……)

网站建设
  • 添加新评论
  • 279 阅读
Drupal

Book traversal links for Drupal 8/9 让某个字段仅对注册登录用户显示

  • ‹ 给Drupal安装后台搜索服务xunsearch
  • 向上
  • Drupal Commerce 电子商务方案指南 ›

评论

歇后语大全

4 years 8 months 之前

永久连接

大伟锅真是国内drupal骨灰级砖家兼布道者。

  • 回复

添加新评论

此字段内容将保密,不会被其他人看见。
关于文本格式
  • 不允许使用HTML标签。
CAPTCHA
1 + 2 =
计算出这道简单的算术题并键入答案。例如、1+3,就输入 4。
发布评论前,请通过下面的验证,以免被当作垃圾评论机器人屏蔽。

搜索

手册导航

  • 网站本地测试开发要尽量使用linux环境
  • Ubuntu Server 16.04安装LAMP网络服务器套件
  • 在测试机上配置Apache服务器下的第一个虚拟主机
  • 在测试服务器上安装第一个Drupal网站
  • Drupal 8/9安装及配置中文语言包
  • Ubuntu Server下启用Apache Rewrite模块
  • drupal 8小版本间升级详细说明
  • Drupal 8多站点实现:使用一套Drupal代码运行多个不同网站
  • Drupal 8网站迁移的步骤和注意事项
  • Drupal 8设置信任主机
  • 安装Drupal 8后除了首页外全是not found
  • Drupal 8解决5次输入密码暂时锁定帐号登录
  • 使用Drupal的SMTP模块发送邮件
  • Drupal怎么进行分类和创建栏目?
  • 使用composer安装Drupal及管理依赖(一)
  • 新安装的Drupal 8默认能实现什么功能?
  • 给Drupal8/9网站添加基本页面
  • 让Drupal 8/9显示内容最近编辑时间
  • 给Drupal安装后台搜索服务xunsearch
  • Drupal 8/9 让某个字段仅对注册登录用户显示
  • Drupal Commerce 电子商务方案指南

沪ICP备17000093号-1

公安备案沪公网安备 31011402008254号

© 2016-2022 大伟哥博客版权所有