您在這裡

在任何一個網頁中插入drupal的內容

annting's 的頭像
annting 在 2008-12-16 (二) 11:48 發表

實驗出了一些東西,覺得很有趣,po出來和大家分享。

開始的需求其實和amd168 在這篇文章要求的有點像,可是目的網頁卻是.html...於是,開始在drupaltaiwan上狂找。不用google找的原因是因為,google出來的東西也是以drupaltaiwan為主。好,結果就找到了這篇:
把 Drupal 的功能,套進自己寫的程式裡頭
過程略過,以下是結果:
原始碼 ann.php

<?php
//chdir('../drupal');
include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$view_name = 'views_lib'; //name of view
$limit = 10; // number of returns
$view_args = array();
$view = views_get_view($view_name);
print views_build_view('embed', $view, $view_args, FALSE, $limit);
?>

解釋一下。import後面是template的css,chdir後面是ann.php所在,views_lib是建立在views中的id,limit決定要抽多少則node出來。
真好,這下子無論網頁在哪裡,插個 就可以把drupal中的東西撈出來顯示。全校就一套drupal與資料庫,各處室自己做的網頁就可以包含自己的消息。
結果:
view

後記:
更好的辦法:https://drupaltaiwan.org/forum/20090401/3279#comment-10691

附加檔案大小
Image icon Noname.jpg45.64 KB

啊,差很多呢。假如某單位自己用MS frontpage寫了個index.html (default.htm?),說不會用druapl,可是又要你把drupal網頁中的部分內容坎進去,那就只有可以用了。
另外,你用...code>把帶有 <, > 符號的東西包起來就可以正常顯示了。

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

既然是用 iframe
那一樣都是顯示外部網頁
所以不管哪種方式,對不會用 drupal 的人都是沒差的
對他來說同樣都只是在網頁內插入一個 iframe 然後設定 src 這種單純的 html 作業而已
就你提的需求來說,就變成繞遠路了
其實直接把 iframe 的 src 設定為 drupal 內的某一個路徑就可以了
差別只在要不要讓該路徑的輸出套用 page.tpl.php 罷了

你可以將沒有 layout 的輸出集中在某個路徑底下
例如我有幾個路徑的頁面:
outside/1
outside/2
outside/3
希望讓外部網站嵌入頁面

接著在目前版型內
複製一份 page.tpl.php 然後更名為 page-outside.tpl.php
然後 page-outside.tpl.php 裡面,直接把 layout 的部份都砍光,剩下 print $content 就行了
這樣的好處是還會載入 drupal 的 css 或 js
不需要自行 import drupal 的 css 和 js 檔案

如果模組內使用了 drupal_add_js 加入了 Drupal.settings 資料到瀏覽器端供 js 使用
以你的作法,這部份就失效了

感謝 最近剛好有這個需要
原本我們的網站是用drupal架的
沒想到英明偉大的縣網要求主機代管然後所有學校系統全改成統一的版本(schoolpad)
然後把資料全轉移到新系統上
想來想去 似乎用iframe把node插入到新系統的網頁中比較快

想到一個新的想法
透過在網址後面附加 get 參數 (?view=outside 之類的)
讓 page.tpl.php 來判斷 layout 有無的切換

然後 views 的部份改用 teaser views 來製作
就可以利用node在套版的時候
判斷 get 參數來調整 node 的連結,讓路徑也加上同樣的 get 參數
讓 page.tpl.php 調整輸出 node 時的 layout

就可以在不修改 dns 設定,不使用 session 的狀況下達成需求了
有需要的話,晚點有空我再把詳細的作法試出來

可以請問hom,詳細作法要如何做呢?感謝~~~

目前我的遇到的問題是-
有一個主站(校網,有公告系統,用views將資料呈現在首頁),數個分站(各單位網站)分站中的首頁,鑲入用iframe包著主站中自已單位的公告(在views中產生一個page,ex:news_a,並生出page-news_a.tpl.php,刪光只留是 print $content ),到此都ok~(如附圖1)

可是再點分站中,鑲入的單位公告時,連到公告內容時(iframe中的內容又連回主站),外框又會跑出來了~~~(如附圖2)

不知道有沒有啥方法還是模組是可以分享drupal的內容在不同的網站之中??

謝謝~~~

Drupal真是高深莫測~~讓人又愛又怕受傷害啊^^

試試看用 domain_access 模組
可以依照網址的 domain name 來區分成不同的子站
但是資料庫其實都是同一個
然後把某一個子站的版型改成只輸出內容的部份來給外部網站的 iframe 使用
就不用特別去修正 views 裡面的連結了
只是這個作法需要用到兩個 domain

It's work!!

感謝hom的指點~

我除了試domain_access 模組外, 另還試了-
用子目錄+第二個domain,例如-
/sites/default
/sites/output.mysite

然後再/sites/output.mysite/settings.php裡設-
$conf = array(
'site_name' => 'output',
'theme_default' => 'garland',
'site_frontpage' => 'outupt_home',
);
其實和用domain_access 模組是不差不多的功能,也是做一個和原主站共資料庫,但可用自己的板型,以供輸出(給別站用)的分站~

另外想到,如果只是單純分享某些固定網頁的話,也可透過theme key模組+配合版型,達到效果~

現在就剩用"iframe"鑲入資料時,資料過多時iframe會出現scroll,這美中不足之處了~~~~

再次感謝hom^^

Drupal真是高深莫測~~讓人又愛又怕受傷害啊^^