你在这里

Drupal 星球

01/18/2020 - 11:10 - Think in Drupal

作者:亚艾元技术部

与Drupal8整个前后端分离的项目中,我们经常遇到这样的问题:

Access to XMLHttpRequest at 'http://localhost/gdsy/user/login' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.


如果生成的静态html+js都放在一个域名下面,就不存在这个问题。域名不一样,这个问题由于浏览器的安全限制,就会存在。


cors : 跨域请求的问题。在Drupal8里面,...

01/18/2020 - 11:03 - Think in Drupal

作者:亚艾元技术部

我们开发了一个后端的nodejs程序,部署上线的时候,需要永久的运行下去。开始的时候,使用命令行工具启动,关闭命令行窗口的时候,程序就会关闭。为了解决这个问题,我们尝试了多种解决办法。


后台运行:

npm start &


加上&可以实现后台运行。


使用:

forever start server/index.js

但是这个启动以后报错,后台可见,我的代码目录设置的不对。


中间也尝试了使用pm2,同样报错,后来我尝试了先build一下,然后使用生成的代码运行:

npm run-script build


然后运行

pm2 start ecosystem.config.js


这次成功了。

...

12/18/2019 - 20:57 - Think in Drupal

作者:亚艾元技术部

我们在一个Nodejs项目中,使用了mongodb数据库,使用习惯和mysql很不一样,在摸索中前进,其中一个问题,mongodb安装完了以后,不用设置用户名密码,就可以登录使用。开始的时候,还是很方便的,最小化配置,不过随着项目将要上线,我们不能这样连一个密码都不设置,这样太不安全,实践了一下如何设置mongdb的密码。操作步骤如下:


 修改设置用户名,

 mongo  use admin    db.createUser({user:"admin",pwd:"mypassword",roles:["root"]})

 

 修改mongodb的配置文件mongod.cfg,增加:

 security:   authorization: enabled

  

...
12/13/2019 - 18:25 - Think in Drupal

作者:亚艾元技术部

在一个前后端分离的项目中,我们前端使用react + material UI, 后端使用KOA2+mongoose,当展示时间的时候,mongoose里面返回的时间格式是这样的:

2019-11-13T00:20:53.812Z

这个格式与想要的有差距,网上查找了一下,其中一个原始的办法是使用Date对象:

var st = "date in some format" var dt = new Date(st); dt.getMonth()

自己写一个辅助函数,也就可以了。

我比较了一下,发现有人给出了moment.js,查了一下npm的安装量,一周竟然有1000万,用户量还是很大的。看了一下文档,完全满足这里的需求,这次就用它了。

https://www.npmjs...

11/16/2019 - 17:23 - Think in Drupal

作者:亚艾元技术部

我们在项目中,遇到一个客户提出需求,想在节假日,使用红色风格的样式,在其他日子,使用蓝色的风格。经过研究,在Drupal8里面,可以这样实现。

 

首先修改主题的设置,增加一个风格设置,这里使用了skin。

function mytheme_form_system_theme_settings_alter(&$form, $form_state) {     $form['skin'] = array(     '#type'          => 'select',     '#title'     ...
11/15/2019 - 17:23 - Think in Drupal

作者:亚艾元技术部

Drupal8对ajax,模态框的支持非常友好,我们在客户的项目中,多次使用,为客户的项目提供了友好的用户体验。

客户想增加一个cancel按钮,点击cancel关闭模态框,我们是这样实现的,增加cancel按钮:


   if ($this->isDialog()) {       $form['submit'] = [         '#type' => 'submit',         '#value' => $this->t('保存'),  ...
11/15/2019 - 17:08 - Think in Drupal

作者:亚艾元技术部

Drupal8中集成外部用户系统,每种外部系统都有各种各样的接口说明的,有的是通用的,有的是专有的接口。对于很多开发商来说,头痛的是怎么将接口对接到Drupal上面。

下面是我们写的一段集成外部登录系统的核心代码,Drupal8部分的,非常好用。


首先外部系统会返回用户的ID,用户姓名。我们先根据这些信息查询一下用户是否存在,如果存在,直接登录,如果不存在,新创建用户.


function pki_login_user($id, $name) { $query = \Drupal::entityQuery('user');    $query->condition('field_identification', $id); $query->range(0,1); $uids = $query->...
11/15/2019 - 16:58 - Think in Drupal

作者:亚艾元技术部

在帮助客户构建网站的时候,想要实现一个页面,不同角色开到的内容是不一样的,我们使用前文中所属的办法,通过controller构建页面。在controller里面编写区块的控制逻辑,下面的代码片段是我们使用的一个例子

     use Drupal\user\Entity\User;               //获取到当前用户,明确的加载一下,这样可以使用hasRole  $user = User::load(\Drupal::currentUser()->id());      //如果具有角色,调用对应的区块 if($user->hasRole('editor')){   $block_id =...
11/15/2019 - 16:52 - Think in Drupal

作者:亚艾元技术部

对于Drupal8的数据库操作相关,根据需要,我们需要掌握,创建数据库表,数据库表的增删改查。Drupal8内置的动态查询。Entity Query。

   创建数据库表,参考例子,核心模块dblog的 install文件的

dblog_schema() {   $schema['watchdog'] = array(     'description' => 'Table that contains logs of all system events.',     'fields' => array(       'wid...
11/15/2019 - 16:48 - Think in Drupal

作者:亚艾元技术部

Drupal8中只包含不含其它角色用户的用户列表,就是说这些用户只是注册用户,没有分配其它任何角色。经过反复的测试,终于找到可以工作的代码:

我开始用entityQuery尝试了很多次,中间一度放弃,最后找到办法:

$ids = \Drupal::entityQuery('user') ->condition('status', 1) //->exists('roles') ->condition('roles', NULL, 'IS NULL')  //只包含普通用户的,已分配角色不包含 //->condition('roles', $other_role_ids,'NOT IN')  //用户不包含已有角色的 ->condition('uid...

页面