如何實作一個 widget

  Automattic 發表了一個 widgets plugin ,他是可以讓使用者用很簡單的拖拉就可以設定你的 siderbar 所顯示的內容,並且可以選擇順序和是否顯示。這對多人使用的 lyceum 來說是非常方便,就不用再為每個人修改不同的 themes 。也不用為了某個 plugin 去增加任何一行的程式碼。

  我就以我上次修改的 Brian’s Latest Comments 為例,所要顯示於 siderbar 的內容,當然就使用原先在 plugin 寫好,我們並不用去修改他,就只要增加 widget 的元件部份的程式碼就可以了。下面是一段的範例:

下载: example.php
  1. <?php
  2. function widget_blc_init() {
  3.   // 檢查看看是否啟用 widget plugin
  4.   if ( !function_exists('register_sidebar_widget') )
  5.     return;
  6.  
  7.   // 這是取一個 widget 名字
  8.   function widget_blc($args) {
  9.    
  10.     // 這邊是 widget 傳進來的各種參數,通常是  before_widget, before_title,
  11.     //  after_widget, 和 after_title 的陣列。
  12.     extract($args);
  13.  
  14.     // 取得我在設定的內容
  15.     $options = get_option('widget_blc');
  16.     $title = $options['title'];
  17.     $account = $options['account'];
  18.  
  19.     // 這一行是顯示一個 siderbar 前面的 li 之類的,簡單來說就是 title
  20.     echo $before_widget . $before_title . $title . $after_title;
  21.     // 這一行就是直接呼叫 blc 的內容來顯示。
  22.     blc_latest_comments();
  23.     echo $after_widget;
  24.   }
  25.   // 註冊並在 widget 設定畫面的 title
  26.   register_sidebar_widget('Brian\'s Latest Comments', 'widget_blc');
  27.  
  28.   // 設定 widget 的畫面大小
  29.   register_widget_control('Brian\'s Latest Comments', 'widget_blc_control', 300, 100);
  30. }
  31. // Run our code later in case this loads prior to any required plugins.
  32. add_action('plugins_loaded', 'widget_blc_init');
  33. ?>

  這樣就可以很簡單的產生一個 widget 了。當然如果你要寫有關設定的話你必須再寫一個 function 。如下所示:

下载: example1.php
  1. <?php
  2. function widget_blc_control() {
  3.  
  4.     $options = get_option('widget_blc');
  5.     if ( !is_array($options) )
  6.       $options = array('title'=>'Msn account', 'account'=>'','show'=>'');
  7.         // 這邊是把你所設定的內容寫入,當然目前我沒有實作他
  8.     if ( $_POST['blc'] ) {
  9.       update_option('widget_blc', $options);
  10.     }
  11.  
  12.     // Be sure you format your options to be valid HTML attributes.
  13.     $title = htmlspecialchars($options['title'], ENT_QUOTES);
  14.     $buttontext = htmlspecialchars($options['account'], ENT_QUOTES);
  15.    
  16.     //這邊是顯示你要設定的widget 畫面
  17.     echo '<p style="text-align:right;"><label for="blc-title">Title: <input style="width: 200px;" id="blc-title" name="blc-title" type="text" value="'.$title.'" /></label></p>';
  18.     echo '<input type="hidden" id="blc-submit" name="blc-submit" value="1" />';
  19.   }
  20. ?>

  希望大家能盡量的多作一些有用的 widget 來為民服務,如果有任何想要作成 widget 的 plugin 可以通知我,我可以協助完成。

 

google adsense