0

以下は、CMSMS のイベント中に渡されるオブジェクト パラメーターの print_r 出力です。私はphpとCMSMSの両方が初めてです。ID 11 (persontasked) のオブジェクトの値が特に必要ですが、どこから始めればよいかわかりません。いくつかのパラメーターを持つオブジェクトのように見えます。そのうちの 1 つは配列を含むオブジェクト (fielddefs) であり、必要な値もオブジェクト内にあります。この構造をナビゲートする簡単な方法はありますか? 常に同じ場所に配置されます。

これは、必要な値を含むブロックです (Jon Smith):

[storage:ArrayObject:private] => Array
(
    [0] => Jon Smith
)

このオブジェクトの奥深くにあります:

ListIt2Item オブジェクト
(
    [アイテムID] => 55
    [エイリアス] => テストメール
    [タイトル] => テストメール
    [位置] => 7
    [アクティブ] => 1
    [作成時間] => 2014-12-30 14:48:03
    [変更時間] => 2014-12-30 19:56:46
    [開始時間] =>
    [終了時間] =>
    [所有者] => 5
    [キー1] =>
    [key2] =>
    [key3] =>
    [fielddefs] => ListIt2FielddefArray オブジェクト
        (
            [_parent_item:ListIt2FielddefArray:private] => ListIt2Item オブジェクト
 *再帰*
            [storage:ArrayObject:private] => 配列
                (
                    [6] => listit2fd_SelectDateTime オブジェクト
                        (
                            [id:ListIt2FielddefBase:private] => 6
                            [name:ListIt2FielddefBase:private] => 日付
                            [alias:ListIt2FielddefBase:private] => Time_Opened
                            [説明:ListIt2FielddefBase:プライベート] =>
                            [type:ListIt2FielddefBase:private] => SelectDateTime
                            [Friendlytype:ListIt2FielddefBase:private] => DateTime を選択
                            [value:ListIt2FielddefBase:private] => ListIt2FielddefValue オブジェクト
                                (
                                    [storage:ArrayObject:private] => 配列
                                        (
                                            [0] => 2014 年 12 月 30 日
                                        )

                                )

                            [発信元:ListIt2FielddefBase:private] => ListIt2
                            [アクティブ:ListIt2FielddefBase:プライベート] => 1
                            [無効:ListIt2FielddefBase:プライベート] =>
                            [パス:ListIt2FielddefBase:private] => /home/public_html/modules/ListIt2/lib/fielddefs/SelectDateTime
                            [position:ListIt2FielddefBase:private] => 0
                            [必須:ListIt2FielddefBase:プライベート] => 1
                            [options:ListIt2FielddefBase:private] => 配列
                                (
                                    [date_format] => mm-dd-yy
                                    [フォーマットの種類] => 1
                                    [表示秒] => 0
                                    [サイズ] => 20
                                    [time_format] => HH:mm
                                )

                            [caller:ListIt2FielddefBase:private] =>
                            [item_id:ListIt2FielddefBase:private] => 55
                            [parent_array:ListIt2FielddefBase:private] => ListIt2FielddefArray オブジェクト
 *再帰*
                            [event_handler:protected] => ListIt2EventHandlerBase オブジェクト
                                (
                                    [_field:ListIt2EventHandlerBase:private] => listit2fd_SelectDateTime オブジェクト
 *再帰*
                                )

                        )

                    [10] => listit2fd_Dropdown オブジェクト
                        (
                            [id:ListIt2FielddefBase:private] => 10
                            [name:ListIt2FielddefBase:private] => カテゴリ
                            [alias:ListIt2FielddefBase:private] => ticketcategory
                            [説明:ListIt2FielddefBase:プライベート] =>
                            [type:ListIt2FielddefBase:private] => ドロップダウン
                            [Friendlytype:ListIt2FielddefBase:private] => ドロップダウン
                            [value:ListIt2FielddefBase:private] => ListIt2FielddefValue オブジェクト
                                (
                                    [storage:ArrayObject:private] => 配列
                                        (
                                            [0] => ソフトウェアの問題
                                        )

                                )

                            [発信元:ListIt2FielddefBase:private] => ListIt2
                            [アクティブ:ListIt2FielddefBase:プライベート] => 1
                            [無効:ListIt2FielddefBase:プライベート] =>
                            [パス:ListIt2FielddefBase:private] => /home/public_html/modules/ListIt2/lib/fielddefs/Dropdown
                            [position:ListIt2FielddefBase:private] => 3
                            [必須:ListIt2FielddefBase:プライベート] => 1
                            [options:ListIt2FielddefBase:private] => 配列
                                (
                                    [オプション] => ソフトウェアの問題 ハードウェアの問題 新しいソフトウェアのリクエスト 新しいハードウェアのリクエスト その他
                                )

                            [caller:ListIt2FielddefBase:private] =>
                            [item_id:ListIt2FielddefBase:private] => 55
                            [parent_array:ListIt2FielddefBase:private] => ListIt2FielddefArray オブジェクト
 *再帰*
                            [event_handler:protected] => ListIt2EventHandlerBase オブジェクト
                                (
                                    [_field:ListIt2EventHandlerBase:private] => listit2fd_Dropdown オブジェクト
 *再帰*
                                )

                        )

                    [11] => listit2fd_Dropdown オブジェクト
                        (
                            [id:ListIt2FielddefBase:private] => 11
                            [name:ListIt2FielddefBase:private] => 割り当て先
                            [alias:ListIt2FielddefBase:private] => persontasked
                            [説明:ListIt2FielddefBase:プライベート] =>
                            [type:ListIt2FielddefBase:private] => ドロップダウン
                            [Friendlytype:ListIt2FielddefBase:private] => ドロップダウン
                            [value:ListIt2FielddefBase:private] => ListIt2FielddefValue オブジェクト
                                (
                                    [storage:ArrayObject:private] => 配列
                                        (
                                            [0] => ジョン・スミス
                                        )

                                )

                            [発信元:ListIt2FielddefBase:private] => ListIt2
                            [アクティブ:ListIt2FielddefBase:プライベート] => 1
                            [無効:ListIt2FielddefBase:プライベート] =>
                            [パス:ListIt2FielddefBase:private] => /home/public_html/modules/ListIt2/lib/fielddefs/Dropdown
                            [position:ListIt2FielddefBase:private] => 4
                            [必須:ListIt2FielddefBase:プライベート] => 1
                            [options:ListIt2FielddefBase:private] => 配列
                                (
                                    [オプション] => ジョン スミス ジョアン スミス
                                )

                            [caller:ListIt2FielddefBase:private] =>
                            [item_id:ListIt2FielddefBase:private] => 55
                            [parent_array:ListIt2FielddefBase:private] => ListIt2FielddefArray オブジェクト
 *再帰*
                            [event_handler:protected] => ListIt2EventHandlerBase オブジェクト
                                (
                                    [_field:ListIt2EventHandlerBase:private] => listit2fd_Dropdown オブジェクト
 *再帰*
                                )

                        )

                )

        )

)
4

3 に答える 3

1

print_r によって、実際よりもずっと精巧に見えたと思います。これで値を取得できました:

$itemobject = $params['item_object'];
$itemobjectArray = (array)$itemobject;
$fielddefsArray=$itemobjectArray['fielddefs'];
$output = $fielddefsArray[11];`enter code here`
于 2014-12-31T01:55:12.833 に答える
1

ここで直面する問題は、storageプロパティがプライベートであるため、ListIt2FielddefArray オブジェクトのインスタンスの外部からアクセスできないことです。

その値にアクセスするには、getter メソッドが必要です。

次のようになります。

<?php

$myobject->get('myval');
//or
$myobject->getStorage();

?>

基本的に、これらの値にアクセスできるようにするために、パブリックにアクセスできるものが必要です。

これらのクラスの実際のコードを投稿していただければ、どのようなオプションがあるかをよりよく理解できます。

于 2014-12-31T01:50:21.633 に答える
0

完全なオブジェクトとして印刷されますが。

エイリアスを使用してフィールドに直接アクセスできるように実装されています。

echo $item->persontasked;  //this should print "Jon Smith"

public function __get($key)
{
    if(isset($this->fielddefs[$key])) 
        return $this->fielddefs[$key]->GetValue();
}
于 2015-04-22T22:52:15.743 に答える