Drupal Migrate user pictures 的小小心得

-
Free tags: 

(Migrate 2.5, D7):

  • 建立一個 UserPictureMigration class (你會看到 file_managed table 有新增行數)
  • 在 UserMigration class 中的 prepare(), 用 $this->handleSourceMigration('UserPicture', $row->uid);指定 UserPictureMigration 中的 fid
  • 使用正常的用戶頭像上載的話 file_usage table 會新增紀錄。你可以自己在 complete() 和 completeRollback() 手動補上

又花了兩日的時間:
$this->addFieldMapping('picture')->defaultValue() 傳入 int

public function prepareRow() 會顯示路徑, 但唯讀
最後在
public function prepare() 傳入 fid

http://drupal.org/node/1349632#comment-7348466

Raspberry Pi 上的 command line 生活

Raspberry pi 都可以做「安裝 linux 」以外的東西的
但你需要先熟習一下完全使用命令行的環境
官方建議的操作系統 - raspbian 預設是不會打開圖形介面的
而且沒有圖形介面之下,電路版「冷靜」了,也很穩定

現在的用途如下
1. 網路接入接橋
2. 命令行瀏覧器
3. 硬體開發平台

因為功耗低,長期啟動的 rpi 成為一個可行的接橋
從街外先連到 rpi, 再接橋到其他系統,裝置
網路安全便會小量提升,又可以如常連接到其他系統
在行動裝置上 ssh rpi 再到伺服器重啟,簡單調整都很方便
Android ssh keyboard

也發覺命令行上的瀏覧器也有可用的地方
建議使用 w3m 而非 lynx,更好的支持中文
(細階 o 可進入設定)

最後是一個快速硬體開發平台, SPI, IIC, GPIO 加上可用python, linux, over LAN
不再需要使用 USB 連接 arduino ,compile. I HATE COMPILE.
將會再分享 rpi 上設定 SPI 的方法

AttachmentSize
ws3m joetsuihk-com.png129.3 KB

Custom Views argument Validator: views_plugin_argument_validate

views_plugin_argument_validate
Views 的 argument 是一個非常好用的 filter,
同一組 views 的顯示,條件但應用不同的內容類型,或者作者,或者建立日期等眾多的應用都可以體現到 arguments 的強大之處
而且還可以為 arguments 驗證,符合某些條件才會通過
例如 node 一定要是某個內容類型之類的

這次的需求是,Views 的 argument 傳入日期,例如 frontpage/20130320 就顯示三月二十日的內容
但這個 Views 只會提供七日前的內容,七日之後這個 Views 便會返回 403,存取權限不足 (單一 Node 的存取不在此限)
所以便寫了以下一個自定義的 argument validator:

<?php
//example.module 先提示 views 這個模組有使用 views 的 api:
function example_views_api() {
  return array(
   
'api' => 3.0,
   
'path' => drupal_get_path('module', 'example') . '/includes',
  );
}
?>

<?php
//includes/example.views.inc
//MODULENAME.views.inc 定義一個客制的 argument validator
function exmaple_views_plugins() {
  return array(
   
'argument validator' => array(
     
'days_limit' => array(
       
'title' => t('7 days limit'),
       
'handler' => 'example_plugin_argument_validate_7_days_limit',
       
'path' => drupal_get_path('module', 'example') . '/includes',
      ),
    ),
  );
}
?>

handler 會自己有一個檔案,需要在 example.info 中定義:

files[] = includes/example_plugin_argument_validate_7_days_limit.inc

真正實現的代碼:

<?php
//example_plugin_argument_validate_7_days_limit.inc
class example_plugin_argument_validate_7_days_limit extends views_plugin_argument_validate {

  function
construct() {
   
parent::construct();
  }

  function
validate_argument($argument) {
    global
$user;

    if (
in_array('administrator', $user->roles)) {
      return
TRUE;
    }

    if(
is_numeric($argument)) {
     
// as the argument is in form of CCYYMMDD, validate it should be no more than 7 days ago
     
$date = strtotime($argument);
     
$days_ago = strtotime("-7 day");
      if(
$days_ago < $date) {
        return
TRUE;
      }
    }
    return
FALSE;
  }
}
?>
AttachmentSize
views_plugin_argument_validate.png19.16 KB

Drupal 8 CMI 設定管理

譯自 http://heyrocker.com/cmi-feature-freeze

我發現新功能凍結的期限已經過去了,正是一個好的時候更新一下大家設定管理大綱 (CMI)的近況了
TL;DR
CMI 的近況是非常好。我為此感到非常的驚喜和自豪,我們百人以上的合作者在過去兩年一起完成的工作。我們已經完成了全部的主要功能開發,沒有遺漏兩年前定下的目標。當然我們還有很多工作,特別是測試和文檔的部分。

Overview
兩年前我們開始的時候,我心中有一個大概的目標的:

  • 將各種設定儲存在一個機器可讀的檔案,使其可以使用版本控制系統管理不同服務器環境
  • 提供一個 API 處理設定的修改,和一個基本的介面執行這些更新
  • 核心完全使用這個系統
  • 多語言系統的支持
  • 為開發者和使用者提供使用文檔

這看起來很少,但又非常多。現在功能凍結的期限已經過去了,可以看看這些目標的完成度如何

將各種設定儲存在一個機器可讀的檔案
這已經完成了,而且已經完成了一段時間。這個系統自第一個提交 (commit) 之後經過非常多的修改,包括一次大型的結構修改,由 XML 改為使用 YAML。但對外的 API 就一直幾乎沒有改變過。

核心的更新和介面
雖然 API 的接口很早已經定下了,但一些核心最複雜的部分還沒有完成,包括欄位和內容類型 (fields and node types) 還沒有非常完整地完成測試。這其中有一個可能令這個測試會帶來更多有關依賴關係的問題,有需要的話我們會處理。除了這個以外,還有一些需要幫忙和參與的:

介面在上年的大一月的 BADCamp 完成了,那是一個很基本的介面,但它給用戶看到有那些設定已經準備好匯入,可以一個按鈕就完成匯入。另外的一些條目正在進行中,目的是令介面整合更多功能。

核心完全使用設定系統
這個工作其實在上年 DrupalCon Denver 的時候已經開展,而且進度很好。其中一個比較大的問題是使用新的 ConfigEntity 處理比較 “即時” 的設定例如 Views, Fields, or Roles。一般的轉換圍繞三個區域:

這些是特別需要留意的:

我個已經完成了 80﹪的核心轉換,我覺得非常自豪和滿意。特別一提,Views 自從第一日提交到核心便已經完全使用 CMI

多語言和翻譯
這是整個 CMI 中最困難的部分。我們花了很多時間去找出一個可行的方案,而代碼花了更多時間才提交。但因為時間的問題,其中一些功能會對 D8MI 幫助很大的功能,例如管理設定的整合等,都放棄了。但現在看來我們差不多囡完成了。

加入了 context 系統令設定可以基於 context 修改,例如語言,或者 Domain Access
一個設定的 schema 系統提供可翻譯的設定。這個正在進行中,可以到 http://drupal.org/node/1910624 追蹤和參與
設定的 schema和 locale 模組的整合, 進行中 (http://drupal.org/node/1905152)

文檔
當然,這個部分通常都留到最後。但現在正是時候認真的開展這個工作了。我們有一個為開發者而設的 handbook 頁面,但它已經嚴重過時了。但由 Gábor 編寫的 schema and context 就完成度很高。
除了技術文檔,我們也需要一個一般使用者的文檔或者使用手冊,針對簡單使用和進階使用。我希望有經驗的技術作家可以帶領這個工作,所以如果你知道誰有興趣的話,請聯繫一下

進階題目
現在有一個激烈的討論有關模組安裝的時候設定的處理,和一個基本的問題,“誰擁有這個設定檔?” 其中一個經歷例子是 node.module 為 Drupal 主頁提供一個頁面 (View) ,這究竟是 node 還是 views 的設定?如果 node 卸除了,那個 views 怎麼辦?這個問題的詳細討論 (http://drupal.org/node/1776830) 這是餘下的一個最大的結構問題。現在我們是暫停了,直到我們為卸除的模組的處理定案為止 (http://drupal.org/node/1199946)

  • url 別名設定,包括一些關於何為設定何為內容的討論
  • 還有一些關於內容發佈,CMI 的討論
  • UUIDs 現在是每一個 entity 的一部分,令開發環境和上線環境之間可以連接起來,不用理會那連續遞增的 ID
  • 核心可以交互串列化冖後的 Entities

核心通過 REST 模組,也會支持基本的 CRUD 功能。所以提供一個完整的多環境發佈的基本的條件已經齊備,縱使其中一些部分不會完全包含在核心組件之中,但我覺得這不是一個問題。

參與其中
整合的預計期限是 2013年7月1日。那之前會有三個大型的 sprints:

感謝贊助
值得一提的是,我的工作都是由 ChipIn 的贊助者捐助的,還有以下的公司:

Acquia
Riot Games
Bluehost
Dennis Publishing
Pantheon
WebEnabled
Reload.dk
Annertech
Comm-press GmbH
Undpaul.de

感謝他們的支持,我會在 post-feature-freeze 之後再更新贊助和進度的

當然還要感謝每一個參與和提交代碼的貢獻者。將這個計劃帶到核心絕對是一個嘔心瀝血的工作,這絕不容易但我們已經完全得很好了。我為 CMI 最終整合到核心感到非常興奮。

Pages