Revision of 客製自定義 feeds tamper plugin from Tue, 2013-07-02 14:15

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