您在這裡

與viewfield奮戰

tky's 的頭像
tky 在 2007-03-17 (週六) 15:33 發表

好吧,TKY認輸了。跟viewfield奮戰了一下午,就是無法達到心目中的效果,讓來問一下大家先。

先簡述一下想法:
在TKY的網頁中,有「師資介紹」T和「課程介紹」C兩種類型的頁面。其中「課程介紹」的「授課教師」Ct是以node reference的方式連結到特定的「師資介紹」頁面。

現在想要在「師資介紹」的頁面中,以一個欄位來顯示出某特定教師所開設的課程。
..................................................
最直覺的方式,就是用viewfield來製作這樣的欄位。
問題是,不是很清楚要怎麼設定viewfield,才能依照不同師資資訊(例如nid或者姓名)在該頁面中篩出特定的課程資訊。

目前的想法是:先建立一個views表格,以「授課教師」Ct當做argument來篩資料。然後在viewfield中設定argument。(雖然不清楚是在欄位設定中設定,還是每個師資介紹頁中都要設定一次)。
但是,喔,嗖蕊,「授課教師」Ct的格式是node reference,用這個格式是篩不出來滴。永遠只會出現沒資料的畫面。

既然views不吃CCK的node reference,TKY就想說那至少可以試試看「師資介紹」的node-id來篩吧.......把忒,不行,沒這回事。

也就是說,似乎好像一定得用php code的方式,才能篩出TKY想要的表格。
問題是雖然viewfield可以插入php code,但TKY卻不曉得要怎樣寫才能辦到!

這個,請有用過viewfield的朋友們指教一下,謝謝。
TKY

啊,我了。
但至少有沒有人用過viewfield來做過任何東西啊?
能不能指導一下該怎麼設定?
在CCK新增一個viewfield之後,就不知道要怎麼樣繼續下去了。

tky

tky

這樣做也不失為一個辦法,只要把這個vocabuary指派給課程和師資兩種頁面就好。
不過這樣的話,以後新增師資,就必須新增兩個地方:一次是師資類型內容,一次是分類term(當然可以用tag來弄)。
另一個麻煩之處就是:如果老師很多,term就會爆多。

用node reference的好處就是:建立好師資內容,即可在課程中選擇refer到新增的師資node去。而且,還可以在一個頁面中連結兩種不同類型的內容。
(唯一的)缺點就是,在Views中可以可以選用這種格式來做過濾器以及argument;但選擇後者時,會出現不明的錯誤,導致無法透過網址參數來篩出資料。

TKY想說,應該可以用php code的方式來避開這個問題,但....功力太差,對Drupal的coding一竅不通。(普通php還可以自己寫說....)

還在苦惱中

tky

tky

小弟clone 了TKY 的情況
發覺問題出自views 的設定

先解釋一下我設定的情況
免得我理解錯誤
TKY 應該是有兩種node, 課程和師資
師資被ref. 到課程
在課程node 加了一個node ref. field
在node ref field 設定成用一個獨立的views 來 filter 可被ref 的師資node

如果我理解如上
記得將獨立的那個view 要可以看得到title (Views 的Fields 不可留空)
之後node ref. config 點那可access 的contenttype 就可以了
就算那獨立的views 沒有page, block 設定都可以

p.s.
node ref + views 真的是非常好用
帶有很多可能性

Joetsui's blog

謝謝joetsuihk的詳細說明。
不過joetsuihk對TKY問題的理解有一點點不同:TKY的確是在課程node中做了一個node ref.的欄位,refer師資node;現在TKY想要做的則是,在師資node中,建立一個views field來列出,這個老師開過的課程。

也就是說要以師資node id或者師資姓名作為argument、濾出課程資料的views field,直接在師資介紹的頁面中,看到他開過什麼課程。

不過joetsuihk說道,「獨立的那個view 要可以看得到title (Views 的Fields 不可留空)」,TKY的確沒有注意到。因為通常用views bonus,只要設定argument就好了。看views field也是用argument,以為就不用設欄位了。

回去試看看
tky

tky

剛試了一下,還是不行。
直接clone了一個有設欄位的views table,然後設定那個「開課師資」的node ref.的欄位作為argument。結果,猜想是因為node ref欄位格式的關係,無法顯示任何資料。

但是如果換成text或者數字格式的欄位,例如開學年,就完全沒問題。在網址上打年份,就能篩出該年開設課程的表格。

如果連正常的views表格都篩不出來,那更進階的views field應用恐怕就更難了吧!

tky

tky

view最近有很多bug噴出來
去看一下bug report找一下有沒有patch
最新的patch有到3/18號更新一下或許沒問題

我換了4.7 dev版的views就爆了><~
真慘 大家還是stable ver.乖乖的用比較好
別像我沒事找事作

搞定?

加一個views, 叫course_list
提供 page view, url 是 course_list, 用 table 顯示
arg. type: node ref., default display all value
title: %1
filter: nodetype course

之後access www.example.com/course_list
就有全course
www.example.com/course_list/師資_id
就有那師資的course 了

在師資node 加個 view reference(view field)
default value 內
select list 選course_list
arguments 內填%nid

完成! 師資node 出現師資所ref 的 課程!!!
(記得在每一個師資加argument %nid)

Joetsui's blog

唉呀~真是太巧了.
最近在拿CCK跟Views練功,
雖然網路上不乏很多前輩高手的教學,
不管是文字或video,
在缺乏體驗的情境下,
還是難免有些微懷疑以及諸多揣測,
最終還是得靠自己硬try來驗證,
在不屈不撓的毅力加持下反覆試誤,
最後也試出用這個方式來呈現資料.
親身體驗過程後,
又再次看見t大的提問,
以及j大的解法,
居然能夠理解其意,
真是倍感親切呀. XD
原來3年前, 版上多位先進早已修煉過了. XD

用發抖的手指,按照joetsuihk所說的步驟一步一步完成設定,可以顯示出用nid過濾的views table了!之前都沒想過要用nid,一直想用title來濾;真是千金難買早知道。
底下是TKY網站上的範例。
http://www.phil.nthu.edu.tw/teachercourse
http://www.phil.nthu.edu.tw/teachercourse/619
(TKY的views名稱是teacher_course,網址設成teachercourse)

不過用views field開始進行連結的時候就沒有那麼順利了。TKY按照joetsuihk的說法去設定一個「開設課程」欄位,預設值中「select list 選teacher_course,arguments 內填%nid」。
接著去特定師資中設定選單為teacher_course,arguments 內填%nid。
CCK的內容類型顯示選項,顯示entire views。

結果,「開設課程」欄位只出現「目前沒有資料」的資訊,也就是說撈不出資料來。例如:
http://www.phil.nthu.edu.tw/teacher/619

TKY試過一些改變,比如說,在特定師資頁面中,直接在arguments 內填nid的值(如619)。不過,仍然沒有顯示views table出來。

到底還差什麼地方呢?

tky

tky

版本問題嘛,TKY是使用viewfield 4.7.x-1.x-dev。
難不成是因為dev版,所以用不來?
joetsuihk是用哪個版本呢? 5.0的嗎?

若是的話,就玩完了。

tky

tky

tky兄..
小弟我目前也有遇到此問題.但我是DRUPAL的新手.看不太懂你們這篇對話的一些專用術語.
是否可以給我一個詳細的教導舉例?
我也是想做讓一個VIEW呈現所有導師的名稱點進去可以看到他們所開的課程...
之前是用BLOG來呈現..雖然可以但是和實際要表達的又有出入..
目前設置完兩個node(師資,課程)後就不知道該怎麼做了@@....
請指點我一下...謝謝

想詢問大家~~遇到一問題~~

用cck製作了兩個內容類型分別為(1)教師資料頁 (2)教材資料頁 (因為一頁是教師的介紹,一個是要放置教師的教材…教材有分類別)
之後試著用viewfield來將【教師】和【教材】關聯起來。

看著joe方式製作,自已就試著製作
(1)先至view建立一個filedb然後再 (---->建立是(2)教材資料頁的view呈現)
新增一頁面:【file_all】
樣式:表格顯示
Arguments : node revision :vid
title: %1
default display all value
filter: nodetype course
相關圖示:如附圖2009-2-12-a.PNG
-------------------------------------------------

(2)之後到教師資料頁的內容類型中新增一個
Label:教材文件,Field type: View field, Widget type: SELECT LIST
設置:Default value :教材文件
select list 選file_list
內填Arguments: %nid -->但很怪的是我都有key這了,but每次點入管理Field type: View field時我的設置也沒有看到%nid
而且在建立內容:選教師資料頁會出現多一個下拉式選單~但Arguments: 也得自已填入,但是假設我填入%nid但是再點檢視回去看%nid並無被儲存吶

整體設定-->Allowed views: filedb (就是在view中的教材資料頁呈現)

而且>口<教師頁要看到教材頁~~>w<效果出不來~~~拜託大家指點了

>w<謝謝

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

想請問各位~
使用了上文方式文製作>w<有關聯到view中我建立的filedb的頁面。
但是>w<教材檔案全勞了出來~~ =_="
想詢問能不能有辦法對製作教師頁面對的是教材文章頁面那各上傳者的檔案~~
唉~~~~ >w<謝謝~~~

而且發覺雖然在我的教師內容類型的頁面中增加一View field (它是要去關聯到view中的教材頁面)
但是我的view的教材頁面是勞出呈現畫面排版…
就變成我教師頁面關聯到view field的教材資料頁後都是拉出全部資料 ,並沒法對人員就秀人員的資料~~ >w<唔

-----教師的teacherdb-----------------------------------------------

SELECT node.nid AS nid,
node_data_field_picture.field_picture_fid AS node_data_field_picture_field_picture_fid,
node_data_field_picture.field_picture_list AS node_data_field_picture_field_picture_list,
node_data_field_picture.field_picture_data AS node_data_field_picture_field_picture_data,
node_data_field_picture.nid AS node_data_field_picture_nid,
node.type AS node_type,
node.title AS node_title,
node.vid AS node_vid,
node.created AS node_created
FROM node node
LEFT JOIN content_type_teacherdb node_data_field_picture ON node.vid = node_data_field_picture.vid
WHERE (node.status <> 0) AND (node.type in ('teacherdb'))
ORDER BY node_created DESC

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

我所要關聯的教材filedb--------------------------------------------------------------------------------

SELECT node.nid AS nid,
node.vid AS node_vid,
node.title AS node_title,
users.signature AS users_signature,
node.type AS node_type
FROM node node
INNER JOIN users users ON node.uid = users.uid
WHERE (node.type in ('filedb')) AND (node.status <> 0)
ORDER BY node_type DESC

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

想詢問大家~謝謝
爬了好多文還是沒辦法用arguments 將a和b的資料關聯起來~ >w<…

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

建立兩種內容類型如下
(1)教師資料庫 (teacherdb )-->a
(2)教材資料庫( filedb )--->b

之後按上述教學先建置一個 filedb將教師上傳的檔案以view的方式先排列出來
然後再到內容類型中的教師資料庫 (teacherdb )設置一個View field
將Default value設置為%nid (主要依使用者id去對相對應的id)
Allowed views: 再設要到的教材資料庫( filedb )~~
但速……就關聯不出資料~~

請大家指點方向了~~ >w<…3q

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

首先澄清一下觀念,要用viewsfield之前,

  1. 必須先在兩種內容類型之間透過user reference或者node reference的欄位建立關聯。
  2. 關聯建立之後,才可能建立一個views,用關聯的欄位作為argument過濾出資料,
  3. 接著才可以用viewsfield去加以顯示。

judy720107的第一步有先作過了嗎?比方說在「教材資料庫」的內容類型中,設定node reference欄位,關聯到某個「教師資料庫」的標題欄位?或者是設定user reference,關聯到「教師資料庫」內容類型的作者id(如果「教師資料庫」類型的內容作者並非教師的話,這樣的關聯是沒有意義的喔)?

tky

tky

tky~~有了解概念了~但是還是關聯不起來說~~

(1)至「教材資料庫」內容類型增加一個User reference的fields
設定勾選:Reverse link和User roles that can be referenced、User status that can be referenced:啟用
(2)至view設計一教材資料庫列表~如附圖2009-2-17_a.PNG要勞出所要呈現的畫面
有先列出教材資料列表~但是沒法像joe所說的如下: (我是不是少這東西沒出來)
---------------------------------------------------------
www.example.com/course_list/師資_id
就有那師資的course 了
----------------------------------------------------------
-->我的就沒法xxx.xxx.com/filedb/all_file/admin(使用者名稱)
---------------------------------------------------------------------------
(3)有至「教師資料庫」內容類型增加一個View field的fields
設定勾選:Force default和Allowed views: 勾選我(2)所命名的view的filedb、Use a common default value for all nodes if the user does not override it on the node form.勾選。

(4)我的view版本
; Information added by drupal.org packaging script on 2008-12-16
version = "6.x-2.2"
core = "6.x"
project = "views"
datestamp = "1229455242"

謝謝你的解說~>w<…

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

tky想說,慢慢來會比較容易。先一步一步確認。

就judy的第(1)步來說,judy有在「教材資料庫」的個別內容中的user reference欄位中填入或者選擇user id嗎?要先建立資料,要不然views是撈不到東西的,you know.

就judy的第(2)步來說,judy能否在views的preview預覽畫面中,透過測試的user id(顯然是admin)撈出資料嗎?在views 2裡頭其實不一定需要製成頁面,顯示模式用defalt就可以了。這樣也不需要設定網址。重點是預覽畫面一定要出來,確定能夠透過user reference撈出就judy要得資料。

就judy的第(3)步來說,judy必須先確認前面兩步都有作到,這一步才會運作。確認一下,「教師資料庫」的views field建立後,judy有在個別的內容中填入%id吧?views field的「預設值」是沒有作用的,所以每一筆都必須自行填入。

tky

tky

tky~
不好意思我又來了!! 我…還是勞不出來…都有照做>w<…

(1)在建立內容「教材資料庫」有各別選擇user id
如附圖2009-2-17_b.PNG
(2)第二步有重做了~能在views的preview預覽畫面看到全部上傳的教材資料。
如附圖2009-2-17_c.PNG
(3)建立內容「教師資料庫」中各別填入%id!
如附圖2009-2-17_e.PNG

>w<…謝謝 (合十)

而且我還想說把(2)的部份再加入user reference的部份看有沒有勞出使用者的欄位
如附圖http://drupaltaiwan.org/files/2009-2-17_d.PNG
但也速沒效果…

而且我view中的Defaults: Configure Argument 內容: 使用者 - (field_user)也有設
如附圖2009-2-17_f.PNG

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

不知道這樣的回答對不對,因為我努力看了還是不懂您的問題。
個人猜想,您在teacherdb的Views頁面中,想要顯示filedb的內容。

那麼,請您在teacherdb的Views編輯頁面中,找到"Relationships",新增一個"Relationships"->內容:教材文件(Node reference - Appears in: XXX)。
選項中,Require this relationship不要勾選,因為有可能某個教師沒有教材。

請試試看吧,希望對你有用。
***************************************
Drupal 水隆投
牛股們(NewGoodMan)

thomasfan:
謝謝>w<你,但速…這樣的方式不能判別那些教材是那位教師的~
因為啊~我有兩個node一個叫teacherdb,另一個叫filedb。
就是在teacherdb的node中,建立一個views field來列出,這個教師上傳過的教材。
然後以teacherdb的node 的user id作為argument、濾出教材資料(filedb)的views field,直接在teacherdb的頁面中,看到他有那些教材。
看了大家指點的方向…>w<我還速關聯不起來… (orz)

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

(+++撒花片~~我弄成功了~~ya)
我改用Node reference來關聯~~ >w<謝謝大家~~
只是這Node reference來找關聯的使用者好像會很不太好操作的感覺~~

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

這個部分應該是CCK的議題了。
您在設定Node reference時,可以有幾個選擇項目,所表現出來的選擇方式也不同。這部份其實只要多試試很容易了解的。
比較好玩的是,如果您的files(教材)很多,或是教師資料很多,您還可以新增views來進行篩選,然後放在CCK的欄位中(Advanced - Nodes that can be referenced (View)方便用戶勾選項目,而不會一次將所有的資料列出來讓用戶選擇。
***************************************
Drupal 水隆投
牛股們(NewGoodMan)

想詢問大家一估問題說 (突然卡住)

突然想到一個很大的問題~~
像師資頁面node是採用view field去連繫教材頁面的view。
而教材頁面node是採用Node reference去連繫到師資頁面node。
但問題來了…

那麼像這部份像目前的權限劃分為三個角色。
網站最高管理者、內容管理者、老師。

目前使用view field和Node reference的方式去將兩個頁面的相關資訊串在一起很方便。
但是當老師它登入系統時,希望他自已能上傳檔案至教材頁面… (然後這樣就變成每次老師上傳檔案就得再輸入自已的帳號名稱,感覺很不便利性的感覺)
然後若想將很多頁面統整在一個頁面中又需將它連繫相關聯性,這樣也變成每次操作的使用者都得像下圖一樣的輸入自已的帳號名稱…

>w<想詢問大家的意見~~

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

tky提一個雖不滿意但還可以接受的方法:

在這個情況中,老師需要輸入自己的姓名,連結到自己的node,是因為judy把這個欄位的widget設定成「自動完成」的類型。
簡單一點的方式是可以設成「單選鈕」,按一下就可以了,比較方便。

可是judy可能會問說,那老師還是得自己去選啊!而且人很多怎麼辦?
這個部份就要透過views的幫忙了:judy可以設計這個node reference欄位的選項清單不是連結到某個內容類型,而是連結到一個特定的view,在view中可以利用user id作為argument,篩出符合當前使用者的老師node。這樣可選擇的項目就只會有這個老師的node。同時,在這個欄位中的預設值部份選擇「必填」與數值數目為「1」。這樣至少可以確保老師一定要按這個按鈕。

以上方法的缺點就是:如果負責輸入資料的不是老師而是管理員的話,就沒法子篩出特定老師的資料了。管理員得透過角色扮演的模組才能替老師輸入資料。

沒有測試過,不過理論上應該可行。

tky

tky

tky:
意思是說將教材頁面node的內容類型中的值將node reference欄位設為 View field
讓教材頁面的node連繫到教師的view頁。而教師的view中的Arguments設的值使用者: Uid、%1
以及讓內容型態中的教師頁的預設值設為必填1。

照tky 你說的部份實作 >口<…還是不行說…沒辦法對到相對的資料…感覺雖然是使用view field去連繫到教師的view
但還是得輸入一估數值給它才能對到的感覺… (view真是博大精深啊…) >w<…

thx

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

好難喲 (views的進階用法)
還有這篇如何在node中以viewfield顯示所refer的nodes view?
看的霧煞煞的
按照joetsuihk的作法 可以在師資的node列出課程的field來
那現在有兩個content type:course 及teacher
一個老師可能有多個course
可以用views以表格方式列出所有course及任課老師嘛
如:電腦概論 王xx
計算機概論 李yy
網路應用 王xx
謝謝

現在輪到我在跟viewfield奮戰了..
果然也搞了好久!
一點小小心得報告:
1 假設Views的設定ok(如前面 j大 的方法)
2 權限的設定卻是被忽略了,後來才想到. 原來用CCK新增的node reference欄位, 要開放給匿名使用者view的權限(在權限表當中的 "content_permissions 模組" 區間), 這樣在viewfield 的設定效果才能夠讓匿名使用者看見.

先醬子, 後面有新的發現再跟大家報告囉~