2012-03-16 76 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