Phoca Downloadで別サイトのファイルをリンクする
公開日| 2009年05月29日 | コメントはまだありません。
カテゴリー:エクステンション |
概要 : Joomla!でDownloadを管理するコンポーネントとしてPhoca Donwloadは、人気のコンポーネントの1つです。 このコンポーネントは、外部リンクの機能があります。これは、Downloadのボタンをクリックした時に、そこへ飛ぶように設定できるものです。
ただ、サイト運営をやっていると、負荷分散のため、ダウンロードさせるための大きなファイルは、別のサイト(サーバ)へ置きたくなります。
Phoca Donwloadでは、それを簡単に設定できます。
今回は、簡単にできる外部リンクとそのリンクを隠すことについて、簡単に記述したいと思います。
もっと、Joomla!やPHP、Apacheについて詳しく知りたい方は、以下の本なども良いと思います。本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。
Joomla!Pro Book オープンソースCMS導入&カスタマイズガイド |
初めてのPHP & MySQL 第2版 |
Apacheハンドブック |
外部リンクを設定する
Phoca Downloadのファイルの設定で、外部URLリンク(External URL Link)に外部リンクしたいファイルのURLを"http://"から入力するだけです。
この画面では、単純に下方の外部URLリンク(External URL Link)へ
"http://www.example.com/download/sample.zip"
と入力しているだけです。
本当なら、ファイル名は、外部リンクなので、不要だと思うのですが、設定しないとエラーになります。
多分、ファイルサイズなどの情報に必要なのかな?とも思いますが、ファイル名は、存在しない名前でも設定できてしまうので、
不思議な感じがします。
このように設定すると、このファイルをダウンロードしようとした時、
"http://www.example.com/download/sample.zip"
のファイルをダウンロードするようになります。
さて、ここで以下のような画面からダウンロードを実施することになります。 ボタン(リンク)は、赤い枠で囲まれた部分になります。
ここに、マウスを置くと、リンク先の
"http://www.example.com/download/sample.zip"
が見えませんか?
訪問者に、記事などを確実に見てもらうために、できれば、HTMLでの直接的なリンクは避けたいと思います。
(ダウンロードファイルだけ欲しい人は、そこえへ直接移動してしまうようになります。 折角のホームページが、見てもらえるチャンスを減らすことにもなります。)

次では、その外部リンクを直接のリンクでなくする方法について簡単に記述します。
外部リンクを見えなくする
先の外部リンクを、直接のリンクでなく、通常のダイレクトリンクを設定していないようなリンク先を設定するには、どうするかを簡単に記述します。以下は、ダウンロードをテスト用サンプルファイルをPhoca Donwloadがリンクした時のアドレスです。
1 | <a href="/ja/download/category/2-samplecategory.html?download=2%3Asamplefile" rel="nofollow">サンプルファイル</a> |
このように、HTMLを見ただけでは、本当の場所がわからなくなっています。
これと同じようなことができないか、考えてみました。
おおよそ、以下のような変更を行うとできます。ただ、これは、あくまで、最初のHTMLを隠す程度です。
以下の3つのファイルを変更します。
- %joomla!install%/components/com_phocadownload/models/category.php
-- ダウンロードファイルを読み出すところです。
- %joomla!install%/components/com_phocadownload/models/file.php
-- ダウンロードファイルを読み出すところです。
- %joomla!install%/components/com_phocadownload/views/category/tmpl/default.php
-- ダウンロードファイルのリンクを設定するところです。
では、早速、簡単に変更内容を記載しましょう。
category.php
変更前
186 187 188 189 | $query = " SELECT c.filename, c.directlink, c.access" ." FROM #__phocadownload AS c" . " WHERE " . implode( " AND ", $wheres ) . " ORDER BY c.ordering"; |
変更後
186 187 188 189 | $query = " SELECT c.filename, c.directlink, c.access, c.link_external" ." FROM #__phocadownload AS c" . " WHERE " . implode( " AND ", $wheres ) . " ORDER BY c.ordering"; |
変更前
227 228 229 230 231 232 233 234 235 236 237 238 239 | $absolutePath = PhocaDownloadHelper::getSettings('absolute_path', ''); if ($absolutePath != '') { $this-->_directlink = 0; } if ($this-->_directlink == 1 ) { $relFile = JURI::base(true).'/'.PhocaDownloadHelper::getSettings('download_folder', 'phocadownload' ).'/'.$this-->_filename; $outcome['file'] = $relFile; $outcome['directlink'] = $this-->_directlink; return $outcome; } else { $absFile = str_replace('/', DS, JPath::clean($filePath['orig_abs_ds'] . $this-->_filename)); } |
変更後
227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 | $absolutePath = PhocaDownloadHelper::getSettings('absolute_path', ''); if ($absolutePath != '') { $this-->_directlink = 0; } // add if (isset($filename[0]-->link_external) && $filename[0]-->link_external!=''){ $outcome['file'] = $filename[0]-->link_external; $outcome['directlink'] = 1; return $outcome; } // add if ($this-->_directlink == 1 ) { $relFile = JURI::base(true).'/'.PhocaDownloadHelper::getSettings('download_folder', 'phocadownload' ).'/'.$this-->_filename; $outcome['file'] = $relFile; $outcome['directlink'] = $this-->_directlink; return $outcome; } else { $absFile = str_replace('/', DS, JPath::clean($filePath['orig_abs_ds'] . $this-->_filename)); } |
ここの処理は、ダウンロードをクリックした時に実行する処理です。
ダウンロードするファイル名を取り出しているところです。ここで、 外部URLアドレス(External URL Link)が設定されている場合は、ダイレクトリンクが設定されている時と同じ処理を行います。
つまり、これ以降の動作は、ダイレクトリンクが設定されている場合と同じで良いからです。
file.php
変更前
140 141 142 143 | $query = " SELECT c.filename, c.directlink, c.access" ." FROM #__phocadownload AS c" . " WHERE " . implode( " AND ", $wheres ) . " ORDER BY c.ordering"; |
変更後
140 141 142 143 | $query = " SELECT c.filename, c.directlink, c.access, c.link_external" ." FROM #__phocadownload AS c" . " WHERE " . implode( " AND ", $wheres ) . " ORDER BY c.ordering"; |
変更前
183 184 185 186 187 188 189 190 191 192 193 194 195 | $absolutePath = PhocaDownloadHelper::getSettings('absolute_path', ''); if ($absolutePath != '') { $this-->_directlink = 0; } if ($this-->_directlink == 1) { $relFile = JURI::base(true).'/'.PhocaDownloadHelper::getSettings('download_folder', 'phocadownload' ).'/'.$this-->_filename; $outcome['file'] = $relFile; $outcome['directlink'] = $this-->_directlink; return $outcome; } else { $absFile = str_replace('/', DS, JPath::clean($filePath['orig_abs_ds'] . $this-->_filename)); } |
変更後
183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | $absolutePath = PhocaDownloadHelper::getSettings('absolute_path', ''); if ($absolutePath != '') { $this-->_directlink = 0; } // add if (isset($filename[0]-->link_external) && $filename[0]-->link_external!=''){ $outcome['file'] = $filename[0]-->link_external; $outcome['directlink'] = 1; return $outcome; } // add if ($this-->_directlink == 1) { $relFile = JURI::base(true).'/'.PhocaDownloadHelper::getSettings('download_folder', 'phocadownload' ).'/'.$this-->_filename; $outcome['file'] = $relFile; $outcome['directlink'] = $this-->_directlink; return $outcome; } else { $absFile = str_replace('/', DS, JPath::clean($filePath['orig_abs_ds'] . $this-->_filename)); } |
category.phpの処理と同じです。行番号が違うだけで内容は、全く同じです。
default.php
変更前
189 190 191 192 193 194 195 196 197 198 199 200 | // EXTERNAL LINK if ($valueDoc-->link_external != '') { $linkDownloadB = '<a href="'.$valueDoc-->link_external.'" target="'.$this-->paramstmpl['download_external_link'].'" >'; $linkDownloadE ='</a>'; } else { $linkDownloadB = '<a href="'. JRoute::_('index.php?option=com_phocadownload&view=category&id='.$this-->category[0]-->id.':'.$this-->category[0]-->alias.'&download='.$valueDoc-->id.':'.$valueDoc-->alias.$this-->tmpl['limitstarturl'].'&Itemid='. JRequest::getVar('Itemid', 1, 'get', 'int')).'">'; $linkDownloadE ='</a>'; } |
変更後
189 190 191 192 193 194 195 196 197 198 199 200 | // // EXTERNAL LINK // if ($valueDoc-->link_external != '') { // // $linkDownloadB = '<a href="'.$valueDoc-->link_external.'" target="'.$this-->paramstmpl['download_external_link'].'" >'; // $linkDownloadE ='</a>'; // // } else { $linkDownloadB = '<a href="'. JRoute::_('index.php?option=com_phocadownload&view=category&id='.$this-->category[0]-->id.':'.$this-->category[0]-->alias.'&download='.$valueDoc-->id.':'.$valueDoc-->alias.$this-->tmpl['limitstarturl'].'&Itemid='. JRequest::getVar('Itemid', 1, 'get', 'int')).'">'; $linkDownloadE ='</a>'; // } |
上記は、カテゴリリストを表示する処理です。
ここで、 外部URLアドレス(External URL Link)が設定されている場合は、そのリンクアドレスをHTMLに設定していますが、 この処理をコメントアウトします。つまり、外部URLアドレス(External URL Link)が設定されていても、リンク先がダイレクトに設定されないようにしています。
ここでの設定例は、一つの手段です。
これで、リンク先が、全く見えなくなるわけではありません。
この設定例では、最終的には、外部URLアドレス(External URL Link)の設定先へリダイレクトしますから、ある程度、技術があれば、そのリダイレクト先は、わかると思います。 完璧でないにしても、簡単な目隠しぐらいはできると思います。
この記事が、何かの参考になれば、幸いです。
この設定例では、最終的には、外部URLアドレス(External URL Link)の設定先へリダイレクトしますから、ある程度、技術があれば、そのリダイレクト先は、わかると思います。 完璧でないにしても、簡単な目隠しぐらいはできると思います。
この記事が、何かの参考になれば、幸いです。

