コンテンツのパスを取得する方法

Events happening in the community are now at Drupal community events on www.drupal.org.
king33's picture

こんにちは。
コンテンツから別のコンテンツへのリンクを入れたいのですが、どうすればよいでしょうか。
質問は二つ有ります。Drupal6です。

(1)コンテンツの中で別のコンテンツへのリンクを入れたい。
 あるコンテンツを作って、そこに別のコンテンツのリンクを貼るのに、リンク先のノードを調べて リンク先にnode/3 とかのように リンク先を指定して作っていました。
 このやりかただと、トップページからはいつもリンク先に飛べるけれど、あるページを表示しているところから、そこへ飛ぶことが出来ません。
 例えば、あるノードをいつもコンテンツトップに表示していて、「説明はこちらへ」のリンク先をいつも同じページにしたい。
 ・絶対アドレスで書けば飛べるけど、サイトを移動した時に困るし、相対アドレスだと、うまく行かない。
 このような場合、メニューでなんとかするしかないのでしょうか。

(2)CCkのFileFieldを使って作ったコンテンツの添付ファイルのパスを知りたい。
 FileFieldを使ったコンテンツをCCKで作ります。
 Viewsでリスト表示させて、FileFieldを表示させると、添付ファイルはファイル名がリストされます。
 これを特定の文字列にして且つ、そのファイルへのリンクとしたい。
 CCKのfieldの設定でFileFieldに説明欄をつけると、その文字列に置き換わりますが、これをViewsのリストの時だけ置き換えたい。
 Viewsの設定で置き換える事はできるのですが、リンク先を取得する方法がわかりません。
   Rewrite the output of this field に文字列を入れると置き換わり
   Output this field as a linkに絶対パスを入れるとできるのですが、サイトを移動した時に変更が必要になります。

たぶん、簡単なことだと思うのですが
よろしくお願いいたします。

Comments

qchan's picture

こんにちは。

1)は ブラウザでアクセスできるサイトのDocument Rootからの絶対パスでうまくいくと思います。

node/3 から  /node/3  へ書き換え

ですね。この書き方でサイト内リンク、CSSの背景画像やimgタグなども統一すると、サーバー移転が楽になります。

2)はViewsの設定で

 

  フィールド > コンテンツ > 呼びたいfile > フォーマット:
   

で「ファイルへのパス」

を選ぶと良いと思います。

うまく行かないんですけど

king33's picture

qchanさん、ありがとうございます。
1)リンクを /node/3 とすると、webサーバのDocumentルートからになります。
もう少し具体的に書くと、企業内の一つのサーバのあるディレクトリ下で作業をしています。http://127.0.0.1/drupal-test/
なので、 /drupal-test/node/3 と書けば良いと思うのですが。
最終的にこのディレクトリ名を http://127.0.0.1/drupal/ などに変えて正式運用しようとしているので、
これだと都合が悪いです。

2)これは、意図どおりうまく行きました。
 どうも、ありがとうございました。

1)

mattz's picture

こんにちは

php filterを有効にして

<? echo l('文字列', 'node/1') ?>

とかいかがでしょうか?

うまく行きました。

king33's picture

mattz さん
ありがとうございました。
こういった、関数と言うか、APIというかは、どこで勉強すれば良いのでしょうか。

qchan's picture

なるほど、ドメイン直下ではないんですね。
Drupalインストールフォルダの

sites/default/settings.php に

$base_url = 'http://127.0.0.1/drupal-test';  // NO trailing slash!

と追記するとどうでしょうか。

ありがとうございました

king33's picture

qchan さん
ありがとうございました。
うまくいきました。と、思ったのですが、ダメなようです。

やはり、参照したページによってはリンク先のアドレスがルートだったり、別名定義したパスの最後だったりで
うまく行かないようです・

こんにちは、king33さん(さんさんさん ルートパス直下

jun784's picture

こんにちは、king33さん(さんさんさん

ルートパス直下にDrupalをおいてない時は、
base_path()
とすると、ディレクトリパスがかえってきますよ。

自分はよくテーマ以下に画像をおいてるので、

base_path().path_to_theme()
と書くと、今使っているテーマパスをかえしてます。

king33's picture

jun784さん

ありがとうございました。
この方法でもできました。

フォローしました。

qchan's picture

ここ数日で同じトラブルに自分も出会ったので、後の方の参考に。

Drupalインストールフォルダの直下に、.htaccessファイルがあります。
この中に、

# Modify the RewriteBase if you are using Drupal in a subdirectory or in a
# VirtualDocumentRoot and the rewrite rules are not working properly.
# For example if your site is at http://example.com/drupal uncomment and
# modify the following line:
# RewriteBase /drupal

というブロックがありますので、

RewriteBase /drupal

の # を外して、
 
RewriteBase /drupal-test 

など、ご自分の環境に合わせて書き換えるとよいです。

私の場合はこの作業と、settings.phpの書き換え2つが必要でした。
Block内に直書きした画像リンクや内部リンクなどはこれでもだめですので、base_path()を挟んだほうが良いですね。