User:
Pass:
Keep:   
Xoops Cube Project
XOOPS Cube Project Site
Powered by Google


Powered by XOOPS Cube Legacy 2.1.8
PukiWikiMod 1.5.1
WordPress Module 0.6.0 Alpha
wpdbでのauthor絞込み 投稿者: fugafuga 投稿日:2005/01/20(Thu) 12:12 No.1100  
nobunobuさん、お世話になります。

私は今「コア側でdefineさせた定数によって、モジュールでコンテンツの投稿者を絞り込む」というハックを試みています。
WordPressに関してはDBからのデータ抽出は全て、wp-includes/wp-db.php の query() function を経由しているように思えましたので、その先頭に

if (defined('XOOPS_REQUESTED_UID')) {
 if (preg_match ("/^\s*SELECT.+\b\w+_wp\d*_posts\b/i", $query)) {
  if (preg_match ("/\bWHERE\b/i", $query))
  {
   $query = str_replace ("WHERE", "WHERE post_author = ".XOOPS_REQUESTED_UID." AND", $query);
  }
 }
}

というコードを加えてみたところ、メインコンテンツ部分、最近の投稿、コメント、月別過去ログのブロックでは意図した通りに該当ユーザーの投稿とそれに対するコメントが絞り込み表示されたのですが、何故かカレンダーブロックでは該当ユーザー以外のユーザーが投稿した日にもリンクが表示されてしまいます。なおその場合はカレンダーを表示させたページでPHPデバッグすると

Notice [PHP]: Undefined offset: 12 in file modules/wordpress/wp-includes/template-functions-general.php line 497

という表示が「対象ユーザーが投稿していないにもかかわらずリンクが表示される日」の数だけ表れます。

カレンダーの表示部分ではwpdb->query()を経由していないのでしょうか?あるいは置換えロジックに何らかの不都合があるのでしょうか?
よろしければヒントだけでも頂ければ助かります。よろしくお願いいたします。


Re: wpdbでのauthor絞込み 投稿者: のぶのぶ 投稿日:2005/01/20(Thu) 13:51 No.1101  

引用:

fugafugaさんは書きました:
nobunobuさん、お世話になります。

私は今「コア側でdefineさせた定数によって、モジュールでコンテンツの投稿者を絞り込む」というハックを試みています。
WordPressに関してはDBからのデータ抽出は全て、wp-includes/wp-db.php の query() function を経由しているように思えましたので、その先頭に

if (defined('XOOPS_REQUESTED_UID')) {
 if (preg_match ("/^\s*SELECT.+\b\w+_wp\d*_posts\b/i", $query)) {
  if (preg_match ("/\bWHERE\b/i", $query))
  {
   $query = str_replace ("WHERE", "WHERE post_author = ".XOOPS_REQUESTED_UID." AND", $query);
  }
 }
}

というコードを加えてみたところ、メインコンテンツ部分、最近の投稿、コメント、月別過去ログのブロックでは意図した通りに該当ユーザーの投稿とそれに対するコメントが絞り込み表示されたのですが、何故かカレンダーブロックでは該当ユーザー以外のユーザーが投稿した日にもリンクが表示されてしまいます。なおその場合はカレンダーを表示させたページでPHPデバッグすると

Notice [PHP]: Undefined offset: 12 in file modules/wordpress/wp-includes/template-functions-general.php line 497

という表示が「対象ユーザーが投稿していないにもかかわらずリンクが表示される日」の数だけ表れます。

カレンダーの表示部分ではwpdb->query()を経由していないのでしょうか?あるいは置換えロジックに何らかの不都合があるのでしょうか?
よろしければヒントだけでも頂ければ助かります。よろしくお願いいたします。

おもしろいアイデアですね。
現在までのバージョンではカレンダー表示部分ももちろん、wpdb->query()を使用していますが、SQL文の形式ががugafugaさんが期待されているのとは少しちがう場合があるようですね。
実はカレンダ部分のSQL文ではSQL文内に改行文字が入っているようです。
なので

preg_match ("/^\s*SELECT.+\b\w+_wp\d*_posts\b/i", $query)

ではマッチしない事になってしまいます。
実際に試してはいませんが、おそらく

preg_match ("/^\s*SELECT.+\b\w+_wp\d*_posts\b/im", $query)

でうまくいくと思います。

ところで、現在改造中のリリースでは実はwpdb.phpを使用せずに、XOOPSのxoopsDBを使用して、コネクションの最適利用を行うようにする予定です。という事でこのハックは次リリースでは使えなくなってしまいます。
ただし、各テーブルにアクセスするロジック部分はクラス化して局所化する予定なので、何らかの形で同じようなハックは可能だとは思いますが、ご了解下さい。


Re[2]: wpdbでのauthor絞込み 投稿者: fugafuga 投稿日:2005/01/20(Thu) 14:27 No.1105  

早速の回答ありがとうございます。

引用:

のぶのぶさんは書きました:
実はカレンダ部分のSQL文ではSQL文内に改行文字が入っているようです。

実際に試してはいませんが、おそらく

preg_match ("/^\s*SELECT.+\b\w+_wp\d*_posts\b/im", $query)

でうまくいくと思います。


試してみましたが上手くいかなかったので、query中に改行が含まれるというヒントを頼りに

 if (preg_match ("/^\s*SELECT /i", $query) && preg_match ("/\b\w+_wp\d*_posts\b/i", $query))

としたところうまく動作させることができました。
ありがとうございました。

引用:

ところで、現在改造中のリリースでは実はwpdb.phpを使用せずに、XOOPSのxoopsDBを使用して、コネクションの最適利用を行うようにする予定です。という事でこのハックは次リリースでは使えなくなってしまいます。
ただし、各テーブルにアクセスするロジック部分はクラス化して局所化する予定なので、何らかの形で同じようなハックは可能だとは思いますが、ご了解下さい。


xoopsDBを使われるのなら今度はxoopsDBクラスをハックする事でモジュール側の修正なしで対応できるかも知れませんね。(条件があまりに複雑になりすぎるか・・
モジュールの方がコアより動きが速いのでハックした場合バージョンアップ時の追随をどうするかが悩ましいところです。w


NO: PASS:

このプログラムは KENT 氏の yybbs を xoops(PHP) に移植したものです
- KENT -