您在這裡

某個 檔案 給 某個 角色 下載 的 模組

nobody1225's 的頭像
nobody1225 在 2008-12-05 (週五) 16:49 發表

請問大家
我有一個 檔案
只想讓某個 "角色" 下載
請問要用什麼模組才能達成呢?
謝謝大家了

暈...
最後居然是這個模組... orz

--
from open mind to open source~

--
from open mind to open source~

想請問:

想詢問若是我的權限有分匿名使用者、已登入使用者、管理者
那麼若當已登入使用者和管理者有上傳檔案。
那麼可以讓檔案控制給"匿名使用者"能看到檔案都不能下載嘛? (就連結會變失效)

但若使用
一些控制權限的模組如上述所說的就變成已登入使用者和管理者每次上傳檔案都附於勾選權限。不知有沒其它比較好的方式~~ >w<非常謝謝大家
http://drupaltaiwan.org/module/node_privacy_byrole
http://drupaltaiwan.org/module/content_access

想詢問能不能做到控制權限讓特定的人只能檢視檔案都不能下載?

因為使用預設的權限控制只能勾選特定的人只能檢視。但是重點是能不能讓檔案能看到文件(但只是連結不能連到下載呢)

用套版來解決

輸出附加檔案清單的樣板

<?php
function theme_upload_attachments($files) {
$header = array(t('Attachment'), t('Size'));
$rows = array();
foreach ($files as $file) {
$file = (object)$file;
if ($file->list && !$file->remove) {
// Generate valid URL for both existing attachments and preview of new attachments (these have 'upload' in fid)
$href = file_create_url((strpos($file->fid, 'upload') === FALSE ? $file->filepath : file_create_filename($file->filename, file_create_path())));
$text = $file->description ? $file->description : $file->filename;
$rows[] = array(l($text, $href), format_size($file->filesize));
}
}
if (count($rows)) {
return theme('table', $header, $rows, array('id' => 'attachments'));
}
}
?>

貼到版型內的 template.php
然後修改為

<?php
//把 theme_ 開頭改成 phptemplate_ 開頭
function phptemplate_upload_attachments($files) {
$header = array(t('Attachment'), t('Size'));
$rows = array();
GLOBAL $user; //加上這一行先取得使用者的資料
foreach ($files as $file) {
$file = (object)$file;
if ($file->list && !$file->remove) {
//在單筆檔案輸出的部份,加上判斷使用者是否登入,登入則輸出原本的連結,沒有登入則只輸出文字
$text = $file->description ? $file->description : $file->filename;
if($user->uid){
// Generate valid URL for both existing attachments and preview of new attachments (these have 'upload' in fid)
$href = file_create_url((strpos($file->fid, 'upload') === FALSE ? $file->filepath : file_create_filename($file->filename, file_create_path())));
$rows[] = array(l($text, $href), format_size($file->filesize));
}else{
$rows[] = array($text, format_size($file->filesize));
}
}
//修改結束
}
if (count($rows)) {
return theme('table', $header, $rows, array('id' => 'attachments'));
}
}
?>

最後 記得要把訪客的下載檔案的權限打開
留給樣版檔內做判斷

(括號已經補上)

謝謝hom的回覆~

>w<但是我就在自已的版型中放入一個template.php然後在點管理介面的區塊時就秀以下訊息
Parse error: syntax error, unexpected $end in C:\xxx\htdocs\mywebsite\sites\all\themes\nigraphic\template.php on line 23
然後有在自已的版型info有phptemplate但不知怎啟用~

name = 007 niGraphic Studio
description = 007 niGraphic is light-weight, 2-column, fixed width and uses CSS.
regions[left] = Left sidebar
regions[topleft] = Header Left
regions[content] = Content
features[] = name
features[] = slogan
features[] = logo
features[] = search
features[] = favicon
features[] = primary_links
stylesheets[all][] = style.css
version = VERSION
core = 6.x
engine = phptemplate

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)

hom想詢問一下~~那麼template.php放入後~我的theme後
要去那裡找到開啟訪客的下載檔案,因為我到管理/權限中~只有看到
upload 模組的上傳檔案和檢視上傳檔案 (我就勾上傳檔案)但沒看出效果。
然後 >w<我有看手冊中的template.php主題…but~~~ =口=還是不了解

----------------------------------------------------------------------------------

還是得加裝http://drupal.org/project/downld
Protected Download (downld)模組呢? -->但這沒有六版的說~

----------------------------------------------------------------------------------

>w<謝謝~~

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)

討論串是 5.x 的
所以我是拿 5.x 版本的函式來修改

不過剛剛看到你的版本是 6.x
查了一下
兩個版本的函式程式有一點差異
下面是用 6.x 的函式修改的版本

權限的部份
檢視上傳檔案 這個權限
要把底下的 anonymous user 和 authenticated user 這兩個角色都打勾


<?php
function phptemplate_upload_attachments($files) {
$header = array(t('Attachment'), t('Size'));
$rows = array();
foreach ($files as $file) {
$file = (object)$file;
if ($file->list && empty($file->remove)) {
$text = $file->description ? $file->description : $file->filename;
if($user->uid){
// Generate valid URL for both existing attachments and preview of new attachments (these have 'upload' in fid)
//$href = file_create_url((strpos($file->fid, 'upload') === FALSE ? $file->filepath : file_create_filename($file->filename, file_create_path())));
$href = file_create_url($file->filepath);
$rows[] = array(l($text, $href), format_size($file->filesize));
}else{
$rows[] = array($text, format_size($file->filesize));
}
}
}
if (count($rows)) {
return theme('table', $header, $rows, array('id' => 'attachments'));
}
}
?>

hom:

*那像我的檔案上傳是使用cck模組中的filefield中的file upload所上傳的檔案。
是不是上面的方式就沒辦法實現效果了?

-----------------------------------------------------------------------------------------------------------------------------------------------
因為要使用cck的filefield中的file upload主要是因為我建了兩種node類型的頁面(一個叫師資頁、一估叫教材上傳頁)
之後上傳了教材必須用view處理一個列出全部的教材頁面以及各別教師的所屬教材…所以就變成預設的檔案上傳就不太合適使用

----------------------------------------------------------------------------------------------------------------------------------------------------
而且哦先試drupal預設的檔案上傳…
然後再依hom您所提的方式將anonymous user 和 authenticated user打勾,之後檔案是完全看不到…(沒跑出輸出文字連結的效果)

謝謝~>w<…

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)

你應該是有裝了其他額外控制檔案下載權限的模組
全部都要打開
確定加上 phptemplate_upload_attachments 這一段程式之前
使用者都看的到檔案才行
記得加上 phptemplate_upload_attachments 這段程式後
要把版型 清除快取或重新啟用

另外
既然你有用 views 顯示檔案清單
可以嘗試 views 的套版來修改顯示

hom >w< (我快吐血了…)
我有檢查是不是有裝(額外控制檔案下載權限的模組) >w<沒有耶!!
然後有確定在template加上phptemplate_upload_attachments
就先測試預設版型中的template.php樣版!(如附加把相關程式碼加於最後)
也有清除快取或重新啟用-但檔案還是乖乖的在上面等著被下載!

若用view的方式的話 是不是在view中的檔頭資訊,那意思是說把內容輸出放入自已的theme中,
然後再把hom你的程式貼在其中之一的作法。 是這樣嘛?

謝謝

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)

試試這一段


<?php
function phptemplate_upload_attachments($files) {
$header = array(t('Attachment'), t('Size'));
$rows = array();
GLOBAL $user;
foreach ($files as $file) {
$file = (object)$file;
if ($file->list && empty($file->remove)) {
$text = $file->description ? $file->description : $file->filename;
if($user->uid){
$href = file_create_url($file->filepath);
$rows[] = array(l($text, $href), format_size($file->filesize));
}else{
$rows[] = array($text, format_size($file->filesize));
}
}
}
if (count($rows)) {
return theme('table', $header, $rows, array('id' => 'attachments'));
}
}
?>

hom (orz跪…)

我試不出效果說!覺得很對不起hom你…>w<…(你都教很多方式了)
會不會是因為我使用了filefield模組來當作上傳檔案的因素呢?

但覺得又不是這問題>w<…(orz)
hom你用的是content_types的node_attachmets.inc的upload_attachments (這是不是就是系統預設的上傳函式?)

但找filefield了模組中關於upload
找到field_file_save_upload (這是不是就是使用filefield的上傳函式?)

謝謝>w<

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)

hom:
我從filefield裡面搜尋相關theme function相關字,>w<有耶…它好像不是套用套用核心的 upload 模組的檔案清單樣板說。
但是hom問你哦!>w<那我要怎改起呢?謝謝

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)

大家好
我發現一個好玩的事
管理=>網站設定=>檔案系統=>下載模式:
1. 公開—可以用 HTTP 直接下載檔案。
2. 隱藏—檔案的傳送方式是由 Drupal 所控制。
這兩個有什麼不一樣呢?
請大家告訴我有什麼後遺症吧

因為我選 2 隱藏的話
我就不用在抓其他模組直接使用內建的Upload模組
即可實現【某個 檔案 給 某個 角色 下載】
還可以達成"腦細胞逐漸死亡"所要求的
http://drupaltaiwan.org/forum/20081205/2830#comment-9891
謝謝大家

nobody1225~
>w<真的滿好玩~~=_=這樣的方式也一樣哦…
用 HTTP 直接下載檔案是不是指 (透過使用者頻寬來下)?
而檔案的傳送方式是由 Drupal 所控制 (是經由佔我們自已架的頻寬) ?

人人把心中的愛發揮出來,就能凝聚善的福業,形成善的循環。 (靜思語錄)