0

私は mydomain.com/drupalsite で drupal 6 サイトに取り組んでおり、デザイナーはそこに多くのハードコードされたイメージ パスを配置しました。たとえば、mydomain.com/drupalsite/img のカスタム img フォルダーです。そのため、サイトの多くは /drupalsite/img/myimg1.png へのリンクを使用しています。

ここに問題があります。サイトは最終的に、finaldomain.com を mydomain.com/drupalsite にポイントすることにより、finaldomain.com に移動します。したがって、/drupalsite/img/myimg1.png のようなパスは、finaldomain.com/drupalsite/img/myimg1.png に解決されます。index.php にヒットするように、finaldomain.com サイトはそのサブディレクトリを指す必要があります。

私の最初の本能は、.htaccess ファイルを使用して /drupalsite を "" に置き換えることですが、約 12 の異なるソリューションを試しましたが、うまくいきませんでした。ソリューションの私のハックは、いくつかの ln -s リンクを使用することでしたが、私は本当にそれが好きではありません:) tia

アンドリュー

4

3 に答える 3

2

後から考えると、最善の方法は、人々が Drupal 関数を使用してすべてのリンクを作成できるようにすることです。

  • l(それは文字 L です)
  • drupal_get_path()
  • base_path()

このl()関数はベース パスの問題を処理し、URL を定義する体系的な方法を提供します。theme_image()プラス関数のようなものを使用するl()と、確実に勝ちます。<a>独自のタグを記述し、 のようなテーマ関数内で使用する必要がある場合は、上記の 2 番目と 3 番目の関数を使用しますtheme_image()

しかし、あなたの現在の状況では:

Andy の解決策に関しては、変更を、リンクが配置されていることがわかっている特定のデータベース フィールドに限定できればより良いでしょう。

したがって、これらすべてのフィールド (たとえば、すべての本文フィールド) を選択するクエリを作成します。

$my_query = db_query("SELECT vid, body FROM {node_revisions}");

たとえば、これにより、テーブルbody内のすべてのフィールドが取得されるnode_revisionsため、古いリビジョンでも適切なリンクが作成されます。

次に、これらの結果を実行しstr_replace()、それぞれに対して実行してから、変更を書き戻します。

while($node = db_fetch_object($my_query)) {
  $new_body = str_replace('what you have', 'what you want', $node->body);
  db_query("UPDATE {node_revisions} SET body = '%s' WHERE vid = %d", $new_body, $node->vid);
}

コードが意図したとおりに動作することを確認するために、最初に 1 つのレコードで試してみます (WHERE vid = 5たとえば、 を追加して、1 つのリビジョンに絞り込むだけです)。さらに、より一般的な解決策 (ブロック内のテキストを置き換えるなど) を提供するために、ノードを適切にロードおよび保存するのに適しているnode_loadandを利用していません。node_save

sedファイルについては、「sites」フォルダー内から次のようなコマンドを実行して、古き良きコマンドをお勧めします。

find ./ -type f -exec sed -i ’s/string1/string2/’ {} \;

ここからそれをつかんだので、詳細についてはそのサイトを見てください。パスを操作する場合は、コマンド/のバージョンでパスのをエスケープするか、別のセパレータを使用する必要があります (つまり、 の代わりに書くことができるので、 :-の代わりに書くことができます)。 )。クイックコマンドについては、Drupal ハンドブック ページも参照してください: http://drupal.org/node/128513sedseds#string1#string2#s/string1/string2/s#/drupalsite/img/#/img#s/\/drupalsite\/img\//\/img/sed

少し混乱しているので、適切な関数を事前に使用することを強制しようとしています。しかし、テーマ担当者に Drupal コンテンツを作成してもらいたいが、「PHP フィルター」入力形式へのアクセスを許可したくない場合、またはテーマ担当者が単に PHP を知らない場合、これは困難です。適切な Drupal テーマ設定は、基本的な HTML/CSS 作業を過ぎた時点で、PHP と Drupal のテーマ関連機能の知識を必要とします。

于 2010-07-27T15:04:16.567 に答える
0

私はこれまでに、完全なデータベース ダンプを取得し、それをテキスト エディターで開き、グローバル検索を実行してパスを置換しました。次に、新しいホストで、変更されたダンプ ファイルをロードすると、正しいパスが含まれます。

于 2010-07-27T08:25:01.840 に答える
0

Pathologicを試すことができます。このようなパスを修正できるはずです。

于 2010-07-27T08:25:04.040 に答える