Typo3中TCA中的foreign_table和foreign_table_where

6

我在以下问题上遇到了困难。

我有两个数据库表,"Books"和"Category"。 我通过后端的Sysfolder在列表视图中获取来自"books"表的所有数据,以便进行编辑、排序和控制。

我想要的是,在该列表视图中还包括书籍所属类别的名称。

在"Books"表中,有一个外键字段"category_id",它定义了书籍属于哪个类别。 我尝试通过这个"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
            )
        ),

它使用Books表中的category_id和Category表中的uid来连接书籍和类别。

与我想要的不同,它使用Books表中的category_id和Category表中的id来连接它们。这个id是类别的id,可能与uid不同。

我是做错了什么还是Typo3自动将此“连接”到外部表uid?有没有办法让它像我想要的那样呢?

2个回答

3
很遗憾,无法指定不同的外键。除非有人证明我错了,否则这是我会使用的解决方法。 select类型的itemsProcFunc允许您完全覆盖菜单中的项目,从而创建不同的关系。
  1. 创建一个额外的类,仅在后台加载,并拥有将在 itemsProcFunc 中调用的方法:

    yourMethod($PA, $fobj)

  2. 使该方法加载您想要在 SELECT 框中拥有的所有类别,并通过完全覆盖它来将它们设置在 $PA['items'] 中,以便它成为一个元素标题和类别 ID 的数组。请参见select中的items

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


谢谢你的回答。我按照那种方式尝试了一下。所以,我在文件夹typo3conf/ext/MY_EXTENSION中创建了一个类文件。 - Andrew
谢谢你的回答。我按照这种方式尝试了一下。所以,我在文件夹typo3conf/ext/MY_EXTENSION中创建了一个类文件。在那个文件中,我创建了一个带有方法的类。我在ext_tables.php中包含了这个类。最后,我在配置中将itemsProcFunc设置为我的方法,用于类别字段。我现在理解错了什么吗?我尝试通过在我的方法中使用简单的echo和exit来获取响应,但是当我加载后端的List-view时,什么也没有发生,它像以前一样显示。 - Andrew
如果您只是使用 echo 进行检查,请确保您确实没有得到输出。请注意,echo 输出可能会隐藏在表单字段后面,并且它不会出现在 HTML 代码的开头,还要确保您正在检查正确的框架。最好通过修改 $PA['items'] 来进行检查,就像第二步一样。如果您确实没有得到任何东西,请检查您是否犯了任何错误-包括类是否已经被包含,并且您将 itemsProcFunc 设置为正确的类和方法。 - tmt

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接