スポンサーリンク

以前、「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ノードに多くて数十枚の画像を貼り付けているものもあります。

手作業で置き換えていくのはあまりにも非効率ですので、プログラムにより行うことにしました。

作業中にデータベースが壊れてしまうかもしれませんのでまず、データベースのバックアップを取ります。

1
$ drush sql-dump > backup.sql

次に書き換え用のPHPスクリプトを作成します。

ファイル名は何でもよいのですが今回は「replace.php」としました。

コンテンツタイプ:blog
1
2
3
4
5
6
7
8
9
10
<?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を使うといろいろ初期設定を省略できます。

drsuhにてPHPスクリプトを実行
1
2
$ cd drupal_install_dir
$ drush scr replace.php

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

すべて何事もなく無事終わりました。

書き換えに抵抗があるなら、表示だけ変えることも可能です。

テーマテンプレートのnode.tpl.phpのbodyフィールドの表示個所を以下のように変更すれば'safe_value'が使われると思います。

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

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

スポンサーリンク

この記事が気に入ったら
フォローしよう

最新情報をお届けします

Twitterでフォローしよう

おすすめの記事