Элементы содержимого внезапно переместились за пределы контейнера
Я столкнулся со странным поведением с TYPO3 CMS: я использую элемент контента "Grid-Element" на нескольких страницах.
CE "Grid-Element" всегда имеет разные дочерние элементы, такие как изображения или текст. Сегодня все дочерние элементы неожиданно вышли за пределы "Grid-Element" на каждой странице сайта. Я должен был исправить их один за другим вручную. В основном ничего не было потеряно, но структура была сломана.
Я также проверил историю редактирования, но там нет ничего уместного, чтобы увидеть.
Я хотел бы знать, как это произошло и как предотвратить это снова. Есть идеи?
3 ответа
Обновление: 1 из 2 инцидентов может быть связано с проблемой, не связанной с gridelements (см. Ниже).
У меня тоже был этот эффект.
Исправить / обойти
- Проверьте ваш тип данных
tt_content.colpos
в базе данных: это без знака? - Обновите gridelements до последней версии. Возможно, проблема была исправлена.
- Сделайте сравнение БД и дайте TYPO3 измениться
tt_content.colPos
вернуться к подписи (без подписи) - Примените обходной путь, как предложил Джо Хасенау:
UPDATE tt_content SET colPos = -1 WHERE tx_gridelements_container > 0
объяснение
Итак, (вероятно) произошло то, что colPos был изменен на unsigned, в результате чего все значения -1 были изменены на 0. Из-за этого структура gridelements больше не интерпретировалась правильно.
Ядро устанавливает colPos в unsigned, gridelements переопределяет его и устанавливает в sign.
Это изменение в схеме БД не должно произойти, если все работает правильно.
Тестовые случаи
Вот мои тесты:
- При обновлении с 8 до 9 я деактивировал все сторонние расширения перед обновлением. Во время обновления схема была изменена на неподписанную.
- (После установки расширения "min" в системе 8.7.24, colPos также был изменен на unsigned. Этого не должно было быть. "Min" безвреден и не меняет структуру БД вообще.)
Обновление: тестовый пример 2 можно отследить до (разработки) расширения с испорченным composer.json. Это довольно неясный сценарий, который, вероятно, очень редок, но он привел к хаосу в перечисленных расширениях в TYPO3 PackageManager, в результате чего схема gridelements не загружается.
Для полноты картины: вы можете воспроизвести его, используя ключ расширения другого активированного расширения в composer.json деактивированного расширения, например, в ext1/composer.json:
"replace": {
"ext2": "self.version",
"typo3-ter/Uniolexample": "self.version"
}
В 99% случаев это происходит, когда ядро TYPO3 обновляется без установки вспомогательных элементов. Выполнение сравнения базы данных изменит конфигурацию SQL для поля colPos с подписанного на неподписанное, таким образом, изменив -1 на 0.
Поскольку -1 является индикатором для дочерних элементов контейнера сетки, этот индикатор теряется.
Вы можете исправить это, запустив:
UPDATE tt_content SET colPos = -1 WHERE tx_gridelements_container > 0
Остальные 1% не смогли воспроизвести причину появления симптомов, поэтому в настоящее время мы точно не знаем, что с ними случилось.
При использовании gridelements у вас есть конфигурация для каждого элемента содержимого. Это хранится в базе данных, в основном на корневой странице.
Для каждого поля в контейнере вы устанавливаете colPos
число. Ваша сломанная структура могла произойти из-за:
- Любое изменение в базе данных, которое перезаписало
colPos
значение - Изменение конфигурации элемента для использования другого
colPos
значение
Недавно была исправлена ошибка, которая могла бы исправить и здесь симптомы. Таким образом, кажется, мы нашли причину 1%, упомянутых в моем другом ответе.
Пожалуйста, ознакомьтесь с последней версией мастера и посмотрите, исправит ли она и вашу проблему: https://forge.typo3.org/issues/85511