2012-03-16 79 views
6

我正在努力解決以下問題。Typo3 foreign_table&foreign_table_where in TCA

我有兩個數據庫表,「書」和「類別」。我從「書籍」中獲取所有數據 - 通過後臺列表視圖中的Sysfolder進行編輯,排序和控制。

我想得到的是,該列表視圖中還會出現該書所屬類別的名稱。

在「Books」 - 表中,有一個字段外鍵"category_id",它定義了Book屬於哪個類別。我已通過此"category_id"嘗試獲取書籍列表視圖中類別的名稱。

當我定義TCA['books']category_id,如:

'category_id' => array (  
      'exclude' => 0,  
      'label' => 'Cat name',  
      'config' => array (
       'type'  => 'select', 
       'foreign_table' => 'category', 
       'foreign_table_where' => 'AND category.id=###REC_FIELD_category_id###', 
       'eval'  => 'int', 
       'checkbox' => '0', 
       'default' => 0 
      ) 
     ), 

它的圖書類別(在分類表)使用category_id(在書籍表)和uid連接。

不像我想的那樣,它會使用category_id(在Books-table中)和id(在Category-table中)連接它們。這個id是類別的id,可以和uid不同。

我做錯了什麼或Typo3以某種方式自動使這個「連接」到外國表uid。 ?有什麼方法可以讓我喜歡嗎?

回答

3

恐怕不能指定不同的外鍵。所以除非有人證明我錯了,否則我會使用一種解決方法。

selectitemsProcFunc讓您完全覆蓋在菜單中的項目,從而創造一個不同的關係。

  1. 創建將只在後臺加載一個額外的類,這將有將在itemsProcFunc調用的方法:裝入所有

    yourMethod($PA, $fobj)

  2. 製作方法您想要在SELECT框中具有的類別,並通過完全重寫它們來將它們設置在$PA['items']中,以便它是一個數組數組,其中0鍵是元素標題,1鍵是所需的類別標識。請參閱items中的select

    $PA['items'] = array(array($title, $id, ''));

  3. 包括在ext_tables類。PHP

    if(TYPO3_MODE == 'BE') require_once(t3lib_extMgm::extPath($_EXTKEY).'class.YOUR_CLASS.php');

  4. 設置在書籍表中的類別字段的配置:

    'itemsProcFunc' => 'tx_YOUR_CLASS->yourMethod',

+0

謝謝您的回答。我試過那樣。 因此,我在文件夾typo3conf/ext/MY_EXTENSION中創建了一個類文件。 – Andrew 2012-03-16 19:22:09

+0

感謝您的回答。我試過那樣。 因此,我在文件夾typo3conf/ext/MY_EXTENSION中創建了一個類文件。 在那個文件中,我用一個方法做了一個類。 我列入ext_tables.php 類,並在結束時,我設置好的了itemsProcFunc在配置的類別字段我的方法。 我現在明白了什麼錯誤。我嘗試通過在我的方法中創建簡單的echo和退出來獲得響應,但是當我在後端加載List-view時,沒有任何反應,它像之前顯示的那樣。 – Andrew 2012-03-16 19:30:12

+0

如果您僅使用'echo'檢查,請確保您確實沒有得到輸出。需要注意的是回聲輸出可能的表單字段後面隱藏,並且它不會是在HTML代碼的開頭,並確保您正在檢查的右框架。這可能是更好地在步驟2中修改'$ PA [「項目」]'因爲如果你真的沒有得到任何檢查,檢查是否已沒有犯錯 - 這個類包含與您設置'itemsProcFunc'到正確的類和方法。 – tmt 2012-03-20 07:42:33