Странные запросы в ядре

на примере addon.xml модуля rus_order_logs:

`description` text(100) DEFAULT ''

если text(100) - это так пытались указать создание индекса для текстового поля по первым 100 символам, то как понимаю делается это иначе https://dev.mysql.com/doc/refman/8.0/en/column-indexes.html :

CREATE TABLE test (blob_col BLOB, INDEX(blob_col(10)));

DEFAULT?
https://dev.mysql.com/doc/refman/8.0/en/blob.html :

BLOB and TEXT columns cannot have DEFAULT values

в итоге критичных ошибок нет, но создается поле

`description` text,
1 лайк

Работает и ладно :slight_smile:

Слишком много мест у нас, которые следует этому принципу

3 лайка

Ну если один из ведущих разработчиков модулей пишет как самый худший студент - совершенно нечитаемый код, то DEFAULT для поле TEXT - это наименьшая проблема :slight_smile:
screen-1

Они оптимизирут код перед его выкладкой - удаляют пробелы и табы, иногда переводы строк: ведущие пробелы - могут давать 30-40% к объему файла, который при работе скрипта загружается в память, так что это даже полезное дело. С одной стороны плохо, что цскартовцы этого не делают, так как объем ядра уменьшился бы процентов на 20, а с другой - хорошо, так как часто приходится лазить в код и что-то править…

1 лайк

Просмотрел код. Потом подумал, мол, может я дурак и пересмотрел ещё раз. Не понял что не читаемого и плохого в коде.

В текстовых редакторах (и тем более IDE) часто есть функционал “реформат кода”, который добавит Вам так недостающие пробелы.

Мы вырезаем пробелы из части файлов, чтоб архив модуля весил меньше.

3 лайка

Вот еще…
в файле шаблона
/design/backend/templates/addons/rus_order_logs/views/orders/components/order_logs.tpl
в блоке div -
один открыывающий тег < table >
и два (!) закрывающих < / table >
к чему бы это? проверил в обновленном тесте - всё неизменно с самого выхода модуля.

PS - еще атавизм в модуле - в таблице есть поле

`label` char(1) DEFAULT ''

которое вообще нигде и никогда не используется - видимо были планы, но потом о них забыли. кстати, не убирайте это поле, я придумал ему применение - по клику на строку комментария администратора в модуле


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

2 лайка

Здравствуйте @alex_vp
Спасибо за ваше обращение и предоставленную информацию.
Синтаксис действительно не совсем верный, однако это не является багом.
Возможно, синтаксис будет изменен в одной из будущих версий.

1 лайк

Здравствуйте.

Действительно, в шаблоне есть дублирующий закрывающий тег </table>. Но т. к. браузеры умные, они сами вырезали этот тег. Поэтому баг не был замечен в течение 8 лет :slight_smile:

Мы исправили проблему с дублирующим тегом </table>. Исправление войдет в CS-Cart 4.14.3.

1 лайк

А умные браузеры какой тег вырезают, в их понимании лишний будет первый тег </table> или следующий за ним </table>?

Проще всего открыть инструменты разработчика в браузере и посмотреть что получилось:

  1. Было — Ctrl + U
  2. Стало — F12

Логика работы с невалидным содержимым сложная. Но современные спецификации HTML описывают не только, как вести браузеру, когда код валидный. Но и как рендерить страницу, если код невалидный. Например: https://html.spec.whatwg.org/multipage/parsing.html#unclosed-formatting-elements

Спасибо за быстрый ответ и ссылку на стандарты html, но всё равно обывателю сложно разобраться в этих хитросплетениях.
Просто кажите, по вашему мнению, в конкретном случае по логике браузера, какой тег будет вырезан, первый или второй?

По человеческой логике браузер встречает первое вхождение и остальные игнорирует, т.к. тег уже закрыт. Он не будет парсить раз за разом страницу в поисках дублей закрывающих тегов для каждого из них.

Я тоже сделал такой вывод. Но, возникает вопрос ещё и в том, какой из тегов верный, как было задумано разработчиками. Расположение закрывающего тега может влиять на разметку блока или страницы, и если убрать не тот что нужно, то в каких-то браузерах может поехать вёрстка.

Но это же не проблемы браузера

Правильно, я о проблеме лишних тегов в платформе.

Правильно, и если такую таблицу с двумя закрывающими тегами обернуть ещё одной таблицей, то что произойдёт?

Однозначно, ничего хорошего. А ещё, если к таблице применены стили, то вообще непредсказуемый результат.

В общем случае вырезается второй тег:

<div id="wrapper">
    <span>
        content
    </span>← 1 closing tag | 2 closing tag →</span>
</div>

<div id="wrapper">
    <span>
        content
    </span>← 1 closing tag | 2 closing tag →
</div>

Песочница https://codepen.io/csavoronin/pen/eYyyEXM

Смысл веб-спецификаций в том, что если поедет верстка, то она должна поехать во всех браузерах одинаково.