由 Aloha 到 CKEditor

譯自:http://buytaert.net/from-aloha-to-ckeditor

夏天的時候我們公佈過 Drupal8 會使用 Aloha Editor
主要的原因是 Aloha 是唯一的支持行內修改(inline edit) 的 WYSIWYG 編輯器
以達到我們行內修改的願景
Aloha 的開發者一直都對 Drupal 有關的要求非常上心
但因為Aloha的目標是建立一個真正的WYSIWYG 編輯器
我們就碰到一些有關在後台使用Aloha時,使用者體驗的問題(而Aloha 的開發者一直努力致力改善中)

而另一方面,在夏天的公告之後
CKEditor也公佈了它們最新的版本
也提供類似 Aloha 的功能
Frederico Knabben,CKEditor 的作者也會提供一切可能的支持
令 Drupal 和 CKEditor 可以整合
他們已經建立了一個可靠的原型版本去和 Aloha 的 block system 競爭
再加上 API ,文檔,開發者的氣氛等多個的角度比較
又有數天的研究多個星期的討論
得出 CKEditor 才是現在最合適的選擇

所以,我們會將 Drupal 8 的預設編輯器從 Aloha 轉到 CKEditor
令我們有一個更成熟的編輯器
和更多的資源轉回 Drupal 的編輯核心開發上
CKEditor 的團隊會修改功能上的缺失
並會在未來的兩個版本發佈之內完成修正

這些最後一分鐘修改的決定一點都不容易
但我們都是為了完成一個最好的 Drupal 版本
我在此感謝 Aloha 團隊的努力和 CKEditor 在研究階段的幫忙
但都不要忘記 Aloha,它仍然為未來的網頁開發帶來很多的可能性

升級到 Drupal 7!

花了6個小時的時間:
打包 live site,在 local 重製相同環境
關掉 local contributed modules
maintanence mode
在 local 一步步將 Drupal core 升級到 7.x 版本
修改客製 theme 至相容於 Drupal 7
contributed modules 升級到 7.x 版本
contributed modules 的新設定
使用 cck 7.x 版本的 content migrate 將 cck fields migrate 到 7.x 的 core
打包 local
再備份 live
轉移 local 到 live
大功告成!

對於大家來說應該是完全沒有分別的
我在轉移到 live site 大功告成的時候都迷了一下
「咦?完成了?外觀上完全一樣麻」
直到打開管理頁面看到 seven 這一個 theme 才完全確認真的完成了

下一步應該是打開多語言選項
將中文為主的 blog 改為雙語
擴大 SEO 和讀者層
2013 GoGoGo!

Ubercart 客製化

最近在做一個 ubercart 的 customization
主要是管理頁面有新的選項和結賬的時候橧加一組必填資料
是 Drupal 6 的客製化,而在 Drupal 7 和 commerce 的出現之後
其實這些都不太重要了
但不記錄下來的話便會更加浪費
所以還是簡單的記錄一下

管理頁面新的選項
例如在 /admin/store/orders/1005243/edit 增加一組 form 元素
hook_order_pane 定義 pane
傳入 callback,最後當然是返回 form API 定義:

<?php
/**
 * Implementation of hook_order_pane().
 */
function hook_order_pane() {
 
$panes[] = array(
   
'id' => 'example',
   
'callback' => 'example_pane',
   
'title' => t('Example'),
   
'desc' => t('Select'),
   
'class' => 'pos-left',
   
'weight' => -1,
   
'show' => array('view', 'edit'),
  );
  return
$panes;
}

/**
 * Handle delivery date and time on order pane
 */
function example_pane($op, $arg1) {

  switch (
$op) {
    case
'view':
      return
'Example';
    case
'edit-form':
     
$form['driver']['driver_id'] = array(
       
'#type' => 'select',
       
'#title' => t('Select'),
       
'#default_value' => 0,
       
'#options' => $options,
      );
      return
$form;
?>

以上代碼輸出一個新的 select 到修改 order 表單
但記錄到 database 的部份還需要以下代碼:

<?php
/**
 * Implementation of hook_order().
 */
function hook_order($op, &$arg1, $arg2) {
  switch (
$op) {
    case
'save':
     
db_query($sql);
      break;
  }
    case
'load':
     
$result = db_query($sql);
      if (
$data = db_fetch_object($result)) {
       
$arg1->example['key'] = $data->example;
      }
      break;
}
?>

以上三個 hook 便可以簡單新增一個管理者專用的 dropdown
可以記錄例如送了貨沒有,簡單的客戶回應等等
下一篇續說明一下結賬時新增表單的 hooks

p.s. 話說真的應該花點時間將這個 blog upgrade 到 Drupal 7 了

SQL in keyword, db_placeholders()

處理基層的 sql 時候遇到問題
但 Drupal 的 database abstraction layer 的文檔實在是太簡單 http://api.drupal.org/api/drupal/includes!database.inc/group/database/6

特別是複雜的 case,例如 IN:
例如找出已發佈的,類型為 Page 或 Story 的 node:

<?php
$sql
= "SELECT * FROM {node} WHERE status = '%d' AND type IN (".db_placeholders($types, 'varchar').") ";

$r = db_query($sql, array_merge((array)$status, $types));
?>

db_placeholders 預設是傳為 int
要傳入 varchar 則要提供等二個參數
而最後使用 db_query 的時候要使用 array_merge
因為 $types 本身是一個 array
而 db_query 則不可以傳入 array of array
所以使用 array_merge 傳入一個一維的陣列

Drupal 8 預定!

Drupal 8 會在 2013年2月停止併入新的功能
正式進入 alpha階段,然後7月進入 beta
現在我們差不多可以看一看,預現一下 Drupal 8 功能上的特點了
Drupal 8當然不會只是一個版本上的數字改變
而無論作為一個內容管理系統的角度
或者開發框架的角度
Drupal 8 都會是一個大躍進

我們或者不能比較究竟是內容編輯還是程式開發者會更感受到新系統的不同
但可以肯定的是,最能感受到的就是廣大的一般使用者了
例如更簡單的修改內容介面,更好的支持手持裝置

建立內容和修改會變得非常容易
不再需要訓練或者工作坊,直觀的介面令使用者可以簡單的修改內容
這都要多得 http://drupal.org/project/spark 這一個發行版本在這方面的努力
這個發行版本的最終目的是令使用者可以在頁面上隨便點擊想要修改的地方立即修改
而不需要進入另一個「管理介面」
可以稱得上為「最自然的」修改方法
spark 計劃的頁面有一段很好的介紹影片
就算只是簡單的一兩個欄位你都可以感受到它的威力

手持裝置
Drupal 8 可以說是為手持裝置從 core 的角度重新思考一次
無論是一般電腦還是螢幕3吋的手持裝置都能得到很好的支持
響應式的設計令不同大小的螢幕都可以清楚瀏覽網站上的文字圖片
再加上管理介面也支持手持裝置
例如你看到一個新的留言想發佈
但你手上只有你的手提電話
Drupal 8 令你的發佈過程在手持裝置上一樣很順暢
不需要放大縮少頁面便可以提交發佈內容

HTML5 和效能
隨著名HTML5 的普及
Drupal 8 會完全支持HTML5,並帶給Drupal 8 更豐富的功能
core 上的 form API, validation 等等都支持HTML5
而其中又有一部分的工作放了在前台的渲染效能上
令頁面的反應更快,動畫更流暢

Web services
Drupal 8 會提供一個標準的方案使其他第三方可以和內核溝通
情況和 facebook apps 類似
提供高可用性,高效能,非頁面的回應
再加上 restful api 的工作,令Drupal 能更好的和其他系統互動

其他
還有設定管理方面
現在的方式是使用 features 模組
但遠遠不夠全面
Drupal 8 會從內核的角度根本性的解決這個問題

當然還有 views 合併到內核
這個工作才剛開始,但已經有 API 可以使用
但還需要將現有的管理頁面全部改到使用 views API
自此兩大模組 cck 和 views 都合併到 core
令 Drupal 「work out of the box」

這些都只是 Drupal 8新功能的冰山一角
社群裡的開發者仍然日已繼夜的完善和新增 Drupal 8
當然,你也可以成為其中一個份子!

Pages

Google