客製自定義 feeds tamper plugin

feeds tamper 是一個可以將多個 CSV column map 到同一個多值欄位 (multiple value) 的 module
但問題是使用 "rewrite" 只可以在一個 column 使用
例如要將:
abc.jpg
變為
sites/default/files/abc.jpg
再變為多值
sites/default/files/abc.jpg,sites/default/files/def.jpg
就需要在 image 欄位使用兩次 rewrite
feeds tamper 無辦法解決,只可以在 CSV 上直接使用 full path

但把心一橫,自己寫一個對應 list 的 prefixer 都不是太難

abc.jpg,def.jpg
變為
sites/default/files/abc.jpg,sites/default/files/def.jpg
就只需要一次 rewrite 了

因為 feeds tamper 使用了 ctools 的 plugin
所以要擴展可以使用:

<?php
// prefix_feeds_tamper_plugin.module
function prefix_feeds_tamper_plugin_ctools_plugin_directory($owner, $plugin_type) {
  if (
$owner == 'feeds_tamper' && $plugin_type == 'plugins') {
    return
'plugins/';
  }
}
?>

知會 feeds tamper 這邊有一個客製 plugin

實作代碼:

<?php
// plugins/list_prefix.inc

// plugin 資料,有需要的話抄 feeds tamper module 內的代碼就可以了,不難
$plugin = array(
 
'form' => 'prefix_feeds_tamper_plugin_list_prefix_form',
 
'callback' => 'prefix_feeds_tamper_plugin_list_prefix_callback',
 
'name' => 'prefix',
 
'multi' => 'direct',
 
'single' => 'skip',
 
'category' => 'List',
);

// 使用 form API,也是抄 feeds tamper 的代碼
function prefix_feeds_tamper_plugin_list_prefix_form($importer, $element_key, $settings) {
 
$form = array();
 
$form['prefix'] = array(
   
'#type' => 'textfield',
   
'#title' => t('Prefix'),
   
'#default_value' => isset($settings['prefix']) ? $settings['prefix'] : '',
   
'#description' => t('The string to use for prefix.'),
  );
  return
$form;
}

// 這邊是真正的實現,要留意 $fields 可以是 string, 可以是 array,取決於你的定義了
function prefix_feeds_tamper_plugin_list_prefix_callback($result, $item_key, $element_key, &$field, $settings) {
 
$out = array();
  foreach (
$field as $f) {
   
$out[] = $settings['prefix'].$f;
  }
 
$field = $out;
}
?>

p.s. feeds_tamper-7.x-1.0-beta4

Google