2012-11-15 84 views
2

我目前正在使用自定義模塊插件,並且希望能夠在我的控制面板管理中的表格上使用排序和篩選。我正在使用EE表類和窗體幫助器。我試圖按照documentation here設置它,但是當我打電話試圖調用班裏「_datasource」的方法我得到這個錯誤表達式引擎模塊表和datasort

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()'方法中,你應該只是傳遞一個字符串值和你正在做的數據源函數的名字。

我似乎並不是這個問題唯一的一個。 this EE Discussion forum thread

有更多的細節和代碼示例文檔不是很清楚。我也試着看看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; 
} 

回答

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庫是唯一使用特殊變量_mcp_reference的兩個變量,所以我看不到任何副作用來更改它,並且至少已在兩個模塊中成功完成此操作。

在附註中,如果您想要一個如何使用內置tablesorter的好例子,請看system/expressionengine/controllers/cp/members.php。該文檔是相當糟糕的,但源代碼總是說實話:)

+0

謝謝阿德里安。在特定的線程中發佈可能會導致混淆,但我的_datasource函數肯定是在我的模塊的Module_mcp類中。我確信我只是在做一些愚蠢的事情,並且有一個很好的例子,可能會被證明是答案。謝謝你指出我朝着正確的方向。我會盡量發佈更新,讓你知道它是如何發生的。 –

+0

您的datasort方法可能在您的Module_mcp類上,但您是從mcp文件還是從插件類調用datasort?可能最好是'print_r($ this-> EE - > _ mcp_reference)'以防萬一,並確保它指向你當前的類。 –

+0

所述的print_r返回: '對象(Tmo_payments_mcp)[424] 公共 '版本'=>字符串 '2.0.0'(長度= 5) 私人 '_base_url'=>字符串「artsys S = 24bc4a880ab8ce6a4dd458d7f893dc8ebc181c09 & d =? CP & C = addons_modules & M = show_module_cp &模塊= tmo_payments'(長度= 124) 私人 '_form_base'=>字符串 'C = addons_modules & M = show_module_cp &模塊= tmo_payments'(長度= 61) 私人 'EE' =>& ...' –

2

我一直有問題了,並有一個混合的解決方案的generate()和數據源的工作。這是在這裏:

在我的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(); 

似乎在一瞬間被工作,我還沒有嘗試分頁呢,但分揀工作。