В этом посте я предложу свою версию сабжа. На истину в последней инстанции не претендую. Итак, где же хранить, к примеру, сообщение для alert "Вы не авторизованы"? [spoiler] До недавних пор я хранил их в самом js-коде, иногда вынося в script-блок html-кода (var salert = 'Вы не авторизованы';), но как-то не нравилось мне это - не централизовано, кодировка может сбиться (если хранить в js-файле), или html-код загрязняется script-блоками. Я решил навести порядок.
Дело в том что на каждом хите уже подключается js-массив bx.message, в котором и хранятся системные фразы. Остается его дополнить нашими фразами и дело в шляпе.
Все. Массив мы можем хранить прямо в обработчике, или вынести централизованно где-то в админке. Речь не о решениях для маркета, поэтому подход у каждого проекта свой. Хотя, конечно, для Маркетплейса такой подход тоже приветствуется.
Теперь мы можем использовать фразу в js-коде:
a lert(bx.message('product_like'));
Очень полезная идея от разработчика Битрикс Евгения здесь.
Очень прикольно, весь код набран в нижнем регистре. Блонди-фаервол? Ребят из Битрикса, какой следующий шаг вы предпримете, чтобы уже точно отбить у нас желание писать посты?
Оффтопик, конечно но: Когда только начинал изучать js, с дуру начал изучение со стандарта, и подтягивая надписи из лэнг файлов, все боялся при использование CP1251, налететь на:
4.3.16 String value primitive value that is a finite ordered sequence of zero or more 16-bit unsigned integer NOTE A String value is a member of the String type. Each integer value in the sequence usually represents a single 16-bit unit of UTF-16 text. However, ECMAScript does not place any restrictions or requirements on the values except that they must be 16-bit unsigned integers.
Но либо разработчики браузеров упростили нам задачу, либо я не правильно перевожу этот блок из стандарта, но я так и ни разу и не встретил ожидаемой проблемы с кодировками
Иван , проблемы редки, но бывают. Но связаны они конечно с тем, что "открыл cp редактором в utf". Почему мне не нравятся ланг-фразы в js-коде еще - да потому что код открыт и каждому проходящему. А так будут смотреть и говорить как все круто и серьезно на проекте не знаю, лично я бы обратил внимание на такой момент в работе коллег.
Ну и еще один плюс, про который я не написал - одни и те же фразы определяются всего раз в коде.
Хочу поделится способом, который мы используем при разработке.
Иногда для правильной работы JS требуется не только его код, но еще и файл стилей CSS, языковой файл и иногда загрузка других встроенных библиотек, все это реализует наша библиотека JS Core.
JS Core так же отслеживает зависимости от других библиотек, в случае необходимости подключая их, при этом исключая дублирование подключений.
Данный метод полностью совместим с новой функцией ядра - "Оптимизация CSS и JS" которая вышла в обновлении main 12.0.7.
сомнительная крутизна генерить js-код средствами php. если кто-то захочет поменять "нравится" на "круто" - он же Вас прокленёт потом! ) вместо того, чтобы отредактировать очевидное место ему придётся рыскать в поисках спрятанного где-то в дебрях битрикса массива.
gall555 , для удобства все сообщения можно собрать например в лэнг файле шаблона и оставить комментарий в js о место нахождение языковых файлов, на случай поддержки сторонним программистом.
В дальнейшем это может облегчить работу. При таком подходе уже не обязательно быть программистом, чтобы изменить текст сообщения, т.е. владелец сайта, сможет зайти в лэнг файл, поправить нужные фразы, практически без риска что нибудь сломать на сайте (разве что добавит лишние кавычки, или удалит точку с запятой, но это менее критично, чем испортит что-либо в скрипте).
Еще одно преимущество, о котором часто забывают - отсутствие дублирования. Т.е. есть фраза, например "уже в корзине", которая может присутствовать в нескольких шаблонах catalog.section, catalog.element, и т.д., прописывается один раз, в одном месте, и в случае если нужно будет ее как либо изменить, не нужно будет обходить все шаблоны.
gall555 смотря что проклинающий встретит в js-коде. Если ересь, то да, проклянет. А если непонятный с первого взгляда массив, то источник его он полезет смотреть в единственное место - php_interface, где все грамотно структуировано.
Всё-таки удивляюсь насколько евангелисты Битрикс любят рекомендовать примеры плохого использования технологий. Во всех нормальных фреймворках существует бекендовый модуль для добавления статичного свойства в JS объект и вывода на всех страницах. Что-то аналогичное существует в Битрикс?
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».