hypweb.net
XOOPSマニア  最新情報のRSS(サイト全体)
[ 自宅サーバーWebRing |ID=54 前後5表示乱移動サイト一覧 ]

19年7月21日(Sun) 12時48分
TOP » フォーラム » XOOPS » xpWiki » xpwikiからxwordsへのリンクはできないでしょうか?

xpwikiからxwordsへのリンクはできないでしょうか?


Posts tree


Previous post - Next post | Parent - Children.1 | Posted on 2008-2-17 11:04 | Last modified
nao-pon  Webmaster From: 愛知県  Posts: 5799

やっと、分かりました。 :idea:

システムのロケールの違いによるもののようです。

  • PHP: パターン構文 - Manual
    引用:

    単語構成文字とは、英字または数字またはアンダースコア文字であり、Perl が定義するところの「単語」と成り得る文字のことです。文字および数字の 定義は、PCRE の文字テーブルにより制御され、ロケールを指定して マッチングを行うと変わる可能性があります。 例えば、"fr" (フランス語)ロケールの場合、128 を超える 文字コードのいくつかは、アクセント付きの文字に使われており、 これらは \w とマッチします。

ということなので、ロケールを環境に合わせて設定すると、上手くいくことを確認しましたので、次回CVS更新に含めます。

CVS更新を待たずに効果を確かめたい場合は、trust側/xpwiki/class/xpwiki.php の 88行目あたりからの init() 内に以下を記述してみてください。

1
setlocale(LC_CTYPE, 'ja_JP.eucJP');
Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2008-2-17 13:14
rodeo  常連さんスーパー!   Posts: 74

nao-ponさん、こんにちは。

引用:
システムのロケールの違いによるもののようです。

なるほどー、私には思いつきもしませんでした・・

引用:
setlocale(LC_CTYPE, 'ja_JP.eucJP');

早速init()に入れて試してみましたが、どうもうまくいかないようです [worried]
手元で色々やってみたところ、
setlocale( LC_CTYPE, 'english');
だとうまくいっているように見えました。OSの違いによるものでしょうか :what:
( init()にこれを入れてもうまくいきませんでした・・)

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2008-2-17 13:32
nao-pon  Webmaster From: 愛知県  Posts: 5799
引用:

setlocale( LC_CTYPE, 'english');
だとうまくいっているように見えました。OSの違いによるものでしょうか :what:

ひょっとして、Windows サーバーでしょうか?

Windows サーバーで、EUC-JP 運用の場合は、デフォルトで

1
setlocale( LC_CTYPE, 'Japanese_Japan.51932' );

とセットされるようにしようと思っているのですが、これでは如何でしょうか。

init() 内の挿入位置は、118行目あたりからの

118
119
120
121
122
123
124
125
126
127
128
        // オプション設定
        if (!empty($this->iniVar['root'])) {
            foreach($this->iniVar['root'] as $key => $val) {
                $this->root->$key = $val;
            }
        }
        if (!empty($this->iniVar['const'])) {
            foreach($this->iniVar['const'] as $key => $val) {
                $this->cont[$key] = $val;
            }
        }

の直後になります。

また、セットされる値は、管理画面の環境設定で設定できるようになります。

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2008-2-17 13:53
rodeo  常連さんスーパー!   Posts: 74

お手数お掛けします。

引用:
ひょっとして、Windows サーバーでしょうか?

はい、WinXP(ローカル)とWin2kサーバです。現在とりあえずローカル環境でテストしております。

引用:
setlocale( LC_CTYPE, 'Japanese_Japan.51932' );

129行目に挿入して試してみましたが、うまくいかないようです。
手元のpreg_matchテストプログラムでもマッチしないようです [worried]

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2008-2-17 14:20
nao-pon  Webmaster From: 愛知県  Posts: 5799

では、

1
setlocale( LC_CTYPE, 'Japanese_Japan.20932' );

では、如何でしょうか。

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2008-2-17 14:35
rodeo  常連さんスーパー!   Posts: 74

うまくいきました :D
129行目に挿入して全てうまくリンクされています :thumb_up:
ありがとうございました!!

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - No child | Posted on 2008-2-17 14:39
nao-pon  Webmaster From: 愛知県  Posts: 5799

ヤッタ! :thumb_up:

それでは、この方向で修正します。先にも書きましたが、さまざまな環境に備えて、管理画面の環境設定で設定できるようにしておきます。 ;-)

検証作業お疲れ様でした。 :handshake:

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2008-3-23 21:45 | Last modified
naaon  常連さんスーパー!   Posts: 192

nao-ponさん、こんにちは。
お世話になります、naaonです。

このツリーのxpwikiからxwordsへのAutoリンクを活用させていただいております。
今回WizMobileモジュールなどで携帯対応を試していると、リンクURLの後ろにセッション情報が付加され、その部分も含めた語句を要求していまって「該当無し」となるようです。

試しにこの部分のコードを以下のようにしてみました。
もう少しスマートなコードがありましたら、ご教示ください。 よろしくお願いします。 :-)

(登録語の中に文字「&」を使う場合の回避もしなければいけないですかねえ。。)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
if (!isset($_GET['entryID'])) {
    if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING']) {
    	$_temp = $_SERVER['QUERY_STRING'];
    	if (strpos($_temp,'&') > 0) {
        	$_arg = substr($_temp,0,strpos($_temp,'&'));
        }
        else {
        	$_arg = $_temp;
        }
    } else if (isset($_SERVER['argv']) && ! empty($_SERVER['argv'])) {
        $_arg = $_SERVER['argv'][0];
    }
 
    $_arg = rawurldecode($_arg);
 
    $result = $xoopsDB->query( "SELECT `entryID` FROM ".$ent_table." WHERE `term`='".addslashes($_arg)."'" ) ;
    if( $xoopsDB->getRowsNum( $result ) ) {
        list( $_GET['entryID'] ) = $xoopsDB->fetchRow( $result ) ;
    }
}
Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2008-3-25 1:01 | Last modified
nao-pon  Webmaster From: 愛知県  Posts: 5799

それで、十分だと思います。

すっきりさせたいのなら、

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
if (!isset($_GET['entryID'])) {
    $_arg = (! empty($_SERVER['QUERY_STRING']))? $_SERVER['QUERY_STRING'] : 
            (! empty($_SERVER['argv']))? $_SERVER['argv'][0] : '';
    if ($_arg)
        $_arg = rawurldecode(preg_replace('/&.*$/', '', $_arg));
        $result = $xoopsDB->query( "SELECT `entryID` FROM ".$ent_table." WHERE `term`='".addslashes($_arg)."'" ) ;
        if( $xoopsDB->getRowsNum( $result ) ) {
            list( $_GET['entryID'] ) = $xoopsDB->fetchRow( $result ) ;
        }
    }
}

でもいいかも。未検証なので、間違っている可能性もあります。 :-P

ワード中の & に関しては、urlencode されているはずなので、問題ないと思います。

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - No child | Posted on 2008-3-25 21:29
naaon  常連さんスーパー!   Posts: 192

nao-ponさん

どうもありがとうございます。
「それで、十分」ということで安心しました。 :-)
nao-ponさんのコードも(4行目に{を補ったうえで)試してみたのですが、PCからうまくリンクされなくて、あまり追求せずに元に戻してしまいました。。折角書いていただいたのに、スミマセン。

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2008-5-10 23:45 | Last modified
naaon  常連さんスーパー!   Posts: 192

naaonです。ごぶさたしています。

ここ半月ほど、xwordsのautolinkがうまくいかなくなって、悩んでいます。
現象としては、

  1. xwords側の「xwords_entries.php」は書き込まれていますが、これをxpwikiで引っ張ってくるときに、「modules/xpwiki/private/cache」内で0バイトのファイル「hoge.extautolink」になってしまいます。
  2. 試しに、中身のある「xwords_entries.php」をこのディレクトリ内にコピーして「hoge.extautolink」としても、うまくリンクしません。 ファイルの中身が問題かなと思い、単純な内容に書き換えてみてもだめでした。
  3. xpwiki_3.71.25、hyp_common_1.37 に上げてみましたが、改善されず。

autolinkの設定は、以下です。 ただし、XOOPS_URLの動的切り替えを行っているためか、以前より'url'値は絶対URLで書いています。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$root->ext_autolinks[] = array(
    'target'  => '' ,     // Target pages split with '&' (prefix search)
    'priority'=> 40 ,    // Priority (Intenal AutoLink = 50)
    'url'   => '**snip_myURL**/modules/xwords/xwords_entries.php' ,                // 空白('')で自己xpWiki, 'ディレクトリ名' は自サイト内の別のxpWiki.
    'urldat'=> 1 ,       // urlはオートリンクデータそのもの(0:No, 1:Yes)
    'case_i'  => 1 ,    // Case insensitive
    'base'  => '' ,     // ベースページ名 (''[空白] ですべてのページ)
    'len'   => 3 ,            // オートリンクを有効にする文字数
    'enc'   => 'EUC-JP' ,    // 相手先の文字エンコーディング
    'cache' => 10 ,            //キャッシュする分数 (最小値: 10分)
    'title' => 'xwords:[KEY]' , // <a>タグのtitle属性 ([KEY] は対象語句に置換されます)
    'pat'   => XOOPS_URL.'/modules/xwords/entry.php?[URL_ENCODE]' ,                // リンクパターン. ([URL_ENCODE], [WIKI_ENCODE], [EWORDS_ENCODE]が使用可能)
);

関係ないかもしれませんが、phpデバグONだと、下記noticeがたくさん出ます。

Notice [PHP]: Undefined property: XpWikiRoot::$hierarchy_insert in file /**snip**/trust_path/modules/xpwiki/class/func/pukiwiki_func.php line 3481
Notice [PHP]: Undefined property: XpWikiRoot::$hierarchy_insert in file /**snip**/trust_path/modules/xpwiki/class/func/pukiwiki_func.php line 2070
Notice [PHP]: Undefined property: XpWikiRoot::$hierarchy_insert in file /**snip**/trust_path/xcl_trust/modules/xpwiki/class/func/pukiwiki_func.php line 2070
Notice [PHP]: Undefined property: XpWikiRoot::$word_break_limit in file /**snip**/trust_path/xcl_trust/modules/xpwiki/class/func/xpwiki_func.php line 1635

何か手がかりを見つける方法があれば助かるのですが。。 よろしくお願いします。

・PHPのバージョン 5.2.5
・MySQLのバージョン 5.0.27

追記 08/5/11
現状の リンクファイルを、貼っておきます。(拡張子を.php->.txtに変更)
 filexwords_entries.txt
実は、2番目の「\#」の「\」が自動で入らないので、手動で編集してあります。xwordsのソースも追わなきゃいけない。。 というか、さすがに「#」とか「=」はリンク文字に成りえないから、まずいですよね。。 :what:

追記2 08/5/11
xwords_write.phpを編集して、3文字未満は除外するようにしてみましたが、
状況変わらないです。。(xpwiki側cacheファイルが0バイトになる)
 filexwords_entries2.txt

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2008-5-11 11:07 | Last modified
naaon  常連さんスーパー!   Posts: 192

naaonです。

すみません! 内部のURL参照がおかしくて、xwordsのファイル取得ができていないだけでした。 :oops:  内部DNSの設定を見直して、復旧しました。  :-P

色々とサイトを増やしているうちに、変にいじってしまったようです。
申し訳ないです。お騒がせ致しました。

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - No child | Posted on 2008-5-11 11:21
nao-pon  Webmaster From: 愛知県  Posts: 5799

naaon さん、解決してよかったですね。

実は、ちょうど今、そのような回答を書き込もうと思っていたところです。 :laught:

今回の件とは、関係ないかもしれませんが、Notice の件は、ちょっと気になりますね。xpWiki は、Notice エラーが出ないようにできるだけ気をつけて、コーディングしていますので、継続して同じようなエラーが出るのであれば、どのような状況でそのエラーが出るのか、別スレッドで上げてみてください。 :-)

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2009-1-20 18:33
nonn50  常連さんスーパー! From: 石川県野々市市  Posts: 1108

こちらのスレッドと、naanoさんのこちらの書き込みを見ながら、「WikiレンダラーでXWORDSへの自動リンク」の設定を模索しています :-?

この

引用:

勉強されるとの事ですので、解答は隠しておきます。行き詰ったら見てください

以外は全て書き換えを行いましたが、実現に至っておりません。

お手数ばかりお掛けして申し訳ありませんが、この修正を加えるべきファイルの有り場所を教えていただけるように御願いいたします。

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2009-1-20 18:46 | Last modified
naaon  常連さんスーパー!   Posts: 192

nonn50さん、こんにちは。

引用:
引用:
   勉強されるとの事ですので、解答は隠しておきます。行き詰ったら見てください
以外は全て書き換えを行いましたが、実現に至っておりません。

そうですね、最初は私もなかなかうまく行かなかったので、順を追って確認していきたいですね。

xwords側ファイルの準備

ソースファイルの作成と編集

まず、このrodeoさんの投稿内容に従って、「(html)/modules/xwords/entries_write.php」の作成と、「(html)/modules/xwords/submit.php」の3箇所の追記を行います。 そして2つのファイルをサーバーにアップ。

xwordsで記事をひとつ更新する

ここで、既存の記事の編集でも新規作成でも良いのですが、記事をひとつ更新します。 この作業を行うことで、「entries_write.php」スクリプトにより、「entries.txt」「xwords_entries.php」という2つのファイルが作成されると思います。

データが作成されない場合

もし作成されない場合は、2つとも同じ名前で空のファイルを新たにサーバー上に作成し、パーミッションを「666」などにしておき、再度記事を更新してみます。

これでもファイルの中身に正規表現のデータが生成されない場合は、何か問題が起きている可能性があるので、xoopsのphpデバグなどで確認してみてください。

xpWiki

pukiwiki.ini.phpの編集

「(html)/modules/xpwiki/private/ini/pukiwiki.ini.php」に外部オートリンク設定を追加します。 あるバージョンから仕様が変わったようですが、とりあえず私の場合は古い仕様のまま(?) 以下のような記述で動いています。

//// xwordsへのオートリンク
$root->ext_autolinks[] = array(
    'target'  => '' ,                 // Target pages split with '&' (prefix search)
    'priority'=> 40 ,                // Priority (Intenal AutoLink = 50)
    'url'   => 'http://www.motioncafe.net/modules/xwords/xwords_entries.php' ,                // 空白('')で自己xpWiki, 'ディレクトリ名' は自サイト内の別のxpWiki.
    'urldat'=> 1 ,                // urlはオートリンクデータそのもの(0:No, 1:Yes)
    'case_i'  => 1 ,                // Case insensitive
    'base'  => '' ,        // ベースページ名 (''[空白] ですべてのページ)
    'len'   => 3 ,                // オートリンクを有効にする文字数
    'enc'   => 'EUC-JP' ,        // 相手先の文字エンコーディング
    'cache' => 10 ,                //キャッシュする分数 (最小値: 10分)
    'title' => 'xwords:[KEY]' ,    // <a>タグのtitle属性 ([KEY] は対象語句に置換されます)
    'pat'   => XOOPS_URL.'/modules/xwords/entry.php?[URL_ENCODE]' ,                // リンクパターン. ([URL_ENCODE], [WIKI_ENCODE], [EWORDS_ENCODE]が使用可能)
);

うまくリンクが更新されないとき

一旦うまくいかない状態になると、なかなか復旧しなかったりということがあります。

そういう時は、「(html)/modules/xpwiki/private/cache/」ディレクトリ内の、「****************************.extautolink」という拡張子のファイルがあると思いますが、そのファイルサイズが「0」の場合、一旦これを削除すると、次回からうまく行くことがありました。

(追記)

私のサイトで、いつからか自動リンクされていないことに気づき調査したところ、 「#」などの特殊文字がxwordsのentryのタイトルにあったため、「xwords_entries.php」に書き込まれていてもオートリンクされない、という状態でしした。

結局、それらのタイトル文字長が3文字未満でしたので、「entries_write.php」の9行目付近を変更しました。

 9
10
11
12
13
14
15
16
if ($fp1 = fopen($temp_txt, 'wb')) {
    $result_entries = $xoopsDB -> query( "SELECT term FROM $ent_table" );
    while ( list( $entry_term ) = $xoopsDB -> fetchrow( $result_entries ) ) {
        if(mb_strlen($entry_term)>2) {fwrite($fp1, $entry_term."\n");
        }
    }
    fclose($fp1);
}

こんな感じです。 焦らずいきましょう。 もしまだうまくいかない時には、どうぞご遠慮なく。 :-)

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2009-1-20 20:05
nonn50  常連さんスーパー! From: 石川県野々市市  Posts: 1108

naaonさん、長文にて御説明いただき、感謝します。
(一回りネット徘徊してきましたら、書き込みを発見しました :-o

本日の爺は、晩酌タイム :pint: となりましたので、休日にチャレンジしてみます。
NHKの歌謡ショーが始まりましたよ :-P

追伸:この機能を実装したサイトにお目に掛かったことが無かったのですが、先日 naaonさんの別サイトを発見しました。
それを拝見し、ウゥ〜ンこれは設定しなければ :cry: と思った次第です。

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2009-1-22 18:55 | Last modified
nonn50  常連さんスーパー! From: 石川県野々市市  Posts: 1108

昨日より工事を行っていますが、xpwikiからxwordsへのリンクが動くに至っておりません。
以下に、このフォーラムで交わされた内容を整理し、小生の実施した内容を書かせていただきます。

アドバイスいただければ幸いです。

xwords側ファイルの準備

引用:

ソースファイルの作成と編集

引用:

まず、このrodeoさんの投稿内容に従って、「(html)/modules/xwords/entries_write.php」の作成と、

「(html)/modules/xwords/submit.php」の3箇所の追記を行います。 

そして2つのファイルをサーバーにアップ。

  • 小生の実施したこと
    引用:

    entry.php の 冒頭 global $xoopsUser; の下に、以下を挿入すれば、上手くいくかも。
    この説明により
    /modules/xwords/entry.php に修正を加えました。
    これにより、修正済みの「entry.php」は、以下のとおりです。

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    
    <?php
    /**
     * $Id: entry.php v 1.0 8 May 2004 hsalazar Exp $
     * Module: Wordbook - a multicategory glossary
     * Version: v 1.00
     * Release Date: 8 May 2004
     * Author: hsalazar
     * Licence: GNU
     */
     
    // XOOPS2 - Xwords 0.44
    // WEBMASTER @ KANPYO.NET, 2005.
     
    include "./header.php";
     
    global $xoopsUser;
     
    +if (!isset($_GET['entryID'])) {
    +    if (isset($_SERVER['QUERY_STRING']) && $_SERVER['QUERY_STRING']) {
    +        $_arg = $_SERVER['QUERY_STRING'];
    +    } else if (isset($_SERVER['argv']) && ! empty($_SERVER['argv'])) {
    +        $_arg = $_SERVER['argv'][0];
    +    }
    + 
    +    $_arg = rawurldecode($_arg);
    + 
    +    $result = $xoopsDB->query( "SELECT `entryID` FROM ".$ent_table." WHERE `term`='".addslashes($_arg)."'" ) ;
    +    if( $xoopsDB->getRowsNum( $result ) ) {
    +        list( $_GET['entryID'] ) = $xoopsDB->fetchRow( $result ) ;
    +    }
    +}
     
    $entryID = !empty($_GET['entryID']) ? intval($_GET['entryID']) : 0;
    $catID = !empty($_GET['categoryID']) ? intval($_GET['categoryID']) : 0;
    $thisterm = array();
    $block0 = array ();
    $eachletter = array ();
    $letterarray = array ();
    $url = '';
     
    // To display the linked letter list
    $alpha = alphaArray($catID);
     
    for ($i=0; $i < count($alpha['initial']); $i++)
        {
        if ($alpha['initial'][$i]['linktext'] == constant("_MD_{$MYDIRNAME}_ALL_LINKTEXT"))
            {
            $publishedwords = $alpha['initial'][$i]['total'];
            break;
            }
        }
     
    if ( !$publishedwords )
        {
        redirect_header( "index.php", 1, constant("_MD_{$MYDIRNAME}_NOTERMSINLETTER"));
        exit();
        }
     
    $result = $xoopsDB -> query( "SELECT e.entryID, e.categoryID, e.term, e.proc, e.init, e.definition, e.ref, e.url, e.uid, e.datesub, e.counter, e.html, e.smiley, e.xcodes, e.breaks, e.block, e.notifypub, c.name FROM $ent_table e LEFT JOIN $cat_table c ON e.categoryID = c.categoryID WHERE e.datesub < '". time() ."' AND e.datesub > '0' AND e.submit = '0' AND e.offline = '0' AND e.request = '0' AND e.entryID = '$entryID'" );
     
    if ( !$xoopsDB -> getRowsNum( $result ) )
        {
        redirect_header( "index.php", 2, constant("_MD_{$MYDIRNAME}_NORESULTS") );
        exit();
        }
     
    if ( !$xoopsUser || ( $xoopsUser->isAdmin($xoopsModule->mid()) && $xoopsModuleConfig['adminhits'] == 1 ) || ( $xoopsUser && !$xoopsUser -> isAdmin( $xoopsModule -> mid() ) ) )
        {
        $xoopsDB -> queryF( "UPDATE $ent_table SET counter = counter+1 WHERE entryID = $entryID" );
        }
     
    while (list( $entryID, $categoryID, $term, $proc, $init, $definition, $ref, $url, $uid, $datesub, $counter, $html, $smiley, $xcodes, $breaks, $block, $notifypub, $name ) = $xoopsDB->fetchRow($result))
        {
        $thisterm['id'] = intval($entryID);
        $microlinks = serviceLinks ( $thisterm['id'] ,intval($uid) );
     
        $thisterm['categoryID'] = intval($categoryID);
        $thisterm['catname'] = $myts -> makeTboxData4Show( $name );
        $thisterm['term'] = $myts -> makeTboxData4Show( $term );
        if ($proc)
            {
            list($temp,$proc) = explode(",",$proc);
            }
        $thisterm['proc'] = $myts -> makeTboxData4Show( $proc );
     
        if ( !$xoopsModuleConfig['linktermsposition'] )
            {
            $thisterm['definition'] = $myts->displayTarea( $definition, intval($html), intval($smiley), intval($xcodes), 1, intval($breaks) );
            $thisterm['linkedterms'] = $myts->getAutoLinkTerms( $definition, intval($html), $mydirname, $entryID, 0 );
            }
        else
            {
            $thisterm['definition'] = $myts->displayTarea( $definition, intval($html), intval($smiley), intval($xcodes), 1, intval($breaks), $mydirname, $entryID );
            }
        $thisterm['ref'] = $myts -> makeTboxData4Show( $ref );
        $thisterm['url'] = $myts->makeClickable(formatURL($url), $allowimage = 0);
        $thisterm['submitter'] = xoops_getLinkedUnameFromId ( intval($uid) );
        if ( $xoopsModuleConfig['strfformat'] )
            {
            $thisterm['datesub'] = $myts->makeTboxData4Show(formatTimestamp(xoops_getUserTimestamp(intval($datesub)), $xoopsModuleConfig['strfformat']));
            }
        else
            {
            $thisterm['datesub'] = formatTimestampJ(xoops_getUserTimestamp(intval($datesub)));
            }
        $thisterm['counter'] = intval($counter);
        $thisterm['block'] = intval($block);
        $thisterm['notifypub'] = intval($notifypub);
        $thisterm['dir'] = $xoopsModule->dirname();
     
        if ( $xoopsModuleConfig['multicats'] == 1 )
            {
            $xoops_pagetitle = $xoopsModule->name().' : '.$thisterm['catname'].' : ';
            }
        else
            {
            $xoops_pagetitle = $xoopsModule->name().' : ';
            }
     
        for ($n=0; $n < count($mb_init); $n++)
            {
            if (ereg($mb_init[$n],$init) && $mb_linktext[$n] != constant("_MD_{$MYDIRNAME}_ALL_LINKTEXT"))
                {
                $xoops_pagetitle .= $mb_linktext[$n].' ';
     
                $eachletter['text'] = $mb_linktext[$n];
                $eachletter['id'] = $mb_id[$n];
                $letterarray['navi'][] = $eachletter;
                }
            }
     
        $xoops_pagetitle .= ' : '.$thisterm['term'];
     
        // amazon keyword link
        $amazon = $searchstring = '';
        if (extension_loaded('mbstring') && $xoopsModuleConfig['amazon_id'] && _CHARSET !="UTF-8")
            {
            $searchstring = preg_replace('/^(.*?)(\xA1[\xA2-\xC5]|\,|\.).*/', '$1', $thisterm['term']);
            $searchstring = urlencode (mb_convert_encoding($searchstring, "UTF-8", _CHARSET));
            }
        elseif ($xoopsModuleConfig['amazon_id'] && _CHARSET == "UTF-8")
            {
            $searchstring = urlencode($thisterm['term']);
            }
        }
     
    // Various strings
    $xoopsOption['template_main'] = "{$mydirname}_entry.html";
    include_once( XOOPS_ROOT_PATH . '/header.php' );
     
    $xoopsTpl -> assign ( 'lang_modulename', $xoopsModule->name() );
    $xoopsTpl -> assign ( 'lang_moduledirname', $xoopsModule->dirname() );
    $xoopsTpl -> assign ( 'lang_home', constant("_MD_{$MYDIRNAME}_HOME") );
    $xoopsTpl -> assign ( 'lang_browsecat', constant("_MD_{$MYDIRNAME}_BROWSECAT") );
    $xoopsTpl -> assign ( 'lang_allcats', constant("_MD_{$MYDIRNAME}_ALLCATS") );
    $xoopsTpl -> assign ( 'lang_browseletter', constant("_MD_{$MYDIRNAME}_BROWSELETTER") );
    $xoopsTpl -> assign ( 'lang_entcat', constant("_MD_{$MYDIRNAME}_ENTRYCATEGORY") );
    $xoopsTpl -> assign ( 'lang_rubyl', constant("_MD_{$MYDIRNAME}_RUBYL") );
    $xoopsTpl -> assign ( 'lang_rubyr', constant("_MD_{$MYDIRNAME}_RUBYR") );
    $xoopsTpl -> assign ( 'lang_entref', constant("_MD_{$MYDIRNAME}_ENTRYREFERENCE") );
    $xoopsTpl -> assign ( 'lang_enturl', constant("_MD_{$MYDIRNAME}_ENTRYRELATEDURL") );
    $xoopsTpl -> assign ( 'lang_submitter', constant("_MD_{$MYDIRNAME}_SUBMITTEDBY") );
    $xoopsTpl -> assign ( 'lang_submitted', constant("_MD_{$MYDIRNAME}_SUBMITTED") );
    $xoopsTpl -> assign ( 'lang_count', constant("_MD_{$MYDIRNAME}_COUNT") );
    $xoopsTpl -> assign ( 'lang_comment', constant("_MD_{$MYDIRNAME}_COMMENT") );
    $xoopsTpl -> assign ( 'lang_amazon', constant("_MD_{$MYDIRNAME}_AMAZON") );
    $xoopsTpl -> assign ( 'lang_amazonlink', constant("_MD_{$MYDIRNAME}_AMAZONLINK") );
    $xoopsTpl -> assign ( 'lang_linkedterms', $myts -> makeTboxData4Show( $xoopsModuleConfig['linktermstitle'] ) );
    $xoopsTpl -> assign ( 'xoops_pagetitle', $xoops_pagetitle);
    $xoopsTpl -> assign ( 'alpha', $alpha );
    $xoopsTpl -> assign ( 'publishedwords', $publishedwords );
    $xoopsTpl -> assign ( 'multicats', intval($xoopsModuleConfig['multicats']) );
    $xoopsTpl -> assign ( 'titleblockuse', intval($xoopsModuleConfig["titleblockuse"]) );
    $xoopsTpl -> assign ( 'catsarrayuse', intval($xoopsModuleConfig["catsarrayuse"]) );
    $xoopsTpl -> assign ( 'h1id', $myts -> makeTboxData4Show( $xoopsModuleConfig["h1id"] ) );
    $xoopsTpl -> assign ( 'block0', catlinksArray () );
    $xoopsTpl -> assign ( 'thisterm', $thisterm );
    $xoopsTpl -> assign ( 'microlinks', $microlinks );
    $xoopsTpl -> assign ( 'entryID', $entryID );
    $xoopsTpl -> assign ( 'letterarray', $letterarray );
    $xoopsTpl -> assign ( 'amazon_id', $myts -> makeTboxData4Show($xoopsModuleConfig["amazon_id"]));
    $xoopsTpl -> assign ( 'searchstring', $searchstring);
    $xoopsTpl -> assign ( 'submitterlink', intval($xoopsModuleConfig['submitterlink']) );
    $xoopsTpl -> assign ( 'linkterms', intval($xoopsModuleConfig['linkterms']) );
    $xoopsTpl -> assign ( 'linktermsposition', intval($xoopsModuleConfig['linktermsposition']) );
     
    include( XOOPS_ROOT_PATH.'/include/comment_view.php' );
    include_once( XOOPS_ROOT_PATH.'/footer.php' );
    ?>

    あと、正規表現の生成は xpWiki から抜き出せばいいのですが、ちょっと分かりづらいかも知れません。
    この説明
    まず、ご教示頂いた正規表現の生成を以下のように前半部分をちょっと編集し、modules/xwords の直下にentries_write.phpというファイルで登録しました。
    この説明により
    modules/xwords の直下にentries_write.php
    /modules/xwords/entries_write.php を新規作成しました。
    「entries_write.php」は、以下のとおりです。

      1
      2
      3
      4
      5
      6
      7
      8
      9
     10
     11
     12
     13
     14
     15
     16
     17
     18
     19
     20
     21
     22
     23
     24
     25
     26
     27
     28
     29
     30
     31
     32
     33
     34
     35
     36
     37
     38
     39
     40
     41
     42
     43
     44
     45
     46
     47
     48
     49
     50
     51
     52
     53
     54
     55
     56
     57
     58
     59
     60
     61
     62
     63
     64
     65
     66
     67
     68
     69
     70
     71
     72
     73
     74
     75
     76
     77
     78
     79
     80
     81
     82
     83
     84
     85
     86
     87
     88
     89
     90
     91
     92
     93
     94
     95
     96
     97
     98
     99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    
    <?php
     
    // 小文字・大文字を区別しない? (0 or 1)
    define('PAGE_CASE_INSENSITIVE', 0);
     
    $temp_txt = XOOPS_ROOT_PATH."/modules/".$xoopsModule->dirname()."/entries.txt";
    $entries_dat = XOOPS_ROOT_PATH."/modules/".$xoopsModule->dirname()."/xwords_entries.dat";
     
     
    if ($fp1 = fopen($temp_txt, 'wb')) {
        $result_entries = $xoopsDB -> query( "SELECT term FROM $ent_table" );
        while ( list( $entry_term ) = $xoopsDB -> fetchrow( $result_entries ) ) {
            fwrite($fp1, $entry_term."\n");
        }
        fclose($fp1);
    }
     
    $dats = file($temp_txt);
    $dat = get_matcher_regex_safe($dats);
    if ($fp2 = fopen($entries_dat, 'wb')) {
        fwrite($fp2, $dat);
        fclose($fp2);
    }
     
    function get_matcher_regex_safe ($pages, $spliter = "\t", $array_fix = true, $nest = 0) {
        if ($array_fix) {
            $pages = array_map('trim', $pages);
            if (PAGE_CASE_INSENSITIVE) $pages = array_map('strtolower', $pages);
            $pages = array_unique($pages);
            foreach(array_keys($pages, '') as $key) {
                unset($pages[$key]);
            }
            sort($pages, SORT_STRING);
        }
        
        ++$nest;
        $reg = get_matcher_regex_safe_sub($pages);
        $regs = preg_split("/(\d+)\x08/", $reg, -1, PREG_SPLIT_DELIM_CAPTURE);
        $pats = array();
        $index = 0;
        reset($regs);
        while (list($key, $pat) = each($regs)) {
            list($key, $val) = each($regs);
            if (!$val) $val = count($pages);
            if (@ preg_match('/' . $pat. '/', '') === false) {
                if ($nest <= 10) {
                    $count = $val - $index;
                    $split = floor(($val - $index) / 2);
                    $pages1 = array_slice($pages, $index, $split);
                    $pages2 = array_slice($pages, $split, $count - $split);
                    $pats[] = get_matcher_regex_safe($pages1, $spliter, false, $nest);
                    $pats[] = get_matcher_regex_safe($pages2, $spliter, false, $nest);
                    $index = $val;
                }
            } else {
                $pats[] = $pat;
            }
        }
        return join($spliter, $pats);
    }
     
    function get_matcher_regex_safe_sub (& $array, $offset = 0, $sentry = NULL, $pos = 0, $nest = 0)
    {
        static $g_count = 0;
        
        ++$nest;
        $limit = 1024 * 32 - 10;
        
        if (empty($array)) return '(?!)'; // Zero
        if ($sentry === NULL) $sentry = count($array);
        
        // Too short. Skip this
        $skip = ($pos >= mb_strlen($array[$offset]));
        if ($skip) ++$offset;
     
        // Generate regex for each value
        $regex = '';
        $index = $offset;
        $multi = FALSE;
        $reglen = 0;
        while ($index < $sentry) {
            if ($index != $offset) {
                $multi = TRUE;
                if ($nest === 1 && strlen($regex) - $reglen > $limit) {
                    $reglen = strlen($regex);
                    $regex .= ')'.($index)."\x08(?:";
                    $g_count = 1;
                } else {
                    $regex .= '|'; // OR
                }
            }
     
            // Get one character from left side of the value
            $char = mb_substr($array[$index], $pos, 1);
     
            // How many continuous keys have the same letter
            // at the same position?
            for ($i = $index; $i < $sentry; $i++)
                if (mb_substr($array[$i], $pos, 1) != $char) break;
            
            if ($index < ($i - 1)) {
                // Some more keys found
                // Recurse
                $regex .= str_replace(' ', '\\ ', preg_quote($char, '/')) .
                get_matcher_regex_safe_sub($array, $index, $i, $pos + 1, $nest);
            } else {
                // Not found
                $regex .= str_replace(' ', '\\ ',
                preg_quote(mb_substr($array[$index], $pos), '/'));
            }
            $index = $i;
        }
        
        if ($skip || $multi){
            $g_count++;
            $regex = '(?:' . $regex . ')';
        }
        if ($skip) $regex .= '?'; // Match for $pages[$offset - 1]
        return $regex;
    }
     
    ?>

    あとは、ここで rodeoさんが記述しているとおりですが、再掲させていただきます。

    • modules/xwords/submit.phpの135行目付近に以下のように追加
      1
      2
      3
      4
      
          if ( $result )
              { 
      +        include_once( XOOPS_ROOT_PATH . '/modules/'.$xoopsModule->dirname().'/entries_write.php' );
              $username = $xoopsUser->getVar("uname", "E");
    • modules/xwords/admin/entry.phpの316行目付近と330行目付近に以下のように追加
       1
       2
       3
       4
       5
       6
       7
       8
       9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      
          if ( $entryID > 0 )
              {
              if ( $xoopsDB -> query( "UPDATE $ent_table SET term = '$term', proc = '$proc', categoryID = '$categoryID', init = '$init', definition = '$definition', ref = '$ref', url = '$url', uid = '$uid', submit = '$submit', datesub = '$datesub', html = '$html', smiley = '$smiley', xcodes = '$xcodes', breaks = '$breaks', block = '$block', offline = '$offline', notifypub = '$notifypub', request = '$request' WHERE entryID = '$entryID'" ) )
                  {
      +            include_once( XOOPS_ROOT_PATH . '/modules/'.$xoopsModule->dirname().'/entries_write.php' );
                  calculateTotals();
                  redirect_header( "index.php", 1, constant("_AM_{$MYDIRNAME}_ENTRYMODIFIED") );
                  }
              else
                  {
                  redirect_header( "index.php", 1, constant("_AM_{$MYDIRNAME}_ENTRYNOTUPDATED") );
                  }
              }
          else  // That is, $entryID exists, thus were editing an entry
              {
              $date = !empty($_POST['renewdate']) ? $datesub : time();
              $uid = $xoopsUser -> uid();
              if ( $xoopsDB -> query( "INSERT INTO $ent_table (entryID, categoryID, term, proc, init, definition, ref, url, uid, submit, datesub, html, smiley, xcodes, breaks, block, offline, notifypub, request ) VALUES ('', '$categoryID', '$term', '$proc', '$init', '$definition', '$ref', '$url', '$uid', '$submit', '$date', '$html', '$smiley', '$xcodes', '$breaks', '$block', '$offline', '$notifypub', '$request' )" ) )
                  {
      +            include_once( XOOPS_ROOT_PATH . '/modules/'.$xoopsModule->dirname().'/entries_write.php' );
    • 以上が、小生の実施した工事の内容です。

xwordsで記事をひとつ更新する

引用:

ここで、既存の記事の編集でも新規作成でも良いのですが、記事をひとつ更新します。 

この作業を行うことで、「entries_write.php」スクリプトにより、

「entries.txt」「xwords_entries.dat」という2つのファイルが作成されると思います。

データが作成されない場合

引用:

もし作成されない場合は、2つとも同じ名前で空のファイルを新たにサーバー上に作成し、

パーミッションを「666」などにしておき、再度記事を更新してみます。

これでもファイルの中身に正規表現のデータが生成されない場合は、

何か問題が起きている可能性があるので、xoopsのphpデバグなどで確認してみてください。

  • 小生のやったこと
  1. xwordsで記事をひとつ更新
    しかし、御説明いただいた「entries.txt」と「xwords_entries.dat」の2つのファイルは/modules/xwords/ディリクトリーに作成されませんでした。
  2. そこで、御指導いただいたとおり
    「entries.txt」と「xwords_entries.dat」の2つの空のファイルを新たにサーバー上に作成し、パーミッションを「666」し、再度記事を更新してみました。
  3. その結果、「entries.txt」と「xwords_entries.dat」の中身に正規表現のデータが生成されてる様子です。(xwordsの記事を更新する都度、日付が更新されます。)
    しかし、「xwords_entries.php」の中身は、ゼロバイトのままです。(xwordsの記事を更新しても、日付は変わりません。)
  4. xoopsのphpデバグなどで確認してみましたが、エラーメッセージはありません。
  5. この段階では無意味かとも思いましたが、念のため「/modules/xpwiki/private/ini/pukiwiki.ini.php」の編集を行いましたが進展はありませんでした。
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    
    //// xwordsへのオートリンク
    $root->ext_autolinks[] = array(
    //    'target'  => '' ,                 // Target pages split with '&' (prefix search)
        'priority'=> 40 ,                // Priority (Intenal AutoLink = 50)
             'url'   => XOOPS_URL.'/modules/xwords/xwords_entries.&font(Red){dat};' ,     // 空白('')で自己xpWiki, 'ディレクトリ名' は自サイト内の別のxpWiki.
        'urldat'  => 1 ,                //urlはオートリンクデータそのもの(0:No, 1:Yes)
        'case_i'  => 1 ,                // Case insensitive
        'base'    => '' ,        // ベースページ名 (''[空白] ですべてのページ)
        'len'     => 3 ,                // オートリンクを有効にする文字数
        'enc'     => 'EUC-JP' ,            // 相手先の文字エンコーディング
        'cache'   => 10 ,                //キャッシュする分数 (最小値: 10分)
        'title'   => 'xwords:[KEY]' ,    // <a>タグのtitle属性 ([KEY] は対象語句に置換されます)
        'pat'     => XOOPS_URL.'/modules/xwords/entry.php?[URL_ENCODE]' , // リンクパターン. ([URL_ENCODE], [WIKI_ENCODE], [EWORDS_ENCODE]が使用可能))
    //    'a_target'=> '' ,                // <A> attribute 'target'.
    //    'a_class' => '' ,                // <A> attribute 'class'.
    );
Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - Children.1 | Posted on 2009-1-22 20:30 | Last modified
naaon  常連さんスーパー!   Posts: 192

nonn50さん

あ”ーすみません、書き間違いました。 :hammer:

引用:

「entries.txt」「xwords_entries.php」という2つのファイルが作成されると思います。

 ↓

「entries.txt」「xwords_entries.dat」という2つのファイルが作成されると思います。

が正解です。
自分の環境のから書き直さなければいけなかったのを、忘れていました。
たぶん、「xwords_entries.dat」の空ファイルを作って書き込み権限を与えれば、うまくいきそうな気がします。 :-)

うまく書き込まれたら、
pukiwiki.ini.phpのほうも

   'url'     => 'http://hogehoge/modules/xwords/xwords_entries.dat' ,    // 空白('')で自己xpWiki, 'ディレクトリ名' は自サイト内の別のxpWiki.

に直してください。

Votes:0 Average:0.00
Reply
Previous post - Next post | Parent - No child | Posted on 2009-1-23 17:56
nonn50  常連さんスーパー! From: 石川県野々市市  Posts: 1108

naaonさん、ばっちりです :D

たいへん、ありがとうございました。

前々記の小生の書き込みは、naaonさんに御指導いただいた内容にて修正を加えました。

Votes:0 Average:0.00
Reply

Post into this topic

Subject
guestname
Body

  Advanced search

このページのTopへ
ログイン
ユーザ名:

パスワード:

オートログイン

Basic 認証 | SSLログイン

Register now! | Lost Password?



メインメニュー
ブックマーク
Please log in to use it.
[Login]
サイト内 Wiki
☆ 検索 ☆



高度な検索(サイト内)
FireFox検索プラグイン
オンライン状況
合計 48 人がオンライン中 :-)
(フォーラム : 1 人)

登録ユーザ: 0 & ゲスト: 48

もっと...
サイト情報
管理人

nao-pon
 

登録ユーザ数: 4610


Web Services by Yahoo! JAPAN
楽天ウェブサービスセンター
Amazon.co.jpアソシエイト
現在ページのQRコード
現在ページのQRコード
[携帯対応]
参照元情報