2012-03-16 19 views
6

Tôi đang gặp khó khăn với vấn đề sau.Typo3 external_table & foreign_table_where trong TCA

Tôi có hai bảng cơ sở dữ liệu, "Sách" và "Danh mục". Tôi nhận được tất cả các dữ liệu từ "sách" -table thông qua Sysfolder trong Backends Danh sách xem để chỉnh sửa, phân loại và kiểm soát chúng.

Điều tôi muốn nhận được, là sẽ có trong chế độ xem danh sách đó cũng là tên của danh mục chứa sách.

Trong "Sách", có thể có một trường ngoài khóa "category_id" xác định danh mục mà Sách thuộc về. Tôi đã thử qua số "category_id" này để lấy tên của Danh mục trong Chế độ xem danh sách Sách.

Khi tôi xác định trong TCA['books'] rằng category_id như:

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

nó kết nối Sách và Categories sử dụng category_id (Sách-bàn) và uid (trong loại-bảng).

Không giống như tôi muốn, rằng nó sẽ kết nối chúng bằng cách sử dụng category_id (trong Books-table) và id (trong Category-table). Id này là id của danh mục và có thể khác với uid.

Tôi có làm điều gì đó sai hoặc không bằng cách nào đó Typo3 tự động thực hiện "kết nối" này với các bảng nước ngoài uid. ? Có cách nào để có được nó như tôi muốn không?

Trả lời

3

Tôi e rằng không thể chỉ định khóa ngoại khác nhau. Vì vậy, trừ khi ai đó chứng minh tôi sai, đây là một cách giải quyết mà tôi sẽ sử dụng.

itemsProcFunc loại select phép bạn ghi đè hoàn toàn các mục trong menu và do đó tạo ra một mối quan hệ khác nhau.

  1. Tạo một lớp bổ sung mà sẽ được nạp chỉ trong backend và điều đó sẽ có phương pháp đó sẽ được gọi trong itemsProcFunc:

    yourMethod($PA, $fobj)

  2. Hãy phương pháp này để tải tất cả các các danh mục bạn muốn có trong hộp SELECT và đặt chúng trong $PA['items'] bằng cách ghi đè hoàn toàn nó để nó là một mảng các mảng trong đó khóa 0 là tiêu đề phần tử và 1 khóa là ID danh mục mà bạn muốn. Xem items trong select.

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

  3. Bao gồm các lớp trong ext_tables.php:

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

  4. Đặt cấu hình cho trường mục trong bảng sách:

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

+0

Cám ơn câu trả lời của bạn. Tôi đã thử nó theo cách đó. Vì vậy, tôi đã tạo một tệp lớp trong thư mục typo3conf/ext/MY_EXTENSION. – Andrew

+0

Cảm ơn câu trả lời của bạn. Tôi đã thử nó theo cách đó. Vì vậy, tôi đã tạo một tệp lớp trong thư mục typo3conf/ext/MY_EXTENSION. Trong tập tin đó tôi đã tạo một lớp với một phương thức. Tôi đã bao gồm các lớp học trong ext_tables.php Và cuối cùng tôi đã đặt các mụcProcFunc trong cấu hình cho trường danh mục theo phương pháp của tôi. Bây giờ tôi đã hiểu điều gì đó không ổn. Tôi đã cố gắng để có được một phản ứng bằng cách làm cho đơn giản echo và thoát trong phương pháp của tôi, nhưng không có gì xảy ra khi tôi tải List-view trong Backend, nó xuất hiện như trước đó. – Andrew

+0

Nếu bạn chỉ kiểm tra bằng 'echo', hãy đảm bảo rằng bạn thực sự không nhận được kết quả đầu ra. Lưu ý rằng đầu ra echo có thể được ẩn đằng sau các trường biểu mẫu và nó sẽ không ở đầu mã HTML và cũng đảm bảo rằng bạn đang kiểm tra khung bên phải. Nó có thể là tốt hơn để kiểm tra bằng cách sửa đổi '$ PA ['items']' như trong bước 2. Nếu bạn thực sự không nhận được bất cứ điều gì, kiểm tra xem bạn đã không thực hiện bất kỳ sai lầm - rằng lớp học được bao gồm và bạn thiết lập 'itemsProcFunc' đến đúng lớp và phương thức. – tmt

0

Ngoài câu trả lời tuyệt vời của cascaval: @cascaval: Bạn có nhớ trỏ đến select.items trong Typo3TCA trong các liên kết được chọn không? Các liên kết hiện tại không thẳng về phía trước.

http://docs.typo3.org/typo3cms/TCAReference/singlehtml/#columns-select-properties-items

(không có sự cho phép bình luận cho câu trả lời của bạn, vì vậy đã phải trả lời bản thân mình chỉ cho liên kết này ... lạ)

Các vấn đề liên quan