2012-03-16 17 views
6

Sono in difficoltà con il seguente problema.Typo3 foreign_table & foreign_table_where in TCA

Ho due tabelle di database, "Libri" e "Categoria". Sto ricevendo tutti i dati da "libri" -table tramite Sysfolder nella vista Elenco backends per modificarli, ordinarli e controllarli.

Quello che vorrei ottenere, è che ci sarebbe in quella lista anche il nome della categoria a cui appartiene il libro.

Nella tabella "Libri" è presente una chiave esterna del campo "category_id" che definisce quello per cui appartiene il Libro. Ho provato tramite questo "category_id" per ottenere il nome della categoria nella visualizzazione elenco dei libri.

Quando mi definisco in TCA['books'] che category_id come:

'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 
      ) 
     ), 

collega i libri e categorie usando category_id (in Libri-tabella) e uid (nella Categoria-tabella).

Non come vorrei, che li collegherebbe usando category_id (in Books-table) e id (in Category-table). Questo id è un id della categoria e può essere diverso da quello uid.

Sto facendo qualcosa di sbagliato o Typo3 in qualche modo rende automaticamente questa "connessione" alle tabelle estere uid. ? C'è un modo per ottenerlo come vorrei?

risposta

3

Ho paura che non sia possibile specificare una chiave esterna diversa. Quindi, a meno che qualcuno non mi provi male, ecco una soluzione che vorrei usare.

itemsProcFunc del tipo select permette di ignorare completamente le voci del menu, e quindi creare un rapporto diverso.

  1. Creare una classe in più che verrà caricato solo il backend e che avrà il metodo che verrà chiamato nel itemsProcFunc:

    yourMethod($PA, $fobj)

  2. rendere il metodo per caricare tutto il categorie che si desidera avere nella casella SELECT e impostarle nello $PA['items'] sostituendolo completamente in modo che si tratti di un array di array in cui la chiave 0 è il titolo dell'elemento e 1 è l'ID della categoria che si desidera. Vedi items in select.

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

  3. includere la classe nelle ext_tables.php:

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

  4. Impostare la configurazione per il campo categoria nella tabella libri:

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

+0

Grazie per la risposta. L'ho provato in quel modo. Quindi, ho creato un file di classe nella cartella typo3conf/ext/MY_EXTENSION. – Andrew

+0

Grazie per la risposta. L'ho provato in quel modo. Quindi, ho creato un file di classe nella cartella typo3conf/ext/MY_EXTENSION. In quel file ho fatto una lezione con un metodo. Ho incluso la classe in ext_tables.php E alla fine ho impostato gli elementiProcFunc in config per il campo categoria al mio metodo. Ho capito qualcosa di sbagliato ora. Ho cercato di ottenere una risposta facendo eco semplice e uscire nel mio metodo, ma non succede nulla quando carico la vista Elenco nel backend, si presenta come prima. – Andrew

+0

Se si verifica solo con 'echo', assicurarsi che non si stia ottenendo l'output. Si noti che l'eco di output potrebbe essere nascosto dietro i campi del modulo e che non si troverà all'inizio del codice HTML e assicurarsi anche che si stia controllando il frame corretto. Potrebbe essere meglio controllare modificando '$ PA ['items']' come al punto 2. Se non stai ottenendo nulla, controlla di non aver commesso errori - che la classe è inclusa e che hai impostato 'itemsProcFunc' alla giusta classe e metodo. – tmt

Problemi correlati