ページ 11

[MODx Evolution] phiEditedonで日付の変更ができない  【解決済み】

Posted: 2009年10月15日(木) 12:07
by sodx
MODxを9.xからMODx Evolutionに変更したので、日付編集をするプラグイン「phiEditedon(1.1.0)」をアップデートしたのですが、
日付更新の方法をManualにして日付を入れドキュメントの保存をした際に、下記のメッセージがでて、日付が変更できませんでした。
AutoとDisableはちゃんと動作したのですが、何が原因なのでしょうか?

-----------------------------------------------------------------------------------------------------------------------------------
Compilation failed: unrecognized character after (?< at offset 4

Warning: preg_match() [function.preg-match]: Compilation failed: unrecognized character after (?< at offset 4 in サーバーのアドレス/manager/includes/document.parser.class.inc.php(746) : eval()'d code on line 66
-----------------------------------------------------------------------------------------------------------------------------------

環境情報
MODxバージョン:1.0.0J
PHPバージョン:5.1.6
mysqlバージョン: 5.0.45

Re: [MODx Evolution] phiEditedonで日付の変更ができない

Posted: 2009年10月15日(木) 13:55
by sama55
XAMPP環境に新規インストールした1.0.0Jではエラーは出ませんね。アップグレードに限った問題でしょうか。。。
1.0.0Jでは、日付フォーマットをグローバル変数に追加してたと思います。本家版1.0.0ではどうでしょう???
コードをしっかり追ったわけではありませんが、この辺が関係してそうな気がします。

 ・グローバル設定の日付関係の設定はどうなってますでしょうか?
 ・1.0.0Jの場合、グローバル設定を保存するとどうなるでしょうか?

リソース(ドキュメント)の編集を始めたときに、設定済みの編集日付がエコーされないのは仕様だったかなーー?
(以前から表示されてなかった気も・・・仕様がよく思い出せない)

Re: [MODx Evolution] phiEditedonで日付の変更ができない

Posted: 2009年10月16日(金) 20:39
by Phize
確認してみたところ、プラグインの中でPHP5.2.2以降のみで使える表記を使ってしまっていました :oops:

プラグインコードの58~62行目と65~73行目を修正してみていただけますか?
以下のコードのように、?<****>という部分を?P<****>にすると直ると思うのですが…。

phiEditedonのプラグインコード(phieditedon.plugin.txt) 58~62行目

コード: 全て選択

            $datetime_format = str_replace(
                                   array('dd-mm-YYYY', 'mm/dd/YYYY', 'YYYY/mm/dd'),
                                   array('(?P<day>\d{1,2})-(?P<month>\d{1,2})-(?P<year>\d{4})', '(?P<month>\d{1,2})/(?P<day>\d{1,2})/(?P<year>\d{4})', '(?P<year>\d{4})/(?P<month>\d{1,2})/(?P<day>\d{1,2})'),
                                   $datetime_format
                               );
 
phiEditedonのプラグインコード(phieditedon.plugin.txt) 65~73行目

コード: 全て選択

                case 0:  // Manual mode
                    if (!empty($pe_editedon['value']) && preg_match('!^' . $datetime_format . ' (?P<hour>\d{1,2}):(?P<minute>\d{1,2}):(?P<second>\d{1,2})$!', $pe_editedon['value'], $matches)) {
                        $editedon = mktime($matches['hour'], $matches['minute'], $matches['second'], $matches['month'], $matches['day'], $matches['year']);

$modx->logEvent(1, 1, 'start');

                        $modx->db->update("editedon = " . $editedon, $table, "id = '" . $id . "'");
                    }
                    break;
 
参考: PHP: preg_match - Manual

Re: [MODx Evolution] phiEditedonで日付の変更ができない

Posted: 2009年10月17日(土) 22:15
by sodx
Phize さんが書きました:確認してみたところ、プラグインの中でPHP5.2.2以降のみで使える表記を使ってしまっていました :oops:
プラグインコードの58~62行目と65~73行目を修正してみていただけますか?
以下のコードのように、?<****>という部分を?P<****>にすると直ると思うのですが…。
修正をしたら、直りました :D PHPはあまり詳しくないので、自分で原因を突き止めれなかったのが情けないです。PHPができたらMODxの活用幅ももっと広がりますよね。近いうちに勉強しなくちゃ。
迅速な対応ありがとうございました!