記事への画像の貼り付け方法

以前、「Wysiwyg Fields Token 問題」と言っていた件について解決しました。

簡単に説明すると、「WYSIWYG Fields」モジュールにて画像の貼り付けを行うと、本文に「Wysiwyg Fields Token」が挿入されてしまいます。
このトークンを専用の入力フィルター「Wysiwyg Fields Filter」によってIMGタグに変換するようです。

本文(body field)の$node->body['und']['0']['value']には「Wysiwyg Fields Token」が使われているため、「WYSIWYG Fields」モジュールが使えなくなると(厳密には「Wysiwyg Fields Filter」が使えなくなると)、本文中の画像挿入箇所はIMGタグには変換されず、トークンの文字列コードが表示されます。

そこで、IMGタグが使われている$node->body['und']['0']['safe_value']の値で$node->body['und']['0']['value']を書き換えることにしました。

既存のImagefieldありのノードに対してどうやって書き換えるかですが、当サイトは500以上のノートがあり、1ノードに多くて数十枚の画像を貼り付けているものもあります。
手作業で置き換えていくのはあまりにも非効率ですので、プログラムにより行うことにしました。
作業中にデータベースが壊れてしまうかもしれませんのでまず、データベースのバックアップを取ります。

$ drush sql-dump > backup.sql 

次に書き換え用のPHPスクリプトを作成します。
ファイル名は何でもよいのですが今回は「replace.php」としました。

<?php

$article_nodes = node_load_multiple(array(), array('type' => 'blog'));
foreach ($article_nodes as $article_node) {
  $safe_value=$article_node->body[und][0]['safe_value'] ;
  $article_node->body[und][0]['value'] = $safe_value;
  field_attach_update('node', $article_node);
}

?> 

最後にdrushを使って作成したPHPスクリプトを実行します。
drushを使うといろいろ初期設定を省略できます。

$ cd drupal_install_dir 
$ drush scr replace.php 

結果を確認しつつ、すべてのコンテンツタイプ(blog,drupal_memo,linuxserver,digital_memo,movie_memo)で書き換えを行うためには、PHPスクリプトの'blog'の箇所を別のコンテンツタイプに書き換えて実行します。
すべて何事もなく無事終わりました。

書き換えに抵抗があるなら、表示だけ変えることも可能です。
テーマテンプレートのnode.tpl.phpのbodyフィールドの表示個所を以下のように変更すれば'safe_value'が使われると思います。

<?php print render ($node->body['und']['0']['safe_value']);?> 

これで「WYSIWYG Fields」モジュールから解放され、代わりに「Insert」モジュールを使用することができます。

Drupalバージョン

Drupal 7.x