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