2012-03-16 8 views
6

Estoy luchando con el siguiente problema.Typo3 foreign_table & foreign_table_where en TCA

Tengo dos tablas de base de datos, "Libros" y "Categoría". Obtengo todos los datos de la tabla de "libros" a través de Sysfolder en la vista de lista de programas de fondo para editarlos, clasificarlos y controlarlos.

Lo que me gustaría conseguir, es que habría en esa vista de lista también el nombre de la categoría a la que pertenece el libro.

En "Libros" -table hay un campo de claves foráneas "category_id" que define que para qué categoría pertenece el libro. He intentado a través de este "category_id" para obtener el nombre de la categoría en la vista de lista de los libros.

Cuando defino en TCA['books'] que category_id como:

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

que conecta los libros y las categorías a partir de category_id (en los libros-mesa) y uid (en la categoría de la tabla).

no me gusta Me gustaría, que sería la conexión mediante category_id (en los libros de la tabla) y la identificación (en la categoría de la tabla). Este id es un id de la categoría y puede ser diferente de ese uid.

estoy haciendo algo mal o hace Typo3 alguna manera hace que automáticamente esta "conexión" a las tablas extranjeras uid. ? ¿Hay alguna forma de obtenerlo como me gustaría?

Respuesta

3

Me temo que no es posible especificar una clave externa diferente. Entonces, a menos que alguien me demuestre que estoy equivocado, aquí hay una solución alternativa que usaría.

itemsProcFunc del tipo select le permite anular completamente los elementos del menú y así crear una relación diferente.

  1. Crear una clase extra que será cargada solamente en el back-end y que tendrá el método que será llamado en el itemsProcFunc:

    yourMethod($PA, $fobj)

  2. hacer que el método para cargar todo el categorías que desea tener en el cuadro SELECCIONAR y configurarlos en el $PA['items'] anulándolo por completo para que sea una matriz de matrices donde la clave 0 es título del elemento y 1 clave es la ID de categoría que desea. Consulte items en select.

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

  3. incluyen la clase de los ext_tables.php:

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

  4. Ajuste la configuración para el campo de categoría en la tabla libros:

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

+0

Gracias por su respuesta. Lo intenté de esa manera. Así que hice un archivo de clase en la carpeta typo3conf/ext/MY_EXTENSION. – Andrew

+0

Gracias por su respuesta. Lo intenté de esa manera. Así que hice un archivo de clase en la carpeta typo3conf/ext/MY_EXTENSION. En ese archivo hice una clase con un método. Incluí la clase en ext_tables.php Y al final configuré los itemsProcFunc en config para el campo de categoría en mi método. ¿He entendido algo mal ahora? Intenté obtener una respuesta haciendo un eco simple y salí en mi método, pero no ocurre nada cuando cargo la vista de lista en Backend, aparece como antes. – Andrew

+0

Si solo está marcando con 'echo', asegúrese de que realmente no obtiene el resultado. Tenga en cuenta que la salida del eco puede estar oculta detrás de los campos del formulario y que no estará al principio del código HTML y también asegúrese de que está revisando el marco correcto. Tal vez sea mejor verificar modificando '$ PA ['items']' como en el paso 2. Si no está obteniendo nada, verifique que no ha cometido ningún error, que la clase está incluida y que ha configurado 'itemsProcFunc' a la clase y método correctos. – tmt

Cuestiones relacionadas