Phoca Downloadで別サイトのファイルをリンクする
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
概要 :
Joomla!でDownloadを管理するコンポーネントとしてPhoca Donwloadは、人気のコンポーネントの1つです。
このコンポーネントは、外部リンクの機能があります。これは、Downloadのボタンをクリックした時に、そこへ飛ぶように設定できるものです。
ただ、サイト運営をやっていると、負荷分散のため、ダウンロードさせるための大きなファイルは、別のサイト(サーバ)へ置きたくなります。
Phoca Donwloadでは、それを簡単に設定できます。
今回は、簡単にできる外部リンクとそのリンクを隠すことについて、簡単に記述したいと思います。
もっと、Joomla!やPHP、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)の設定先へリダイレクトしますから、ある程度、技術があれば、そのリダイレクト先は、わかると思います。
完璧でないにしても、簡単な目隠しぐらいはできると思います。
この記事が、何かの参考になれば、幸いです。
2012年04月27日 @ 03:44:43
Guy, you saved my life! Thank you so much. I’ve been trying to use external links in PhocaDownload for weeks without success.