2012-03-16 8 views
6

Mam problem z następującym problemem.Typo3 foreign_table & foreign_table_where in TCA

Mam dwie tabele bazy danych, "Książki" i "Kategoria". Dostaję wszystkie dane z "książek" -tabeli przez Sysfolder w widoku listy widoków do edycji, sortowania i kontrolowania ich.

Chciałbym, aby w widoku listy znajdowała się również nazwa kategorii, do której należy książka.

W tabeli "Książki" znajduje się klucz obcy Field "category_id", który definiuje to, do której kategorii należy Księga. Próbowałem przez to "category_id", aby uzyskać nazwę kategorii w widoku listy książek.

Kiedy definiować w TCA['books'] że category_id jak:

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

Łączy Książki i kategorie za pomocą category_id (w książkach tabeli) i uid (w kategorii stole).

Nie tak jakbym chciał, aby połączyć je przy użyciu id_kolekcji (w książce-stole) i id (w tabeli kategorii). Ten id jest identyfikatorem kategorii i może być inny niż uid.

Czy robię coś źle, czy też Typo3 w jakiś sposób automatycznie tworzy to "połączenie" z zagranicznymi tabelami uid. ? Czy jest jakiś sposób, aby uzyskać to tak, jak bym chciał?

Odpowiedz

3

Obawiam się, że nie można określić innego klucza obcego. Więc jeśli ktoś nie udowodni, że się mylę, oto sposób obejścia tego problemu.

itemsProcFunc typu select pozwala całkowicie zastępują elementy w menu, a tym samym stworzyć inną relację.

  1. Załóż dodatkową klasę, która będzie ładowany tylko w backend i że będzie mieć metodę, która będzie wywoływana w itemsProcFunc:

    yourMethod($PA, $fobj)

  2. sprawiają, że metoda, aby załadować wszystkie kategorie, które chcesz mieć w polu SELECT i ustawić je w $PA['items'], całkowicie je przesyłając, tak aby była tablicą tablic, gdzie kluczem 0 jest tytuł elementu, a klucz 1 jest żądanym identyfikatorem kategorii. Zobacz items w select.

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

  3. obejmują klasę w ext_tables.php:

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

  4. Ustawia config dla pola kategorii w tabeli książki:

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

+0

Dzięki za odpowiedź. Próbowałem tego w ten sposób. Zrobiłem plik klasy w folderze typo3conf/ext/MY_EXTENSION. – Andrew

+0

Dzięki za odpowiedź. Próbowałem tego w ten sposób. Zrobiłem plik klasy w folderze typo3conf/ext/MY_EXTENSION. W tym pliku stworzyłem klasę metodą. Zawarłem klasę w ext_tables.php I na końcu ustawiłem itemsProcFunc w config dla pola kategorii na moją metodę. Czy zrozumiałem teraz coś nie tak. Próbowałem uzyskać odpowiedź, wykonując proste echo i wyjście w mojej metodzie, ale nic się nie dzieje, gdy ładuję widok listy w Backend, pojawia się jak wcześniej. – Andrew

+0

Jeśli sprawdzasz tylko za pomocą 'echo', upewnij się, że naprawdę nie otrzymujesz danych wyjściowych. Zauważ, że wyjście echa może być ukryte za polami formularza i że nie będzie ono na początku kodu HTML, a także upewnij się, że sprawdzasz prawą ramkę. Lepiej sprawdzić, modyfikując '$ PA ['items']' jak w kroku 2. Jeśli naprawdę nic nie dostałeś, sprawdź, czy nie popełniłeś żadnego błędu - czy klasa jest zawarta i że ustawiłeś 'itemsProcFunc' do właściwej klasy i metody. – tmt

Powiązane problemy