六月 3, 2018 | 後端和Drupal

還再使用Feeds來處理資料匯入嗎? 用外部php script做資料處理,安全又方便!

用過Drupal的人都知道使用Feeds這個模組,功能非常強。但資料量很大的狀況下,很擔心網頁匯入到一半就timeout了,在設定上面也略顯複雜。若可以用外部的php撰寫匯入程式,方便又不擔心寫錯造成網頁噴錯,更重要的是,所有邏輯都可以用程式來直接完成,簡單方便又有彈性,還可以搭配crontab!

前言

是否大家都有處理過資料匯入的問題呢? 想必用過Drupal的人都知道使用Feeds這個模組,功能非常非常強。但是,如果資料量很大的狀況下,很擔心網頁匯入到一半就timeout了,在設定上面也略顯複雜。若是簡單的Drupal 網站匯入是還好,若是很複雜的資料包含一堆關聯性資料要匯入,相信你會設定到痛苦連天。因此,若可以用外部的php撰寫匯入程式,方便又不擔心寫錯造成網頁噴錯,更重要的是,所有邏輯都可以用程式來直接完成,簡單方便又有彈性,還可以搭配crontab。快來看看

讀取外部資料+寫入到網站

這裡我就用一個簡單的作法,主要會進行 1.讀取JSON資料。2.使用外部php script進行資料匯入。 D7與D8的作法稍微有些不一樣,可以再參考看看以下的範例。

Drupal 7 Version

/**
 * Root directory of Drupal installation.
 * Get the directory where this php is.
 */
define('DRUPAL_ROOT', getcwd());
//include all necessary inc
require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
require_once DRUPAL_ROOT . '/includes/common.inc';
require_once DRUPAL_ROOT . '/includes/module.inc';
require_once DRUPAL_ROOT . '/includes/file.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
//寫一篇文章
$node = entity_create('node', array('type' => 'article'));
$node->uid = 1;
$new_node = entity_metadata_wrapper('node', $node);
$new_node->title = 'test title';
$new_node->save();

Drupal 8 Version

define('DRUPAL_DIR', __DIR__ .'/web');
use Drupal\Core\DrupalKernel;
use Symfony\Component\HttpFoundation\Request;

$autoloader = require_once DRUPAL_DIR . '/autoload.php';
$request = Request::createFromGlobals();
$kernel = DrupalKernel::createFromRequest($request, $autoloader, 'prod');
$kernel->boot();

require_once DRUPAL_DIR . '/core/includes/database.inc';
require_once DRUPAL_DIR . '/core/includes/schema.inc';
require_once DRUPAL_DIR . '/core/includes/module.inc';
require_once DRUPAL_DIR . '/core/includes/entity.inc';

$node = entity_create('node', array(
        'type' => 'page',
        'title' =>'Creating another node',
        'langcode' => 'zh-hant',
        'body' => array(
        'value' =>'The body of the content',
        'format' => 'full_html',
        ),
        'uid'=>1,
    )
  );
 $node->save();

結論

用上面的作法,可以讓我們處理非常複雜的邏輯,並且可以搭配Crontab來自動化做很多資料的處理,是個非常好用且實用的作法:)