2

現在、カスタム モジュール アドオンに取り組んでおり、コントロール パネル管理のテーブルで並べ替えとフィルタリングを使用できるようにしたいと考えていました。EE テーブル クラスとフォーム ヘルパーを使用しています。ここでドキュメントに従って設定しようとしていますが、クラスで「_datasource」メソッドを呼び出そうとすると、このエラーが発生します

Fatal error: Call to undefined method Content_publish::_datasource() in /home/public_html/system/expressionengine/libraries/EE_Table.php on line 162

私はそれがスコーピングの問題だと感じていますが、テーブルクラス '$this->EE->table->datasource()' メソッドでは、データソース関数の名前で文字列値を渡すだけでよいはずです。やってます。

この問題を抱えているのは私だけではないようです。この EE ディスカッション フォーラム スレッドには、詳細とコード例があります。

ドキュメントは本当に明確ではありません。また、EE 独自のコメント モジュールを調べて、理解できるかどうかを調べてみましたが、うまくいきませんでした。誰でもこれを経験したことがありますか?

私が呼んでいるメソッドは次のとおりです。

$data = $this->EE->table->datasource('_datasource');

そして、これは私のクラスでの私の機能です:

function _datasource()
{
     // ....
     // $query comes from DB result set code above.
     // I have omitted it here for brevity

    $datarows = array();
    foreach ($query->result_array() as $key => $row)
    {
    $datarows[] = array(
        'entry_id'          => $row['entry_id'],
        'date'   => date('Y-m-d',$row['entry_date']),
        'author'          => $row['screen_name'],
        'payment'         => $payment_amount,
        'status'             => $status,
        'title'          => $edit_href.$row['title']."</a>"
      );
    }

    return $datarows;
} 
4

2 に答える 2

2

私も問題を抱えており、generate() と datasource の混合ソリューションが機能しています。ここにあります:

私のmcpファイルでは:

public function index()
{
    $this->EE->cp->set_variable('cp_page_title', lang('my_module_name'));
    $data = $this->EE->table->datasource('_datasource');

    return $this->EE->load->view('index', $data, TRUE);
}

public function _datasource()
{
    $headers = array(
        'name'  => array('header' => 'Name'),
        'color' => array('header' => 'Color'),
        'size'  => array('header' => 'Size')
    );

    $rows = array(
        array('name' => 'Fred', 'color' => 'Blue',  'size' => 'Small'),
        array('name' => 'Mary', 'color' => 'Red',   'size' => 'Large'),
        array('name' => 'John', 'color' => 'Green', 'size' => 'Medium'),
    );

    return array(
        'rows' => $rows,
        'headers' => $headers
    );
}

私のインデックスビューファイルでは:

$this->table->set_columns($headers);
$this->table->set_data($rows);
echo $this->table->generate();

現時点では機能しているようで、ページネーションはまだ試していませんが、並べ替えは機能します。

于 2013-03-18T10:58:36.320 に答える
2

datasourceコールバック関数はModule_mcpクラスにある必要があります(エラーを説明するプラグインで使用しようとしているフォーラムスレッドを見てください)。

データソース メソッドを別のクラスに配置する場合は、呼び出す直前に次の行を追加しdatasource()て、テーブル ライブラリをだまして正しいクラスを使用させます。

// ensure table callbacks use this class rather than our MCP file
$this->EE->_mcp_reference =& $this;
$data = $this->EE->table->datasource('_datasource');

tableform_validationライブラリは、特殊変数を使用する唯一の 2 つであるため、変更_mcp_referenceによる副作用は見られず、少なくとも 2 つのモジュールでこれを正常に実行しました。

補足として、組み込みのテーブルソーターの使用方法の良い例が必要な場合は、 をご覧くださいsystem/expressionengine/controllers/cp/members.php。ドキュメンテーションはかなり悪いですが、ソースコードは常に真実を語っています:)

于 2012-11-17T02:59:39.567 に答える