Элементы содержимого внезапно переместились за пределы контейнера

Я столкнулся со странным поведением с TYPO3 CMS: я использую элемент контента "Grid-Element" на нескольких страницах.

CE "Grid-Element" всегда имеет разные дочерние элементы, такие как изображения или текст. Сегодня все дочерние элементы неожиданно вышли за пределы "Grid-Element" на каждой странице сайта. Я должен был исправить их один за другим вручную. В основном ничего не было потеряно, но структура была сломана.

Я также проверил историю редактирования, но там нет ничего уместного, чтобы увидеть.

Я хотел бы знать, как это произошло и как предотвратить это снова. Есть идеи?

3 ответа

Обновление: 1 из 2 инцидентов может быть связано с проблемой, не связанной с gridelements (см. Ниже).

У меня тоже был этот эффект.

Исправить / обойти

  1. Проверьте ваш тип данных tt_content.colpos в базе данных: это без знака?
  2. Обновите gridelements до последней версии. Возможно, проблема была исправлена.
  3. Сделайте сравнение БД и дайте TYPO3 измениться tt_content.colPos вернуться к подписи (без подписи)
  4. Примените обходной путь, как предложил Джо Хасенау: UPDATE tt_content SET colPos = -1 WHERE tx_gridelements_container > 0

объяснение

Итак, (вероятно) произошло то, что colPos был изменен на unsigned, в результате чего все значения -1 были изменены на 0. Из-за этого структура gridelements больше не интерпретировалась правильно.

Ядро устанавливает colPos в unsigned, gridelements переопределяет его и устанавливает в sign.

Это изменение в схеме БД не должно произойти, если все работает правильно.

Тестовые случаи

Вот мои тесты:

  1. При обновлении с 8 до 9 я деактивировал все сторонние расширения перед обновлением. Во время обновления схема была изменена на неподписанную.
  2. (После установки расширения "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

Другие вопросы по тегам