您在這裡

{難度不低}怎麼讓不同的分站使用同一套資料庫而且只需要輸入一份內容

amd168's 的頭像
amd168 在 2007-07-05 (四) 19:56 發表

要是能解決,有可能整個學校都裝一套 drupal 就搞定了
進入頁面選擇某某系組,就可以進入個別的系組網站
但是重點在有些資料內容是共用的,不能個別輸入
不然用一套 drupal 安裝許多個資料庫就好了~~
就是某些 nodes/views/menu是共用的會出現在全部的分站
但是某些 nodes/views/menu 就是指對該分站顯示

比如現在有一個提供流浪狗收養的機構
台北是總部,全國有數個分部(新竹、台中、嘉義、台南、高雄)

總部能不能使用 Drupal架設一個網站
從網站入口可以讓各地愛狗人飼選擇就近的分部網頁,
進入台北總部的聯絡方式頁面就顯示台北總部的
進入嘉義分部的頁面就顯示嘉義相關的,

如分部現有可供認養的狗狗的品種,
狗狗的種類也有好幾種,台灣土狗、日本秋田、德國拳師狗、英國牧羊犬...
進入台北總部頁面的就只顯示台北目前可供認養的狗狗品種(日本秋田、英國牧羊犬),
進入台南分部頁面就顯示(台灣土狗、日本秋田、德國拳師狗)...以此類推。

暫時的想法
1.建立分部的 Vocabulary,用來區分哪些 node 屬於哪個分部網站,
2.使用 CCK 的text (文字選擇)欄位
這兩種方法理論上都可以做到只顯示該分部的相關 nodes。
後者可能比腳好,原因是 文字選擇欄位可以 key|value,texonomy的方式不行。
key|value 的方式就是讓 user 看的的是、高雄XXX分部」、「台北總部」,
而傳進去的參數可以是"KHH"、"TPE"。

但是阿問題就在於,怎麼讓user選擇,怎麼讓 Drupal 顯示內容的時候能依照指定的參數顯示整個網站的內容?

重點是這些不同顯示的內容(nodes)可以是重複或者不重複的,
反正 create node 的時候要選擇「分部」(可以多選),問題是怎麼讓 user 選擇、又怎麼只顯示 user選擇的那些內容?

請各位前輩幫幫忙指點一下迷津吧! 感謝再感謝!

似乎只是分類上的問題吧!!
個人沒有太多架站的經驗,把想到的兩個可能解法讓你作參考。

1. 不同的 taxonomy:
不同項目有不同的分類,在輸入文章的時候可以選擇不同的分類。這樣文章就可以跑到指定的分類去了。
想找單一分類的人就到那個"類別"去找東西。
如果有更進一步的分類要求,再用 view 模組去分類,來建立連結。
這樣的作法其實在這個站就有,討論區、手冊的發表方式就有類似你說的功能。
(如果你沒發現,可以在發佈文章的畫面找找,有一個分類的下拉式選單)
因為看起來只是要求分類清楚,並沒有說「南區不能看到北區的內容」,所以這樣應該足夠。

2. 使用 Organic groups 模組:
它其實是 OG 模組家族的"根",可以再加入其它的模組來加強他的功能。
讓你把使用者分群組,有自己的組長,自己的首頁,還可以決定一個群組要不要開放自由加入,或是要經過組長邀請。
如果隱私性要求較高,可以用這個模組試試。
不過我個人沒有使用這個模組太多的經驗,看到的文章都是英文的。所以使用上的難度比較高一些。

這種「分類」的需求,感覺不是只有某些站的特定需求。
所以建議可以去看看其它用 Drupal 架的站有沒有類似的效果,去看看別人是怎麼作到的。
有時候這樣比自己一個人想破頭快得多。

我只是一個撰碼員,靠寫程式過活。
自從 Drupal 在 4.7 版的時候知道他的存在,但是後來跳去其它程式語言很久沒回來。
變成 D5 比較熟,D6 知道一點,D7 還在學的狀況…

drupal可以輕易的為不同網址設定不同的theme、網站名稱、首頁、導覽列(primary menu)...等基本的設定
也就是一個單1資料庫,對多網址多入口的架構
分類還是可以單純的來做分類的功能,不需要變成其他的功能
玄機就在sites/www.xxx.com/settings.php裡頭的$conf陣列
可以看看sites/default/settings.php的說明

先決條件是,網址要不一樣,用sub domain來達成最好
若把drupal裝在子資料夾的話,要達成這種 1 database => multi sites的架構就不太容易了

--
from open mind to open source~

非常感謝各位前輩的不吝指導
小弟感激不盡

可能小弟的問題自己寫的不是很明
問題好像不是只有單一資料庫多的網站這樣單純
使用 OG, 的確可以達到多個子網站或者「群組」的目標,但可以「共用」的這部分資料好像還是需要逐一網站新增,當然以後也需要每個網站逐一修改,這不是懶惰的小弟心目中的上策。

使用 Texonomy分類應該是最合乎 Drupal 本性的解法,但是問題在於包含從 head, page, node, 等等組合而成的頁面,怎麼分別顯示例如「美東分會」、「南高麗分會」,不止是建立一個「美東分會」的分類連結而已,而是「美東分會」是整個\站台頁面從 head到選單到內文都只有顯示「美東」這一"term"的內容而已,
舉例言之,所謂的「美東分會」在網站的結構上是歸類於「美東」這一分類/Texonomy
但是在頁面上的呈現好像整個站都是「美東分會」,連選單的內容都可能不同,
比如選單上有個「關於我們」的連結,要如何才能做到(選擇)-> 「美東分會」進入後看到的「關於我們」點進去是關於美東分會的,如果選擇其他分會,進去也是會有「關於我們」、「聯絡方式」等等的選單卻都是連結到各自分會的內容?

問題在於又要某些資訊(node)需要共用的同一份即可,但是又要跟隨不同的分站做選擇性顯示,
例如「狗狗種類」介紹,只要輸入一遍狗狗的品種分類,就可以同時顯示在到全部分站,
但是又不是通通顯示,而是要依照分站當前可提供收養的狗狗有的才顯示,沒有的就不顯示,
這樣每個站台都需要同一份也只有同一份資料,但是卻又可以根據分站的不同決定顯示與否

小弟想到的作法也是分類,就是建立一種 node type「狗狗品種」,關連到一個 checkbox 型態的文字欄位 vocabulary 叫做「分站」,
如此就可以在建立狗狗分類資料的時候針對要顯示這份node的「分站」逐一打勾,
"以後"就可以依照分站顯示各自的狗狗分類,
到目前為止好像還蠻清楚
問題就在"以後"二字
建立了資料「以後」要怎麼顯示?怎麼讓使用者選擇想要瀏覽的分站,然後怎麼讓 drupal 知道要追蹤分站的URL參數或者Session來決定顯示那些node,
這正是小弟的問題所在。

使用views是方便顯示某種自訂條件的資料,但是像這樣「整個站」都要切換的方式
不就要通通都要建立 views達成,也許這也是一種可能方式,但是這樣連 menu都需要用views去做出來了,想到複雜性就頭大。

最後一種方式是改成 sites/www.xxx.com/settings.php
這樣是可以一套 drupal 程式 serve 好多個資料庫,
但是這樣可以做到某些資料共用(同一份)某些資料又各自不共用嗎?
而且還要不重複輸入,例如輸入一篇文章可以勾選顯示在那些分站上,這樣可以做到嗎?
可能還有待熟悉 settings.php 設定的大大們指點一下迷津。

分站越多,輸入一次用在許多分站(但不一定是全部分站)這個功能的重要性越大
這樣「總會」的資料可以顯示在特定的幾個或全部分站,分站又可以顯示自己的資料內容,
這樣的 CMS,可以算是超級上面的那一級的了吧?

小弟想到的還一個方式就是使用 localizer 的方式(是方式而已,不是利用多國語言處理這一問題),這些多國語言的模組可以把「切換分類」的參數附加到系統上,
點一下英文整個網站就只顯示標示為英文的內容,這絕對是一個可行的解決方法,問題在於要去 trace 這些巨獸模組的內在程式碼與邏輯,
工程不可不為浩大,
要是有比較 dirty (drupal core hack), 但是可能更簡單有效的解法,也已經是上策了。

感謝大大們的指導,希望能有更接近可行的解決方案出現。

你的需求,就我講的絕對可以達到
為什麼要單一資料庫多個站,原因也是為了資料要共用,呈現不一樣
不同menu、不同theme可以輕易達到
試看看吧!

OG不適合做為呈現上的改變,當然也行啦
taxonomy theme算是比較貼近這種需求,不過就你的站的架構,用taxonomy theme有點多此一舉
而且要動到的code還比較多

/************************************************
* 你的回饋,讓Drupal越來越茁壯 * Drupal社群越茁壯,你就越有力量 *
************************************************/

--
from open mind to open source~

真的很感謝各位前輩的耐心指導

請問 jimmy 要讓不同分站決定顯示哪些屬於自己的分類的 node 要使用 theme 解決?

settings.php 方面, 小弟晚上找了許多 "multiple sites from single installation" 的討論內容, 不知道理解的對不對
www.domain.org/sites/default/settings.php
www.domain.org/sites/www.domain.org.abc/settings.php
www.domain.org/sites/www.domain.org.xyz/settings.php
這樣可以讓預設的網站跟個別網站擁有各自的網站設定

$db_prefix = ''; # 這是用來給不同的網站(domain/subdomain)區分使用哪些資料表,可以用陣列表是複雜的個別設定,就是針對不同的範圍使用不同的表格

$db_prefix = array (
'default' => 'site2_',
'users' => 'main_',
'sessions' => 'main_',
'role' => 'main_',
);

這樣可以指定用戶資料庫是哪個表格、session又要存放在哪個表格
這部分甚至可以用正規表示式做更複雜的設定

只是小弟到這裡只能理解例如設定不同的網站的 node 都使用同一個資料表
但是還是不明怎麼決定顯示屬於自己分站的node的邏輯要在哪裡處理?
請問 jimmy 要讓不同分站決定顯示哪些屬於自己的分類的 node 要使用 theme 解決?

taxonomy + views
請問一下 joetsuihk大大
不曉得 Views Argument API 這個模塊能不能有幫助?

www.domain.org/sites/default/settings.php
www.domain.org/sites/www1.domain.org/settings.php
www.domain.org/sites/www2.domain.org/settings.php
www.domain.org/sites/www3.domain.org/settings.php

default可以刪掉沒關係,www1 ~ www3都用同樣的資料庫,但是唯一不一樣是下面的設定

$conf = array(
'site_name' => '網站1',
//'theme_default' => 'garland',
'site_frontpage' => 'www1_home',
'menu_primary_menu' => '3',
);

至於$db_prefix可以不需要設定~

分站的呈現不同,有兩種方式,一種是同樣的theme,那就把block顯示定義在www1_home路徑裡頭,其他的不要顯示在這裡。
另一種比較方便的方式,就是copy theme,因為5.0以後可以針對不同theme設定不同的block配置,就可以很方便彈性的管理該網址的版面配置,這也是比較建議的方式,但比較消耗資源。

弄一個測試站來試看看吧,可以先用127.0.0.1, 127.0.0.2....來測,就知道了~

/************************************************
* 你的回饋,讓Drupal越來越茁壯 * Drupal社群越茁壯,你就越有力量 *
************************************************/

--
from open mind to open source~

分站的呈現不同,有兩種方式,一種是同樣的theme,那就把block顯示定義在www1_home路徑裡頭,其他的不要顯示在這裡。

請原諒小弟資質魯頓,這部分比較看不懂,"把block顯示定義在www1_home路徑裡頭" 是指設定成首頁的node 的 tpl 嗎?
"其他的不要顯示在這裡"指的又是什麼?

很抱歉問了這麼多問題,再次感謝大家的熱心幫助!

www1_home是指定的首頁路徑,譬如node/123是你的首頁。
亦可以用panels和views產生,然後便成為一個路徑,可以存取到對應的頁面。

block可以設定根據不同路徑來顯示,如node/123顯示網站1的最新消息block,但其他的路徑就不會顯示此區塊
如此便可以達到不同子站有不同首頁的效果。

還是建議用方法二,用不同的主題來做方便的多。進階一點,不同主題也僅僅是在theme中新增一個你資料夾的名稱,然後加入style.css而已。可以看看garland的和子主題minnelli,就知道我在說甚了~

其實以上的作法都很進階,不過在drupal來說不難達到,需要一些經驗而已

/************************************************
* 你的回饋,讓Drupal越來越茁壯 * Drupal社群越茁壯,你就越有力量 *
************************************************/

--
from open mind to open source~

問個問題,對于subdomain設定,比如說我有 sites/sub1.example.com,是不是在apache 的httpd.conf or vhost.conf中要把virtualHost部分要設好,不然光把sites/default的東西拷貝一份放在sites/sub1.example.com下面好像不管用,即使修改了$conf也不行,用http://sub1.example.com/瀏覽找不到頁面。

在drupal的.htaccess中能設定嗎?因為讓ISP host網站,我沒有辦法去改httpd.conf,在drupal中能不能設定?

謝謝。

理論上是不行,這是hosting一般的限制方案
可能跟他們買,就只能一個站
--
from open mind to open source~

--
from open mind to open source~

新增一個用來識別網站的 vocabulary 分類組, 比方說「region」,並且指定你要關連的 node type
用來放分類名稱, 例如「高雄」、「東港」、「大腹鮪魚」... (點點點, 流口水的 fu )

使用 Views 模組為各個分站建立各自的「frontpage」(不是讓痿軟給買去又始亂終棄的古代超好用的網頁編輯軟體^^)
妳有幾個分站就得建立幾組新的「frontpage」,然後在 Views 的過濾條件 Filters, 選擇「Taxonomy Term」,然後指定使用剛剛新增的分類「region」

在水滴路徑的 ./sites 目錄下,複製 default 資料夾另存成妳分站的網域名稱,每個分站都一組,不可以厚此薄彼。
然後在這些各個分站的設定資料夾修改裡頭的設定檔「settings.php」,應該這裡就是 jimmy 說的 $conf 變數修改的意思,「$conf」這是用來覆寫水滴系統變數的,例如指定站台名稱可以用「site_name」變數,要替各個站台指定版型風格就改「theme_default」變數,看那個分站妳想使用那個風格,直接把風格複製到 ./sites/xyz.abc.com/themes/ 內, 比方說妳要用「garland」風格,就整個複製到 ./sites/xyz.abc.com/themes/garland 就可以
重要記得覆寫網站主頁「site_frontpage」變數成剛剛步驟2 建立的 Views

搞定收工,以後新建這組「見人說人話見賤人說爬說語」node 時候只要勾選要顯示到哪些站台(region)的分類即可

這樣只要把「華西街分站」跟「豆乾坊分站」不同的 theme 進行不同的 block 設定
應該是可以做到樓主想要的效果的,同意 Joy 的話,建立很多 Views 的工作看來是免不了的。

ps.
1. 賤人與花西街等名詞並無輕蔑或影射任何惡意的含意,當然更不可能有性別上的意涵,請閱讀者明察。
2. Yelban 自己也頗期許有朝一日也能成為另一種「鑑人」之流,鑒往知來倒是不敢想,倘能區別那邊的東西好吃就心滿意足矣。

覺得有點不可思議,抱著嘗試的心情試試看...結果一次就成功了耶~
yelban果然厲害。因為不同版型可以搭配不同區塊的配置,所以不管是圓頭的還是三角頭的爬說話,都可以通啦~

我是MIS,略懂mail、http、dns、proxy server
習慣使用redhat系列linux
debian系列摸索中...

$conf = array(
'site_name' => '網站1',
//'theme_default' => 'garland',
'site_frontpage' => 'www1_home',
'menu_primary_menu' => '3',
);

關於 menu_primary_menu, 請教一下, 安裝完之後, 系統預設會有 Navigation, Primary links, Secondary links 三組 menu, 可是看了一下, 都沒有編號. 再看了一下 menu_custom, 也沒有編號, 那麼上面的 'menu_primary_menu' => '3' 裡面的 3 是哪邊的呢?

後來又想了一下, 就進去 Primary links, 第一層就有個 menu, 他的 id 是 89, 就改成 'menu_primary_menu' => '3', 但測試結果發現 menu 還是一樣的? 請問是哪邊改錯了呢? 這個和 Garland 會不會有關啊, 我記得好像在哪裡看過說 Garland 的 menu 設計比較特別.