2010-10-28 8 views
5

He extendido la tabla de páginas y ahora quiero usar algunos de los datos en un objeto de dominio llamado "Etiquetas".
así que he intentado lo siguiente en el /Configuration/TypoScript/setup.txt:El mapeo extbase a una tabla existente no funciona

plugin.myextension.persistence.classes.Tx_myextension_Domain_Model_Tag { 
    mapping { 
     tableName = pages 
     recordType = Tx_myextension_Domain_Model_Tag 
     columns { 
      tx_myextension_tag_name.mapOnProperty = name 
      uid.mapOnProperty = id 
     } 
    } 
} 

pero parece que la extensión intenta acceder a la tabla Tx_myextension_Domain_Model_Tag (que no existe)

Este es el error que recibo:

Tx_Extbase_Persistence_Storage_Exception_SqlError`

La tabla no existe 'tx_myextension_domain_model_tag': tx_myextension_domain_model_tag SELECT * F. ROM tx_myextension_domain_model_tag WHERE tx_myextension_domain_model_tag.id = '24' LIMIT 1

¿Qué he hecho mal?

+0

¿Ha intentado borrar la línea 'RecordType = Tx_myextension_Domain_Model_Tag'? – Mateng

Respuesta

0

Tx_myextension_Domain_Model_Tag es el nombre de su objeto, ¿verdad? Pero supongo que este no es el nombre de la tabla a la que intenta acceder. Así que supongo que el nombre que está proporcionando en el valor "tableName" es incorrecto. ¿Qué contiene "páginas"?

+0

Este es el nombre de la clase, tienes razón. La tabla "páginas" es la tabla typo3-pages, por lo que contiene todas las páginas de typo3 (más las columnas que he agregado para la extensión como [..] nombre_de_tamaño) – hering

+0

No veo cómo se especifica la asignación en el muestra que estás proporcionando Simplemente dice que su modelo de persistencia es consciente de que la clase Tx_myextension_Domain_Model_Tag está asignada, pero ¿especifica explícitamente que esta clase está asignada a la tabla que desea? Si no, tu error es normal porque tomaría el nombre de la clase como el nombre de la tabla (que, como dijiste, no existe). – Hal

+0

Pero en el mapeo especifiqué el nombre de la tabla ('tableName = pages'). Tal vez estoy equivocado con la sintaxis, pero pensé que mi fragmento de código debería hacer lo que esperaba: Asignar la clase de dominio a la tabla de páginas e impedir que extbase intente acceder a una tabla con el nombre de la clase de dominio. – hering

2

¿Intentó "config.tx_extbase" en lugar de "plugin.myextension"?

Algo así como

config.tx_extbase.persistence.classes.Tx_MyExtension_Domain_Model_Tag.mapping.tableName = pages 

funciona para mí.

+0

funciona para mí (tm) – pduersteler

+0

No funciona para mí. En mi extensión tengo un modelo de dominio 'Tx_Extname_Domain_Model_Member' que extiende' Tx_Extbase_Domain_Model_FrontendUser'. Asigné mi Modelo a fe_users por 'config.tx_extbase.persistence.classesTx_Extname_Domain_Model_Member.mapping.tableName = fe_users' pero cuando intento guardar un registro en BE, aparece el error' SQL error: 'Table' usrdb_typo3.tx_extname_domain_model_member 'doesn' t existe''. Por lo tanto, supongo que la asignación no funciona correctamente. Sin embargo, se muestra en mi navegador de objetos TS. – Martin

3

No olvide incluir su plantilla de extensión de tipografía en su plantilla (plantilla> editar plantilla completa> incluir plantillas estáticas); de lo contrario, no se evaluará su configuración .txt.

0

¿Ha especificado las páginas individuales como tipo de registro Tx_myextension_Domain_Model_Tag? Se supone que debe ir al campo doctype de la tabla de páginas (por lo tanto, deberá cambiar el tipo de datos mysql de ese campo. De lo contrario, Extbase no sabe que esta página específica es un registro extbase y no una página normal. Obtenga más información sobre la herencia de tablas únicas (STI) en Extbase: http://pascal-jungblut.com/blog/blog-post/2010/11/06/single-table-inheritance-in-extbase.html

+0

El enlace a Pascal 404's – Mateng

2

Para verificar qué tipos de registros son aceptables, use el módulo de configuración en BE, en la sección $ TCA busque su tabla ([páginas] en este caso) y verifique el tipo column (... [ctrl] [type] - para páginas es 'doktype', que decide si el registro de página es una página estándar o sysfolder, etc.).

Esta columna es tinyint (3) en la base de datos, por lo que puede no escribir v alue 'Tx_myextension_Domain_Model_Tag' a él. Cree en su ext nuevo doktype identificado por número y establezca recordType en él.

Opcionalmente, puede eliminar recordType de la configuración de asignación si el tipo de página no le importa.

0

¿Hace esto en una llamada typo3 con eID? aquí no se carga alguna configuración ..

en caso afirmativo, probar si la carga de toda la configuración resuelve el problema:

... 
    $GLOBALS['TSFE'] = \t3lib_div::makeInstance('tslib_fe', $TYPO3_CONF_VARS, $_GET["id"], 0, true); 
    //$GLOBALS['TSFE'] = new $temp_TSFEclassName(); 
    $GLOBALS['TSFE']->connectToDB(); 
    $GLOBALS['TSFE']->initFEuser(); 
    $GLOBALS['TSFE']->determineId(); 
    $GLOBALS['TSFE']->getCompressedTCarray(); 
    $GLOBALS['TSFE']->initTemplate(); 
    $GLOBALS['TSFE']->getConfigArray(); 
    ... 
0

Tenga cuidado de la convención de nomenclatura adecuada en relación con FE-plugins:

plugin.tx_myextension 
Cuestiones relacionadas