PDA

Просмотр полной версии : запись данных прямо в tt_content


Anlov
15.09.2011, 14:37
пытаюсь сделать импорт писем из почтового ящика. есть куча папок, в каждой из которых некоторое количество сообщений.
все нашел, все прочитал, по переменным распихал. Ручками сделал в ВЕ страницы для каждой папки из почтового ящика. теперь пытаюсь записать каждое сообщение прямо в tt_content с соответствуюшим pid. Запись в tt_content появляется. А на странице в соответствующем пункте меню FE - без изменений. Что я не сделал или делаю не так?

dmartynenko
16.09.2011, 14:58
У каждой записи tt_content есть еще тип (текст, текст + изображение и т.п.), поля видимости (скрыта, удалена - по умолчанию 0), поля видимости по дате-времени (от-доб по умолчанию 0), номер столбца в которой выводить.

Если вы создадите вручную через BE запись и она появится в FE (то есть в FE у вас все настроено и работает корректно), и потом по "образцу" будете создавать записи роботом указывая аналогичные значения в полях, только меня содержание и дату добавления (crdate, tstamp), то все должно получиться.

Anlov
16.09.2011, 15:27
да так и делаю - и ничего.
даже, если я в БД тупо копирую какую-то уже имеющуюся запись и изменяю там uid и sorting, то этот элемент ни BE, ни в FE не появляется. Попробуйте сами, может я где-то что-то упускаю?
Мысль, что содержимое любого элемента страницы сохраняется и содержится только в tt_content получается правильная?

dmartynenko
16.09.2011, 16:15
А если вы у существующей записи поменяете uid и sorting она исчезнет из BE ?

Есть еще системная таблица sys_refindex, в которой сохраняются взаимосвязи записей. Но не думаю что она так сильно влияет на вывод в BE или FE. По крайней мере запиcи из других таблиц (созданные экстами) выводятся без учета этой таблицы.

elezeo
18.09.2011, 22:02
А Вы попробуйте сделать Импорт средствами (функциями) самого TYPO3
$res = $GLOBALS['TYPO3_DB']->sql_query($query);
Только разбейте запросы на одиночные.
Эффект будет тот же?

dmartynenko
19.09.2011, 12:27
$GLOBALS['TYPO3_DB']->sql_query это то же самое что вызвать mysql_query().

elezeo
19.09.2011, 16:30
Ну в целом да.
Тогда делайте дебаг вывода контента и смотрите в чем разница между выборками.
Проверьте также вот эти параметрв
colPos=0 AND sys_language_uid=0
Вообще предполагаю дело не в контенте а в привязке их к странице.
Экспортируете гнмелько строк из вашей таблицы, сравните их визуально с теми, что Вы вставляете.
И если сами не можете понять - выложите на обозрение структуру Вашей таблицы tt_content и несколько строк из нее, в том числе ваши, чтобы эксперты уже могли с чем то работать, а не просто со словами.

Anlov
20.09.2011, 16:56
А если вы у существующей записи поменяете uid и sorting она исчезнет из BE ?

Есть еще системная таблица sys_refindex, в которой сохраняются взаимосвязи записей. Но не думаю что она так сильно влияет на вывод в BE или FE. По крайней мере запиcи из других таблиц (созданные экстами) выводятся без учета этой таблицы.

Точно. Меняю UID с 240 на 241 - исчезает. В таблице sys_refindex указана зависимость между страницей и контентом в таком виде:
имя таблицы - pages; recuid - 217 (судя по всему, id страницы); ref_table - tt_content (ссылающаяся таблица?); ref_uid - 240 (ссылающийся элемент?)
Так вот, когда добавляю запись прямо в tt_content и даю номер uid 240 - блок стразу появляеися и ВЕ, и в FE. Теперь пытаюсь добавить копию записи с uid 240 в sys_refindex, но только uid даю 241 (запись с таким uid уже есть в tt_content) - блок нигде не появляется. Там (sys_refindex) есть еще такое поле hach, что интересно там лежит?

dmartynenko
20.09.2011, 17:13
Закралось подозрение, что у вас включена какая-нибудь версионность, либо многоязычие.

Так как sys_refindex маловероятно что используется при выводе в FE.

elezeo
20.09.2011, 17:53
В классе "t3lib\class.t3lib_tcemain.php" есть такая функция

/**
* Update Reference Index (sys_refindex) for a record
* Should be called any almost any update to a record which could affect references inside the record.
*
* @param string Table name
* @param integer Record UID
* @return void
*/
function updateRefIndex($table, $id) {
$refIndexObj = t3lib_div::makeInstance('t3lib_refindex');
/* @var $refIndexObj t3lib_refindex */
$result = $refIndexObj->updateRefIndexTable($table, $id);
}

Попробуйте вызвать ее для своей записи.
Я не уверен, но кажется она как раз и создаст вам нужные записи в таблице sys_refindex. Вы можете покапаться в этом классе. Возможно найдете что-то еще.

А вот для FE действительно маловероятно использование иных таблиц, если только контент не связан с какими либо еще таблицами.

dmartynenko
28.09.2011, 19:19
Кстати, может быть вам чем-то будет полезен этот снипет: http://snippets.typo3.org/c/53/