您在這裡

請問CCK可以直接建立於此CCK相關的資料型別相關嗎?

各位站上的高手,我又來發問了,在一陣一個人的跌跌撞撞之後(也在此感謝之前回答的站友),小弟想建立由DRUPAL所建構而成的網站已經快可以公佈在這邊的討論版了。但還是有一些較重要的問題始終沒辦法解決,可能是小弟對於DRUPAL下的功夫還不夠,但對於英文的苦手可能常常會造成找不到DRUPAL英文官網很多的解答訊息,所以還是跑上來這邊發問了。

問題:
請問CCK可以直接建立於此CCK相關的資料型別相關嗎?

問題描述:
我表達能力不太好,舉例來講我現在需要建立一個有關於跑車的"CCK資料A",在我建立好之後,必須提供其他使用者可以由這個"CCK資料A"下直接建立另一個汽車零件的"CCK資料B",呈現類似回應(迴響)的表現型態,但這個回應是獨立的資料型別 (CCK資料B),因為這個"CCK資料B"需要依照內容的欄位在行建立其他的分類(例如避震器的分類)。
最後需要達到的效果是:可以多位使用者點進去車款,可以直接新增該車的相關零件,而零件也可以再網下建立相關資料

謝謝您的回答,我再試試看!
其實關聯式資料庫我也知道,可是在走不少冤枉路之後總想先問問看方向,畢竟和這方面的知識和經驗還不如站上的諸位。
如果問了失準的問題也請多多包涵。

謝謝兩位的回答小弟在這裡整理一下所獲取的四種可以解決方法以及所面臨到的問題,第一是因為這問題對於CMS而言應該是很重要(要管理內容的話資料與資料的關係結構理所當然是很重要的事),第二雖然小弟是新手,但我相信一定會有更多的新手出現,也可以讓新手參考一下,雖然可能是微不足到或不是最好的辦法:

方法前言,必須要先已經建立好兩種資料類型(以下簡稱CCK) ,還有安裝VIEWS模組

方法一:
  直接修改template.php的程式碼,再使用VIEWS過濾條件進而達到要求,其實我沒有很深入的使用因為這方法,但推測是將兩個資料類型建立一個關聯KEY再將兩個NODE串聯成一個NODE;沒有使用的原因是需要template.php的基本知識(前提是對php有一定程度的了解),雖然沒有使用但推測是最節省系統資源的方法,缺點是門檻較高。

方法二:
  安裝"Node Reference"、"nodereferrer"、"Nodereferrer Create"三個模組,在需要關聯的CCK A上建立Node Referrers類型的Read-Only List With Context Adding欄位,在編輯完資料類型A之後有新增的欄位可以建立,這樣就可以在底下顯示出相關的其他CCK,這方法就"方法的張力"來講其實是相對來講較差的辦法,而且也無法直接使用VIEWS過濾出特定資料,優點是可以直接很快速在還未建立相關CCK的情況下直接建立。

方法三:
  安裝"relativity ",安裝及設定模組完,在CCK下會多出Children nodes與Parent nodes的欄位直接顯示相關CCK的TITLE,好處是一次建立兩個CCK的的關係欄位,讓資料結構不容易亂掉,缺點是有關係的兩個CCK是有從屬關係的並非對等關係,也無法使用VIEW取得兩個交叉的資料。

方法四:
  安裝"Nodefamily"、"Views fusion"兩個模組,這模組式可將兩個VIEW直接結合成一個,簡單的來講就是將次要的VIEWS導入主要的VIEW一起顯示,這模組使用上還蠻有趣的,終於可以順利的使用VIEWS查詢到兩個CCK的資料,但是延伸的問題也跟著來了,小弟在將VIEW b的資料導入VIEW a之後居然資料不是順利銜接,而是將VIEW b的資料分配到每個VIEW a的元素。
  假設現在建立很多VIEW a(內容為你、我、他)以及VIEW b(內容為包子、饅頭),照正常的理論來講關係是"吃"與"被吃",也就是
  你 (沒連接資料)
  我 - 吃 - 包子
  他 - 吃 - 饅頭

但是卻變成
  你 - 包子
  你 - 饅頭
  我 - 包子
  我 - 饅頭
  他 - 包子
  他 - 饅頭

簡單的來講就是每個子元素都被分配到每個母元素,讓小弟看了結果馬上呆滯三秒,然後馬上想辦法在 VIEW a 以及 VIEW b 上想辦法增加"過濾器"進而得到正確的從屬關係,但還是沒辦法正常的顯示。

以上就是小弟目前嘗試過的幾種辦法,也可能是對VIEWS的了解還不夠多,所以沒辦法直接過濾,在想辦法的過程中也讓小弟白了很多根頭髮XD(這不是誇張話),希望站上的高手能給予些許指教,就算一兩句也不會太少,或是有關於修改template.php內結點關係的入門文件(中文佳ˊˋ),也希望能夠提供,最後謝謝拿出耐心看完的人。

你詳細列出的方法還滿精彩的耶... :D
我沒有想過用relativity和views fusion
我那時直覺提示是用方法二,我說說自己想像的方式,看看對你有沒有幫助

發表的介面應該可以解決,A content type發表後,在node瀏覽頁面裡,
用自訂links的模組,custom link來增加在links裡頭
只要使用者點就可以進入到B content type的介面
B content type的介面裡需要包含關聯到A content type的node reference欄位
到這裡介面的部份完畢

呈現的問題才是關鍵
增加一個views block,用filter篩出所有B content type跟這個content type關聯的區塊
然後利用argument的屬性,篩出所有與這個node id關聯的B content type node
這部份要如何做請看之前的課程講義
然後把這個block開啟,放在content的region中
(大部分版型有印出content這個region,要注意一下,沒有就得自己加上去了)

呈現要更完美的話,記得在content type的設定中display選項好好設定
可以呈現full node,或是用list的方式搭配views theme wizard修改template.php

以上,不知道有沒有誤會你要的功能 :)

--
from open mind to open source~

--
from open mind to open source~

謝謝jimmy的回應:
  目前小弟界面的問題使用node reference很正常,也如同jimmy在文中提到的,關鍵是在呈現,這也是讓小弟困擾的地方。

  對於區塊過濾的問題也是沒有問題(使用簡單的Node: Type過濾出想要顯示的特定資料),也在區塊的設定頁面上指定了該views的頁面為區塊顯示區域,我想問題出在views區塊部分的argument上面(argument設定請看附圖)。

  在Node Reference設定為之前課程講義內所使用的"Return Page Not Found"時,區塊就根本沒顯示,而在改為Display All Values後,卻又沒有和本來的區塊整合在一起,在一段長時間的不斷嘗試各種方法後還是百思不得其解,也看了SI505: Drupal Customization and Configuration的教學影片,但還是沒辦法讓他整合在一起,實在是一個頭兩個大。

  小弟的最終目的是建立一個多人使用的地圖誌,雖然市面上已經出現相同的服務,但小弟想還可以讓這種服務更好,並且可以依照我自己所思考的架構去建立一個和其他人不一樣的多人使用環境,現在卡在資料與資料關係的呈現上面,最好的情況是將地點與圖片轉為同一個呈現表單,這樣也可以做較人性化的使用介面,網址也將在這方面的功能搞定之後公布,最後還是謝謝回答及耐心看完的站友。

看起來設定檔沒錯,出不來的問題有可能是
1. B類型中有node reference欄位,並非A類型,A=>B的關係為一對多
2. filter設錯濾掉了
3. 需要block顯示的頁面沒有nid,也就是說那一段arg的code表示當瀏覽者瀏覽到node/nid時才有作用
4. cache住了,所以把devel裝起來清空cache看看,
--
from open mind to open source~

--
from open mind to open source~

抱歉這次回文回的比較慢,主要是因為打算在這次把目前進度post 出來,也方便版上的站友真的了解小弟的問題在哪
以下是小弟目前在進行的東西Act-noe
還算是在開發中,功能也都不完全,所以還沒放到站上專案分享的地方,待專案的完成度更高些在行正式公佈。

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

其實我搞了一個大烏龍,之前的關連我想達到的是在上方的"taiwan's"裡面的Google Map可以顯示其他關聯的圖片
結果我誤會暸板上的講義是我達到的效果,可是也因此解決了地點細部內容左邊的圖片區塊,也算不枉站友的回答@@

to jimmy
謝謝您明確的回答,幫了我很大的忙。

to BlueShow
也感謝您的回答,那篇文在小弟也拜讀過,但因為小弟是想最好使用者也可以在不受限的情況下建立類別,所以只好放棄那葛方法,謝謝。