LOGIN ID Password Auto Login Register Now! Lost Password?
XUGJ Forum

カスタムブロックで使うSmartyタグ

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー


前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2010/4/17 10:12
Marijuana  Ensign 居住地: 明後日から  投稿数: 272
表題のプリロードを書いてみました。
こちらからどうぞ

#プリロードもどっか一か所に情報が集まってると便利ですね
投票数:1 平均点:10.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/1/24 1:46 | 最終変更
domifara  Ensign   投稿数: 300
引用:

Marijuanaさんは書きました:
表題のプリロードを書いてみました。
こちらからどうぞ
しばらく離れていたのもあり、こんなのあるの知りませんでした
フォーラムを見直してて、見つけました。

便利そうです。
テンプレート使用するブロックを追加したいだけで
none(テンプレート版)をインストールしていたのですが
不要になりました。
だいたい、Xoopsのカスタムブロック作成で
Smartyタグが使えないのが不自然な気がします。

altsysでプレビューできるといいのですが
(くれくれ君)
引用:

Marijuanaさんは書きました:
プリロードもどっか一か所に情報が集まってると便利ですね
xoopscube.jp でいくつあるのですが、
プリロードもどっか一か所に情報が集まってると便利ですね
投票数:1 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2011/1/26 17:23 | 最終変更
domifara  Ensign   投稿数: 300
altsysでのブロック名や位置指定更新できなくなり

原因探しているところですが

バグ報告:
症状
カスタムブロックで使うSmartyタグ用のpreload
CustomBlockSmarty.class.php
を入れると
ブロック名や位置指定更新等ができなくなります。
表示ページリストボックス、グループ指定リストボックスは更新されます。

わかったところまでですが
(どごで止まっているのかまでは探しました)
SmartyBlockHandler

insert メソッドでfalseを返しているようです。

とりあえず、
CustomBlockSmarty.class.php

preloadからはずすと、altsysは正常に更新するように戻ります。


ぼちぼちと中身を追って見てみようとは思いますが
とりあえず、ご報告まで。

追記
/kernel/block.php

function store

$handler =& xoops_gethandler('block');
呼ばれたときに
 SmartyBlockHandler が 代わりに呼ばれてしまうのまで追ったのですが
altsysでは拡張してないXoopsBlockのためかな?

CustomBlockSmarty.class.php
line 176くらいの
変更前
  public function insert(&$block, $autolink=false)
  {
    if (strtolower(get_class($block)) != strtolower($this->className)) {
      return false;
    }
クラス名チェックでfalseになっているのですね。
変更後
  public function insert(&$block, $autolink=false)
  {
//hack by domifara
    if ( strtolower(get_class($block)) != strtolower($this->className) && strtolower(get_class($block)) != 'xoopsblock') {
      return false;
    }

とその下のdelete も同様ですね。

変更前
  public function delete(&$block)
  {
    if (strtolower(get_class($block)) != strtolower($this->className)) {
      return false;
    }

変更後
  public function delete(&$block)
  {
//hack by domifara
    if ( strtolower(get_class($block)) != strtolower($this->className) && strtolower(get_class($block)) != 'xoopsblock') {
      return false;
    }

として試してみます。

追記
とりあえず、動きました。


altsysでのカスタムブロック内容の
(ホダ塾レビューなのでエディタが邪魔する)
新規と変更は問題あるようですが


カスタムブロックのコンテンツ内容の登録と変更は
標準のブロック管理からすれば使えます。

やはりXOOPS標準でカスタムブロックなら
「smartyモードあればなー」と思うくらいほしい機能なので
これで使って見ます。
(標準されたらaltsysが対応できないか?)
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/1/26 22:09
marine  Lieutenant   投稿数: 464
domifaraさん、こんばんは。

いやぁ~ 私も同じところでひっかかってました。
ただ、私には解決策はわからず・・・domifaraさんの書き込み、助かります。

あと、altsysだけではなく、XCL2.2のシステム側のブロック管理機能も動作しませんでした。
何回か、このプリロードを入れたり外したりして試しました。

それと altsys ですが、xcl2.2(ローカル環境WARP上にて)で、テンプレートの複製ができませんでした。
ということで、とりあえずシステム側でテンプレート複製を行ってから、altsysでテンプレートを弄る方法でしのぎました。

やっぱり、コアでaltsysの機能を実現してもらうか・・・
altsysのバージョンアップが望まれるところですね。

ただ、後者はむずかしそうなので・・・
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/1/27 9:55
Marijuana  Ensign 居住地: 明後日から  投稿数: 272
> domifaraさん

CustomBlockSmarty.class.phpのバグかと思いましたが、altsysの問題ですね。
#altsysのバグとも違う

altsysでnew XoopsBlock(...)が結構ありますが、これらをxoops_gethandler経由で呼び出すようにするのが良いと思います
他でも同じようにXoopsBlockHandlerなどを、差し換えてるプリロードがあると問題でそうですし。。。

if (strtolower(get_class($block)) != strtolower($this->className)) {
は、無くても良いのかと思ってましたが、今回のようなケースでテーブルのフィールド変えたりしてると、データ壊しかねないので、必要なんだなと
#今回はデータ壊すようなのじゃないですが

なので、CustomBlockSmarty.class.phpは修正しませんので、対応した場合は各自でお願いします。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/1/27 13:23 | 最終変更
domifara  Ensign   投稿数: 300
Marijuanaさん お返事ありがとうございます。
バグと書いて失礼いたしました。
xoops2.5.0も管理画面仕様が変わってaltsysを使わない前提ぽいし。(optionファイルは添付されてますが)

引用:

Marijuanaさんは書きました:
altsysでnew XoopsBlock(...)が結構ありますが、これらをxoops_gethandler経由で呼び出すようにするのが良いと思います
他でも同じようにXoopsBlockHandlerなどを、差し換えてるプリロードがあると問題でそうですし。。。
XCL仕様に対応するには、
まあ今回たまたま内容的に問題がなかっただけで
(該当処理がたまたま同じ)
最低限ご指摘のことをaltsysに手を入れないといけないのですね。
んー・・です。(手に負えないかも。でも、とりあえず手を入れてみます)
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/6/21 4:26
domifara  Ensign   投稿数: 300
全般設定の
「themes/ ディレクトリからの自動アップデートを有効にする 」
にすると、
トップページに複数表示している、
カスタムブロックが、すべて同じ表示になってしまいました。
もしかして、
CustomBlockSmarty.class.php
line 130 からの
  private function fetchSmarty($str)
  {
    global $CustomBlockSmarty;
    $CustomBlockSmarty = $str;
    $root = XCube_Root::getSingleton();
    $renderSystem = $root->getRenderSystem($root->mContext->mBaseRenderSystemName);
    $force = $renderSystem->mXoopsTpl->force_compile;
    $renderSystem->mXoopsTpl->force_compile = $renderSystem->mXoopsTpl->compile_check;
    $ret = $renderSystem->mXoopsTpl->fetch('var:CustomBlockSmarty');
    $renderSystem->mXoopsTpl->force_compile = $force;
    return $ret;
  }

って

  private function fetchSmarty($str)
  {
    global $CustomBlockSmarty;
    $CustomBlockSmarty = $str;
    $root = XCube_Root::getSingleton();
    $renderSystem = $root->getRenderSystem($root->mContext->mBaseRenderSystemName);
    $force = $renderSystem->mXoopsTpl->force_compile;
//HACK by domifara
//    $renderSystem->mXoopsTpl->force_compile = $renderSystem->mXoopsTpl->compile_check;
    $renderSystem->mXoopsTpl->force_compile = true;
    $ret = $renderSystem->mXoopsTpl->fetch('var:CustomBlockSmarty');
    $renderSystem->mXoopsTpl->force_compile = $force;
    return $ret;
  }
でしょうか
投票数:0 平均点:0.00
  条件検索へ

Back to Page Top
MainMenu
Manuals
Search
XOOPS Official & Dev.
XOOPS Communities