Xoopsのモジュール画面のみレンダリングさせることは可能でしょうか?
投稿者: kabahandle | 投稿日時: 2010-3-10 13:09 | 閲覧: 3559回
こんにちは。
現在モジュール開発を行なっています。
prototype.jsのAHAHを使って、モジュール画面の一部を動的に更新することを試みています。
例えば、大分類のコンボボックスを選択したら、選択に合わせて中分類のコンボボックスが更新されるということです。
これをセッションを保ったまま行ないたいと思っています。
またDBの検索も行なうので、モジュールハンドラーなども使います。
セッションで保持しているユーザーIDを検索条件にDBを検索します。
そのため、セッションを保ち、モジュールハンドラーも備えた、
モジュールアクションクラスを使って行なおうと実験しています。
画面の一部だけHTMLを更新しようとしているのですが、
モジュールアクションクラスの返答するHTMLはXoopsのヘッダーやフッターなどが含まれています。
このXoopsのヘッダーやフッターなどを除去して、純粋にモジュール部だけのHTML返信が欲しいのです。
そこで、自分なりに調査してみました。
・XCube_RenderTarget クラス (core/XCube_RenderSystem.class.php)
に、レンダリングのターゲットが、null、テーマ、ブロック、メインの4つが定義されていました。
・Legacy_RenderSystem クラス (modules/legacyRender/kernel)
のrenderメソッドでは、
レンダリングターゲットごとに、HTMLデータを $result 変数に格納し、$target->setResult($result);でセットしているようでしいた。
・xoops_result メソッド (include/functions.php)
このメソッドで、
print $renderTarget->getResult();
を実行してありました。先ほどのsetResultしたHTMLをprintしているようです。
上記xooos_resultみたいな処理を、カスタマイズすれば、Xoops画面の内一部だけをレンダリングできそうな気も
するのですが、XCube_RenderTargetでターゲットにモジュールのみを対象にすることができないので、
XCube_RenderTargetなども変更する必要があるとも取れます。
と、いうことを考えていると、自分にはかなり難しいと思い、
なんとか、うまい方法がないか、お知恵を拝借したいと思いまして、
投稿させていただきました。
足りない点・間違っている点を、ご指摘くださいますと幸いです。
コメント(11)
新しいものから |
古いものから |
ネスト表示 |
Re: Xoopsのモジュール画面のみレンダリングさせることは可能でしょうか?
投稿者: kabahandle | 投稿日時: 2010-3-10 13:14
バージョンを記載するのを忘れていました。
Xoopsのバージョンは、XCL 2.1.7です。
Re: Xoopsのモジュール画面のみレンダリングさせることは可能でしょうか?
投稿者: onokazu | 投稿日時: 2010-3-10 14:12
そんなに難しく考えなくても良いと思います。
XOOPS_ROOT_PATH/header.php
XOOPS_ROOT_PATH/footer.php
を読み込まなければ良いだけです。
例えばこのトピックへの「返信する」リンクは実際は
http://xoopscube.jp/forum/6670/comment
ですが、Javascriptが有効な場合にはAJAXで上記ページ
と同内容をヘッダ/フッタなしで表示させています。
XCL特有のクラスや関数を使用するわけでもないので、
以前のバージョンのXOOPS等にも対応できます。
Re: Xoopsのモジュール画面のみレンダリングさせることは可能でしょうか?
ちなみにAJAXでリクエストした場合は下記のような表示となります。
http://xoopscube.jp/forum/6670/comment?__ajax=1
引用:
そんなに難しく考えなくても良いと思います。
XOOPS_ROOT_PATH/header.php
XOOPS_ROOT_PATH/footer.php
を読み込まなければ良いだけです。
例えばこのトピックへの「返信する」リンクは実際は
http://xoopscube.jp/forum/6670/comment
ですが、Javascriptが有効な場合にはAJAXで上記ページ
と同内容をヘッダ/フッタなしで表示させています。
XCL特有のクラスや関数を使用するわけでもないので、
以前のバージョンのXOOPS等にも対応できます。
Re: Xoopsのモジュール画面のみレンダリングさせることは可能でしょうか?
投稿者: kabahandle | 投稿日時: 2010-3-10 17:49 | 親コメント: #20377
早速のご回答、ありがとうございます。
引用:
そんなに難しく考えなくても良いと思います。
XOOPS_ROOT_PATH/header.php
XOOPS_ROOT_PATH/footer.php
を読み込まなければ良いだけです。
そうでしたか。そうですよね。
ただ、今実験中のモジュールはlightboardを改造したもので、
ベースのlightboardのindex.phpでは、
「XOOPS_ROOT_PATH./header.php」が存在せず、動作確認できませんでした。
また明日、調べてみます。
・・・またややこしいことを考えてしまったのですが、
「Legacy_Controller.class.php」 の、「executeView」メソッドの最後に以下の1文がありました。
$this->_executeViewTheme($renderTarget);
なぜ、「executeView」の中で、「_executeViewThema」を呼んでいるのだろうと疑問に思い、
これを、以下のように変更したら、ヘッダーとフッターなしでモジュールページの中身のみが表示されました。
//$this->_executeViewTheme($renderTarget);
print $renderTarget->getResult();
・・・こんなややこしいことはしないでいいですよね。すみません。
Ajaxのリクエスト画面、すばらしいです。
まさか今回のために即興で作成されたのではないですよね!?
Xoopsの可能性を感じます。
ご指摘の通り、jQuery を試してみようと思います。
JSONデータを変換して、TableのTDなど連続するタグを作成するのが面倒かと思っていたのですが、
コレクションのeachメソッドなどを使えば簡単にTableを作成できるのですね。
jQuery-UIともども、利用したいと思います。
ありがとうございました。
Re: Xoopsのモジュール画面のみレンダリングさせることは可能でしょうか?
Re: Xoopsのモジュール画面のみレンダリングさせることは可能でしょうか?
投稿者: suin | 投稿日時: 2010-3-12 1:20
引用:
このXoopsのヘッダーやフッターなどを除去して、純粋にモジュール部だけのHTML返信が欲しいのです。
jQueryでしたら、ヘッダーやフッターが含まれているレスポンスの中から、特定のタグを取り出すことができますよ。
$(document).ready(function () {
var targetUrl = 'http://example.com/modules/my_module/index.php';
$.get(targetUrl, {}, function(data) {
var tag_which_i_want = $(data).find('div#my_module_area');
$('div#this_page_area').html(tag_which_i_want.html());
});
});
ただし、サイトエンコードがEUC-JPだと、一旦UTF-8にエンコーディングする必要があると思います。
Powered by Plugg


