用于在Drupal中创建内容的示例Web服务

时间:2015-06-16 06:56:06

标签: drupal

我想使用现有的Drupal服务,使用ajax调用从独立插件在drupal站点上创建内容。任何人都可以提供详细信息......?我可以使用任何网络服务。

1 个答案:

答案 0 :(得分:0)

好吧,我觉得我理解你足以尝试答案;遗憾的是,它可能不是您正在寻找的答案,因为您似乎想要使用oAuth对管理员进行身份验证,而不是使用标准Admin API登录。您会注意到几乎没有oAuth登录模块支持这种类型的管理员身份验证(我一直在使用:https://www.drupal.org/project/gauth) - 实际上它将是对Drupal核心API的一个巨大修改,而不是对它的扩展,所以我和#39; d担心使用任何尝试过的东西。

在我们开始讨论之前,我高度建议完全停用用户#1并使用具有管理员权限的其他用户来执行您的管理操作。有关您应该执行此操作的更多信息here

你说:

  

用户可以使用他们的drupal网站使用扩展程序进行内容管理,而无需通过网站登录网站

但是,无论如何,你看一下你的用户需要进行身份验证,否则你怎么能相信他们应该以管理员身份发帖?您会注意到Drupal使用会话数据来保持用户会话活跃。我们来看看一个cookie的示例,它为您提供管理员访问权限:

cookie                                  value                                           domain                  path    expires                     HTTP
SESS92fe1e89dd2d30d5c7ef053b44d061s5    bJzbNlFKnbwvoTOH8A1XBWHipcRPnC32wOBdAJiEmJg     example_domain.com      /       2015-07-09T21:46:07.841Z    true

我在一秒前创建了这个cookie,因此您可以看到,默认情况下,Drupal管理员cookie在用户计算机上保持有效不到一个月。将此会话数据提供给您的应用程序的方法有多种,最简单的方法就是使用<iframe>包装器。 iframe登录 DO 与Drupal一起使用并在此处进行了测试:http://jsfiddle.net/z1rrj4ky/

只需创建自己的自定义登录页面和模块,就像扩展程序的其余部分一样。将管理员cookie返回到您的应用程序后,您甚至不需要Drupal管理主题页面来发布内容。您只需要包含它们就可以访问Drupal API函数。快速实现这一目标的一种方法是在本地安装Drupal到具有目标服务器数据库的应用程序。您可以通过修改位于<drupal_root>/sites/default/settings.php的设置文件来设置要与目标数据库链接的扩展数据库,或者在某些情况下:<drupal_root>/sites/default/default.settings.php如果您需要访问多个数据库您不需要多次安装Drupal,只需更改environment var或根据来自var的{​​{1}}重新定义设置。

一旦完成所有设置,您就可以随心所欲地提供内容发布页面。如果您不想使用自定义主题使用Drupal Admin界面,只需以编程方式创建内容并随意提供 - 即使是在Drupal根文件夹之外。

例如:

constants

一旦您验证了用户具有发布和编辑权限,并且您反对使用带有自定义主题的原生管理包装器,您就会发现有很多教程可以告诉您如何以编程方式创建或编辑内容;例如 - https://www.drupal.org/node/1388922向您展示如何以编程方式创建节点。

<强>回顾:

  • 禁用用户#1并使用其他管理员帐户
  • 使用iframe进行身份验证,如果您真的反对它,则可以使用扩展程序中的oAuth进行身份验证,使用令牌成功回调发布到从散列SQL表条目发布// get access to Drupal API functions from outside of Drupal // This example assumes a sibling directory to the Drupal directories // it can be easily modified to instantiate from directories much // further away or deeply nested $path = $_SERVER['DOCUMENT_ROOT']; $base_url = 'http://'.$_SERVER['HTTP_HOST']; chdir($path); define( 'DRUPAL_ROOT', getcwd() ); require_once './includes/bootstrap.inc'; require_once DRUPAL_ROOT . '/includes/common.inc'; require_once DRUPAL_ROOT . '/includes/module.inc'; require_once DRUPAL_ROOT . '/includes/unicode.inc'; require_once DRUPAL_ROOT . '/includes/file.inc'; require_once DRUPAL_ROOT . '/includes/session.inc'; drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL); // now you can use all drupal functions: // For example, let's check if current user is admin: global $user; $user_array = (array) $user; if ( array_key_exists ( 3, $user->roles ) ) { $user_type = "admin"; // admin to save the day! } else { $user_type = "user"; // not an admin, can't post or edit content doh! } environment variables的其他页面auth Drupal管理员没有用户看到它。如果你这样做肯定哈希包含或环境变量或其他。
  • 通过修改constants文件夹中的settings.php确保您的本地扩展版Drupal与目标网站的数据库相连接
  • 一旦您经过身份验证和验证,您就可以连接到正确的数据库,您可以使用自定义主题使用本机Drupal界面发布或编辑内容,或者使用上述代码的调整来引导Drupal从项目中的任何位置实例化D6或D7 API。

好运!