2010-10-28 4 views
5

Я расширил таблицу страниц и теперь хочу использовать некоторые данные в объекте домена, называемом «Теги».
Так что я попытался следующие в /Configuration/TypoScript/setup.txt:extbase сопоставление с существующей таблицей не работает

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 
     } 
    } 
} 

Но кажется, что расширение пытается получить доступ к таблице Tx_myextension_Domain_Model_Tag (который не существует)

Это ошибка я получаю:

Tx_Extbase_Persistence_Storage_Exception_SqlError`

Таблица 'tx_myextension_domain_model_tag' не существует: SELECT tx_myextension_domain_model_tag * F. ROM tx_myextension_domain_model_tag WHERE tx_myextension_domain_model_tag.id = '24' LIMIT 1

Что я сделал не так?

+0

вы пробовали удалить строку 'RECORDTYPE = Tx_myextension_Domain_Model_Tag'? – Mateng

ответ

0

Tx_myextension_Domain_Model_Tag - это имя вашего объекта? Но я думаю, это не имя таблицы, к которой вы пытаетесь получить доступ. Поэтому я предполагаю, что имя, которое вы указываете в значении «tableName», неверно. Что содержат «страницы»?

+0

Это имя класса, вы правы. Таблица «pages» - это таблица typo3-pages, поэтому она содержит все страницы typo3 (плюс столбцы, которые я добавил для расширения как [..] tag_name) – hering

+0

Я не вижу, как вы указываете отображение в образец, который вы предоставляете. Он просто говорит, что ваша модель настойчивости знает, что класс Tx_myextension_Domain_Model_Tag сопоставлен, но явно ли вы указываете, что этот класс сопоставляется с таблицей, которую вы хотите? Если нет, ваша ошибка является нормальной, потому что она будет принимать имя класса как имя таблицы (которая, как вы сказали, не существует). – Hal

+0

Но в сопоставлении я указал имя таблицы ('tableName = pages'). Возможно, я ошибаюсь в синтаксисе, но я думал, что мой кусок кода должен делать то, что я ожидаю: сопоставьте класс домена с таблицей страниц и не позволяйте extbase пытаться получить доступ к таблице, названной как класс домена. – hering

2

Вы попробовали «config.tx_extbase» вместо «plugin.myextension»?

Что-то вроде

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

работает для меня.

+0

работает для меня (tm) – pduersteler

+0

Не работает для меня. В моем расширении у меня есть модель домена 'Tx_Extname_Domain_Model_Member', которая расширяет' Tx_Extbase_Domain_Model_FrontendUser'. Я сопоставляю свою модель с fe_users по команде 'config.tx_extbase.persistence.classesTx_Extname_Domain_Model_Member.mapping.tableName = fe_users', но когда я пытаюсь сохранить запись в BE, я получаю ошибку' SQL error: 'Table' usrdb_typo3.tx_extname_domain_model_member 'doesn' t существует''. Таким образом, я предполагаю, что отображение не работает должным образом. Однако он показан в моем браузере объектов TS. – Martin

3

Не забудьте указать шаблон шаблона расширения в шаблон (шаблон> редактировать весь шаблон> включить статические шаблоны), в противном случае ваш файл setup.txt не будет оцениваться.

0

Вы указали отдельные страницы как тип записи Tx_myextension_Domain_Model_Tag? Предполагается войти в поле таблицы страниц doctype (поэтому вам нужно будет изменить тип данных mysql этого поля. В противном случае Extbase не знает, что эта конкретная страница является записью extbase, а не обычной страницей. Подробнее о однонаправленном наследовании (STI) в Extbase: http://pascal-jungblut.com/blog/blog-post/2010/11/06/single-table-inheritance-in-extbase.html

+0

Ссылка на Pascal 404's – Mateng

2

Чтобы проверить, какие типы записей допустимы, используйте модуль конфигурации в BE, в разделе $ TCA найдите свою таблицу (в этом случае страницы) и тип проверки column (... [ctrl] [type] - для страниц это «doktype», который определяет, является ли запись на странице стандартной страницы или sysfolder и т. д.).

Этот столбец является tinyint (3) в базе данных, поэтому вы можете не писать v alue 'Tx_myextension_Domain_Model_Tag'. Создайте в своем новом doktype, идентифицированном номером, и установите для него recordType.

Необязательно вы можете просто удалить recordType из конфигурации сопоставления, если тип страницы не имеет значения для вас.

0

Вы делаете это при вызове typo3 с eID? здесь некоторая конфигурация не загружена ..

если да, то попробуйте, если загрузка всех настроек решает эту проблему:

... 
    $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

Позаботьтесь о правильном именовании относительно FE-плагинов:

plugin.tx_myextension 

 Смежные вопросы

  • Нет связанных вопросов^_^